单元测试=》接口依赖=》Factory=》依赖注入
有时间深入研究一下Guice,算是工作学习两不误。
2012年1月12日星期四
2012年1月8日星期日
一点点LLVM
今天花了些时间仔细地学习了一些LLVM,很悲剧的事情是虽然LLVM异常强大,但实在资料缺乏,而且接口改动频繁,网上大多数的简介对于LLVM 3.0都不work了(比如http://gnuu.org/2009/09/18/writing-your-own-toy-compiler/)
最好的入门资料还是自带的sample,都是可以用的;-)今天看的第一个sample就是鼎鼎大名的BrainF语言,着实BT啊。但看着很neat的几百行代码就能把这么BT的东西变成native code,还是很爽的。
这一段运行出来就是打印Hello World,好吧,我hold不住了---
客观说,LLVM官网上还是有些不错的资料的,比如LLVM Tutorial,非常适合入门。当然它全是hard-code的lex和parser,如果用flex/bison应该更好些,这个应该可以借鉴Loren Segal的做法,用flex做lexical scan,用bison做semantic parse和AST生成,最后再在AST上利用LLVM做code generation应该是更靠谱的做法。
简单玩了以后,虽然大概知道了LLVM的强大,感觉主要应该就是在于JIT和code generation,以及相应的optimization,cross-platform的native code generation应该也是一个亮点,所以应该是自己写compiler的人很喜欢的东东,但不知道是否能够对code generation以及optimization做精细控制,否则我估计大多数compiler还是会自己做generation,毕竟可控性更强,至少我看到的目前一些compiler,包括比较新的Go,都没有使用LLVM来进行code generation。所以难道LLVM只是给compiler外行们玩玩的toy?
我想肯定不是这样咯,我觉得它可能最大的创新还是在于LLVM IR中间语言的引入,在project built with LLVM里看到一个很好玩的项目:Emscripten,它是利用LLVM做backend把LLVM IR翻译成javascript,这又有什么用呢?好吧,看看这个网站。以后神马语言都能转成javascript放在web上跑鸟。
最后,一个相对比较全面的学习用LLVM写compiler的网站:http://staff.polito.it/silvano.rivoira/HowToWriteYourOwnCompiler.htm,虽然不保证up-to-date,但对于系统地学习一下怎么做个OO的language应该是有帮助的,我也正在看ing。
最好的入门资料还是自带的sample,都是可以用的;-)今天看的第一个sample就是鼎鼎大名的BrainF语言,着实BT啊。但看着很neat的几百行代码就能把这么BT的东西变成native code,还是很爽的。
++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.
这一段运行出来就是打印Hello World,好吧,我hold不住了---
客观说,LLVM官网上还是有些不错的资料的,比如LLVM Tutorial,非常适合入门。当然它全是hard-code的lex和parser,如果用flex/bison应该更好些,这个应该可以借鉴Loren Segal的做法,用flex做lexical scan,用bison做semantic parse和AST生成,最后再在AST上利用LLVM做code generation应该是更靠谱的做法。
简单玩了以后,虽然大概知道了LLVM的强大,感觉主要应该就是在于JIT和code generation,以及相应的optimization,cross-platform的native code generation应该也是一个亮点,所以应该是自己写compiler的人很喜欢的东东,但不知道是否能够对code generation以及optimization做精细控制,否则我估计大多数compiler还是会自己做generation,毕竟可控性更强,至少我看到的目前一些compiler,包括比较新的Go,都没有使用LLVM来进行code generation。所以难道LLVM只是给compiler外行们玩玩的toy?
我想肯定不是这样咯,我觉得它可能最大的创新还是在于LLVM IR中间语言的引入,在project built with LLVM里看到一个很好玩的项目:Emscripten,它是利用LLVM做backend把LLVM IR翻译成javascript,这又有什么用呢?好吧,看看这个网站。以后神马语言都能转成javascript放在web上跑鸟。
最后,一个相对比较全面的学习用LLVM写compiler的网站:http://staff.polito.it/silvano.rivoira/HowToWriteYourOwnCompiler.htm,虽然不保证up-to-date,但对于系统地学习一下怎么做个OO的language应该是有帮助的,我也正在看ing。
订阅:
博文 (Atom)