SQUIRREL語言

Squirrel是一種較新的程式設計語言,它從著名的LUA語言繼承了很多特性,適用的範圍也與LUA語言相似。

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++或者Java的編譯要簡單很多,它的虛擬機也不會有JVM這樣“底層”,Squirrel的虛擬機更像是一個“函式執行佇列”,這個虛擬機是建立在標準libc基礎上的(也就是說標準C函式在這個虛擬機中是元操作,而JVM是建立在彙編語言基礎上的)。

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很相似)。

值得注意的是local關鍵字,Squirrel中的變數是需要定義的,和C++一樣,你可以在程式的任何地方定義,但定義的時候必須使用local關鍵字。使用local表明變數在堆疊里創建,離開函式才會自動銷毀。

Squirrel循環控制語句增加了foreach循環,而且這個foreach不像Lua一樣需要什麼“閉包”,可以很簡單的使用,例如foreach(local i in arrayVar){},這完成對一個數組的遍歷,foreach(local key,value in tableVar){}, 這完成對一個表達遍歷。

相關詞條

相關搜尋

熱門詞條

聯絡我們