Posted on 2008-03-04 19:09
dennis 阅读(666)
评论(1) 编辑 收藏 所属分类:
涂鸦
最近一直在写Ruby脚本,说出来你可能不相信,我用Ruby写游戏脚本
。用的是JRuby,采用JRuby是因为定时器的问题,Ruby1.8.6因为线程是用户空间内的本地线程,标准库没有提供强大的定时器功能,而对于游戏逻辑有相当多的任务需要定时处理,权衡之下,最后决定使用JRuby,封装了java的
ScheduledExecutorService,等以后Ruby有更完善的定时器的时候就切换回来(我猜测引入了native thread的Ruby1.9应该有更强大的定时器),基本满足了要求。这一过程也更让我觉的JRuby是个非常有前途的项目,利用Ruby的语法以及动态语言的高效加上java极其丰富的类库
,这样的组合有莫大的威力,况且 JRuby的性能比之c ruby在某些方面更有优势,在1.1出来后应该可以有一个更大的提升。
写Ruby脚本唯一比较郁闷的是重构,尽管Netbeans比RDT提供了更好的重构功能,但是对于一些复杂重构仍然没有比较好的支持,况且我也不敢完全信任IDE的自动化,这种时候更显示出完备的单元测试的重要性,如果没有单元测试,对Ruby脚本的重构简直难以想象。另外一个比较麻烦的是,Ruby对二进制的处理并不是很方便,尽管使用了bit-struct,但是它只能支持定长的数据结构,而不是可变长度的array list,变长的string,或者switch结构;尽管我自己做了简单的扩展,仍然很局限。幸好我遇到这样的情况不多,通过其他手段变通处理也还能接受。后来javaeye上的庄表伟老大发布了
DynamicStruct,这个才是根本解决之道,两者结合使用应该可以处理所有情况了。不过那时我的协议处理部分都已经完成,下次有机会再试试。
读书嘛,最近终于开始读买了许久的《代码大全2》,以前是真怕这种大部头,看着就没信心读完,哇哈哈,没想到一读下去就一发不可收拾,真是好书一本,就软件构建中的设计一章就值回书钱了。又利用晚上在重读sicp前三章,在注释这样的边边角角原来也非常有价值,例如对闭包和组合的解释,静态语言由于有太多的声明式结构(struct、class etc.)反而对组合造成了阻碍和惩罚,而在Lisp中由于通用的组合粘合剂cons的存在,可以以一种统一的方式去处理组合结构,模拟各种复杂的数据结构。今天托同事在当当上买的书到了,《unix编程艺术》到手,这书按牛人的说法是sicp的实践版,不读就相当遗憾了。