刚才读资料的时候又看到了[url=http://kmaebashi.com/programmer/devlang/crowbar_0_4_02.html]crowbar[/url]的链接,突然有这兴致去把它编译出来玩玩。
但是直接把[url=http://kmaebashi.com/programmer/devlang/crowbar_0_4_02_win.LZH]源码包[/url]下载下来却没办法直接编译。我用的是对应GCC 3.4.5的MinGW和某个老版本的msys。按照一般程序,先configure,然后make...出错了。
看了下,发觉有些依赖项在这台机上没装。包括flex,、bison、regex和Oniguruma。
从SourceForge:[url=http://sourceforge.net/project/showfiles.php?group_id=2435&package_id=67879]MSYS Supplementary Tools[/url]下载bison、flex和regex。
从[url=http://www.geocities.jp/kosako3/oniguruma/]Oniguruma[/url]把鬼車下载下来。
先把Oniguruma编译出来。一样,make然后make install,完全没问题。
再回到crowbar去make,还是出错,说找不到-lonig。这就怪了,刚装上Oniguruma不是么。打开makefile,加上LIBS = /usr/local/lib然后给后面几个需要链接libonig.a的地方加上$(LIBS)。
再make,还是出错 - -
发觉那个组装出来的builtin.c有点问题。本来builtin.c的末尾应该附加上./builtin/tail.txt的内容,但实际上却没有。不管了,手动给加上去吧。
继续出错。说找不到st_src_array。仔细看了下,把builtin.c里crb_compile_built_in_script里的for循环去掉,直接调用CRB_compile_string(inter, st_builtin_src);
再make,终于OK了。
-------------------------------------------------------------------------------
这crowbar还是挺有趣的。基本上就是个小型的JavaScript,一些重要的特性都实现了,例如作用域链(scope chain)、基于对象(object-based,但还不算基于原型的面向对象(prototype-based OO))等。
-------------------------------------------------------------------------------
把编译结果放在附件里。说不定以后还会再拿来玩玩,懒得次次都重新编译 ^ ^
但是直接把[url=http://kmaebashi.com/programmer/devlang/crowbar_0_4_02_win.LZH]源码包[/url]下载下来却没办法直接编译。我用的是对应GCC 3.4.5的MinGW和某个老版本的msys。按照一般程序,先configure,然后make...出错了。
看了下,发觉有些依赖项在这台机上没装。包括flex,、bison、regex和Oniguruma。
从SourceForge:[url=http://sourceforge.net/project/showfiles.php?group_id=2435&package_id=67879]MSYS Supplementary Tools[/url]下载bison、flex和regex。
从[url=http://www.geocities.jp/kosako3/oniguruma/]Oniguruma[/url]把鬼車下载下来。
先把Oniguruma编译出来。一样,make然后make install,完全没问题。
再回到crowbar去make,还是出错,说找不到-lonig。这就怪了,刚装上Oniguruma不是么。打开makefile,加上LIBS = /usr/local/lib然后给后面几个需要链接libonig.a的地方加上$(LIBS)。
再make,还是出错 - -
发觉那个组装出来的builtin.c有点问题。本来builtin.c的末尾应该附加上./builtin/tail.txt的内容,但实际上却没有。不管了,手动给加上去吧。
继续出错。说找不到st_src_array。仔细看了下,把builtin.c里crb_compile_built_in_script里的for循环去掉,直接调用CRB_compile_string(inter, st_builtin_src);
再make,终于OK了。
-------------------------------------------------------------------------------
这crowbar还是挺有趣的。基本上就是个小型的JavaScript,一些重要的特性都实现了,例如作用域链(scope chain)、基于对象(object-based,但还不算基于原型的面向对象(prototype-based OO))等。
-------------------------------------------------------------------------------
把编译结果放在附件里。说不定以后还会再拿来玩玩,懒得次次都重新编译 ^ ^
function __foo(i) {
this = new_object();
this.i = i;
this.goo = closure() {
print("i = " + i + "\n");
};
return this;
}
a = __foo(3);
a.goo(); // "i = 3"