分享
 
 
 

SQUIRREL语言

王朝百科·作者佚名  2010-05-25
窄屏简体版  字體: |||超大  

OverviewSquirrel 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是一种较新的程序设计语言,它从著名的LUA语言继承了很多特性,适用的范围也与LUA语言相似。

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){}, 这完成对一个表达遍历。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有