学习haskell一段时间了,关于monad等等东西仍停留在理论上的理解而不了解其应用,练下手总是好的。于是参考这个有名的《Write Yourself a Scheme in 48 Hours》和parsec的手册,实现了个简单的语言。只是简单的递归解析语法树,也没有中间编译,也没有垃圾收集,实现起来还是比较简单的。某天天气不错,晴天,就叫它Fineday。
Fineday的语法比较接近javascript(其实一开始是打算搞成basic-style的,可是不会写bnf...囧),有基本的控制流程if,while,for,有匿名函数,有闭包,有数组,有hash---当然,是忽略了许许多多细节的实现,例如没有求数组length的函数,只有puts而没有gets,没有Int类型(开始的时候为了方便一切都是double),没有像样子的错误提示...呵,but it runs.
像下面这段可以算是一个猥琐的oo实现了:
function makeCounter(init){
var this={
'n':init,
'add':function(n){
this['n']=this['n']+n;
return this['n'];
}
};
return this;
}
var counter=makeCounter(1);
puts((counter['add'])(2)); --3
puts(counter['add'](3)); --6
前几天又翻了下姐姐送的那本《the ruby way》的序,matz谈及ruby语言的设计时提到了“道”,以及编写ruby时的信条:语言应该为人类服务,而不是相反。于是认识到,语言的设计绝非信手拈来的活计,设计中有太多需要斟酌的地方,有太多需要用心思考的地方。我等玩代码的,还是差的太远了。
项目地址:http://code.google.com/p/fineday/ 呵,空白的,懒得再写字了。可以用svn获得源代码及编译的exe文件。