项目托管到这里了:
http://code.google.com/p/smalllanguage/
version 0.1
2011.6.17SmallLanguage?的version 0.1总算完了。算起来,从第一次开始写脚本到现在也有一年多的时间了,前两次都是写了几天就由于种种原因放下了,好在一次比一次思路更开阔。这一次算是彻底地实现了一直以来追求的模样。很多很多的地方看起来依然不甚满意,我会一条条地记录下来,挨个修改。 这两天CSDN首页挂出了一条新闻,说Lua已经进入前十了。以前工作中用过Lua,也为它写过扩展库,所以多了解一些。它的小巧和灵活是名不虚传的。我写SmallLanguage?之前构思的时候,也一直在想,同是比较小的脚本,那么和Lua比,它需要有什么特色?技术没有好坏之分,但没有特色的东西是活不下去的。初期的想法,是要比Lua更简洁,甚至没有预置的API和复杂的数据结构。但这种寄生于主流编程语言的脚本天然是需要扩展的,只是方式问题。目前有了一些思路,但还需要再完善。要在写的过程中慢慢地体会和修改了。
version 0.2
2011.6.18
可以写一些C/C++函数注册进去,然后在脚本里面调用,目前只写了一个System包,包里面只有print,scan,add三个函数。主要用于调试。这种扩展机制很简单,学习的Lua。这一块儿不想搞得再复杂了。
version 0.3
2011.6.19
重新编排了一下目录,可以用Makefile进行编译和测试了。
version 0.4
2011.6.22
变量分成三种:text,number,boolean。变量具有初始值(text:空,number:0,boolean:false)。函数参数也有这三种类型。函数返回值有void,text,number,boolean四种类型。 另外增加了test的功能。只要把测试脚本(假设文件名是script.txt)放在test目录下,然后回到SmallLanguage?目录运行 ./test.sh script.txt 即可测试
version 0.5
2011.7.1
增加脚本错误提示功能,当脚本解释失败时,会提示出两种错误: user error:告诉脚本开发者,错误的行号和原因。 developer error:告诉脚本引擎开发者,发生错误的.cpp文件、代码行号和原因。 另外,重新组织了一下目录。
编译: make
安装: make install
运行: ./test.sh code.txt(需要测试的脚本文件名,放在script目录下)
卸载: make uninstall
clean: make clean
version 0.6
2011.7.11
写了几个工具类:String,Vector,Log,Stack
替换C++的vector,string,iostream等库,方便向Android等对C++库支持不完全的平台上面移植。
更新了文件夹结构安排,方便Makefile编译和扩展自定义库
version 0.7
2011.7.18
markError与LOGE合并。建立了统一的LOG框架。LOGV是打印信息之用,LOGE是出错时使用,它们都支持可变参数列表。LOGE使用了longjmp来跳到executeScript的起点,不会导致程序强制退出,可以让宿主语言很从容地结束脚本引擎。
Vector和Stack的内部机制进行了优化。
version 0.8
2011.7.29
实现了函数调用堆栈记录功能,LOG中除了脚本错误行数、脚本引擎错误行数以外,也可以打印脚本函数调用轨迹了。
建立了字节码OPCode的内存池。避免脚本长时间运行过程中不断new/delete引起的内存碎片问题。
模仿Java做了一个字符串常量池,反复进行相同的字符串操作时不会再引起内存的分配/释放了。但在字符串常量池中进行查找和比较仍然需要线性时间,所以写脚本时还是要尽量避免重复进行字符串运算。
version 0.9
2011.8.16
OPCode从内存池分配后记录位置,后面交给内存池回收时只需要常量时间。
把以前写的一个智能指针工具SmallPointor移植过来了。与Android的sp不同的是,指针放入SmallPointor封装起来后只能通过SmallPointor->和*SmallPointor访问。因为计数器在SmallPointor内部。
添加了计时器精确到微秒
写时共享(copy-on-write)技术实现起来会让String变得复杂,而实际的工作并没有少做,只是延时去做。对于小字符串来说,好处不大,而String用的地方很多,稳定性很重要。所以暂时没有加上。加的时候可以参考这篇文章:
标准C++类std::string的内存共享和Copy-On-Write技术
http://blog.csdn.net/haoel/article/details/24058