Squirrel是一種較新的程式設計語言,它從著名的LUA語言繼承了很多特性,適用的範圍也與LUA語言相似。
基本介紹
- 中文名:SQUIRREL語言
- 適用的範圍:與LUA語言相似
- 特性:繼承了很多特性
- 作者:義大利人
Overview,中文介紹,
Overview
Squirrel is a high level imperative/OO programming language, designed to be a powerful scripting tool that fits in the size, memory bandwidth, and real-time requirements of applications like games. Although Squirrel offers a wide range of features like:
`Open Source zlib/libpng license
`dynamic typing
`delegation
`classes & inheritance
`higher order functions
`generators
`cooperative threads(coroutines)
`tail recursion
`exception handling
`automatic memory management (CPU bursts free; mixed approach ref counting/GC)
`weak references
`both compiler and virtual machine fit together in about 6k lines of C++ code.
`optional 16bits characters strings
`compiles on both 32 and 64 bits architectures
Squirrel is inspired by languages like Python,Javascript and expecially Lua(The API is very similar and the table code is based on the Lua one)
--------------------------------------------------------------------------------
中文介紹
Squirrel的作者是義大利人Alberto Demichelis,SQUIRREL開發的本意是用於替代LUA,LUA的很多語法與C/C++ 不一致,C/C++程式設計師寫腳本時,容易犯錯誤,而SQUIRREL語法與C/C++很相似,因此Squirrel更適合C/C++ 程式設計師。
Squirrel在設計上就是要做到嵌入C/C++程式,因此,Squirrel虛擬機可以與C/C++工作在一個進程/執行緒當中,通過虛擬機的接口,C/C++的數據可以被嵌入的Squirrel代碼訪問,反之Squirrel的代碼和數據也可以被C/C++完全控制。
從語言結構上看,Squirrel與Lua一脈相承,Squirrel與Lua的基礎都是廣義表(或者說是一顆多叉樹),Hash算法在這個廣義表中起到一個關鍵的作用。
Squirrel代碼和數據都是組織在一個廣義表當中的。數據、函式、類(Lua不支持OO,Squirrel支持有限的OO)都是廣義表的一個值,值都是採用<名稱,值>的方式存儲的,通過對名稱的Hash,可以很方便的找到值。
Squirrel比Lua更好的支持OO,Squirrel可以定義類,允許類繼承,能夠自動執行構造(constructor函式),而Lua只能通過Table來模擬類。更關鍵的一點,Squirrel允許類產生實例(instance),每個實例擁有自己的存儲空間,在這點上,比Lua的模擬類明顯好用。
Squirrel支持在每個實例上設定一個Userpoint,這個特性非常有利與與C++Object的接口,一個Squirrel類可以的作為一個C++ class的影子運行,我們只需要在Squirrel上實現C++class的接口,通過Squirrel的Userpoint,即可操控這個C++ Object。
值得關注的是Squirrel的執行速度,執行一個10000元素的數組創建及遍歷,其速度大約是C++的1/4,比Lua快20%。
Squirrel的保留字與C++幾乎一致,但Squirrel沒有指針,記憶體由虛擬機管理,不需要手工申請和釋放,所以沒有new和delete關鍵字。Squirrel是弱類型的,所以也就沒有char、float、int、double等關鍵字,值得注意到是Squirrel不支持double(Squirrel 3.0支持使用double代替float),其浮點數內部是float,這可能與Squirrel主要為遊戲設計有關。
Squirrel新增了一些關鍵字,主要有local、typeof、instanceof、resum、yield、delegate、parent等(其中delegate、 parent關鍵字在Squirrel3.0Alpha版中似乎有變化),resum、yield用於Squirrel的“協程”,可以理解為非搶先式的內部執行緒(Squirrel虛擬機是單執行緒的,一個虛擬機內部不支持系統的執行緒,這和Lua很相似)。