专访开源项目Amoeba架构师陈思儒
DBA notes站长冯大辉(Fenng)代表InfoQ中文站采访了分布式数据库Proxy开源项目Amoeba的架构师和主要开发者陈思儒,内容包括Amoeba项目的起因、功能及其愿景等。
作者 Werner Schuster译者 宋玮 发布于 2007年5月29日 上午10时37分
XRuby在努力创建一种编译器,能将Ruby编译成Java字节码。当然,编译器需要一种分析输入语言的方法,XRuby团队用流行的ANTLR分析器产生器创建了他们自己的Ruby分析器。分析器产生器的作用是接收一门语言的文法并产生代码以分析该语言。使用ANTLR意味着文法和分析器的创建工作必须从零开始,这不同于JRuby的方法。在JRuby里,Ruby分析器使用了另外一种叫做YACC的分析器产生器,而且JRuby选择复用该文法并使用Yacc的Java端口产生其分析器。
当被问到Ruby是否是一个分析起来比较困难的语言时,Wang Haofei(从事该Google Soc项目并且是XRuby团队的一员)做出了如下解释:
是的。该语言有许多模棱两可的地方。比如,“<<”可能是左位移操作,也可能是heredoc的起点。区分这两种情况需要维护状态(依赖上下文):
http://seclib.blogspot.com/2005/11/distinguish-leftshift-and-heredoc.html
其它像ID/函数的模糊性,字符串表达式替换,heredoc等等都很棘手。
当提到困难时,一个不错的问题是离目标还有多远。Wang Huofei:
XRuby第一个公开发行版已经可以处理全部ruby标准类库和Ruby on Rails(没有在对最新版做测试):
http://seclib.blogspot.com/2006/02/first-release-of-rubyfront.html
自此以后,Xue修正了一些bug,总的来说XRuby很稳定。在SoC项目进行过程中我们将编写和运行更多的测试,以帮助我们发现一些未知的问题。
Xue Yong Zhi是该SoC项目的指导者,而且也是XRuby团队的成员。
该Soc项目的一个主要部分是将现有的分析器迁移到ANTLR v3上。Wang Huofei:
1. ANTLR v3对v2进行了重写,通过LL(*)分析大大提高了分析能力,v2的分析能力不但弱很多(有限的LL(k))而且还迫使我不得不花时间去处理一些问题。基于ANTLR的分析器比别的分析器更容易维护,迁移到v3将帮助我们把分析器做得更好更清晰。
2. ANTLR v3将来应该有Ruby后端支持,所以我们可能会用Ruby编写Ruby分析器。
3. ANTLR v3的性能更好。
上面第二点十分有趣。Ruby缺少一个用Ruby写的Ruby分析器。编写处理Ruby代码的工具是一个问题。用Ruby写代码分析、重构工具和自动重构、格式程序等等甚至更多的工具并非不可能,但是很困难,因为还没有用Ruby代码分析Ruby源码的先例。有些工作,像Ryan Davis的分析树,用的是Ruby解释器的分析器(通过一个本地扩展)来获得Ruby源码的抽象语法树(AST)。AST是一颗代表Ruby源码的树,分析器工具必须了解代码的结构。然而,分析树不是一个完整的解决方案,因为当前的版本没有给出树上各个节点的源码位置。显然,像重命名一个Ruby源文件中的标识符这样的重构算法,需要知道标识符的位置在哪儿。
由于各式各样的Ruby IDE问世,这个问题在过去几年里变得更加明显了。这些带有代码分析器(用来警告代码中潜在的错误)并基于Eclipse RDT的IDE是第一个支持Ruby广泛重构特征的IDE。其他特征是支持基于Ruby的文件的,比如Rake文件——Ruby的make 或ant文件。问题是:这些工具都是用Java构建的(或其他语言)且Java IDE都使用JRuby分析器。
这意味着这些工具的功能都被那些语言禁固了,更糟的是,这些工具常常绑定到了特定的IDE上。例如,支持RDT的重构逻辑,对Ruby in Steel(建立在Visual Studio上的IDE)是不可用的。在Java界与之相比的区别是,分析器是可用的。像PMD或Findbugs这些工具都是用Java编写的,因此Java在哪里运行都可使用这些工具,更重要的是,可以用Java代码扩展这些工具。
因为该Soc项目的描述并没有100%说清楚基于Ruby的分析器的研究计划,Wang Huofei澄清了该项目计划:
这取决于我们做得有多好。即使不能满足Soc的进度表,我们也愿意做这些事情。
好消息。
制造代码工具一个必须的东西是AST,用来分析源码。前面已经提到的分析树,提供了一种表现Ruby源代码的格式。已有的基于分析树的工具,比如Ruby2Ruby可以把AST转换成Ruby源代码;如果某工具想修改AST并输出为Ruby源代码,这很有用。Rubinus,一个用Ruby实现Ruby VM的项目,也使用了分析树输出,用以把Ruby编译为Rubinius字节码,接着解释这些字节码。当被问到分析器的输出时,Wang Haofei这样解释到:
ANTLR有其自己内建的AST支持,这为我们序列化一个字符串或改变其他结构提供了很大方便。我们的分析器与分析树输出看起来很相似。在XRuby里我们把AST转换成像DOM这样的结构并使用Visitor模式产生Java字节码。
而分析树输出看起来还没有计划,很有可能把ANTLR产生的AST转化成分析树格式。一个类似的方法已经被JParseTree(JRuby的一个分析树端口)所采用,现在JRuby一部分额外软件包(JRuby Extras)提供了常用Ruby类库的JRuby端口。
从XRuby团队的blog可以得到更多关于XRuby及其分析器项目信息。
查看英文原文:Google SoC Series: ANTLR v3 Ruby ParserDBA notes站长冯大辉(Fenng)代表InfoQ中文站采访了分布式数据库Proxy开源项目Amoeba的架构师和主要开发者陈思儒,内容包括Amoeba项目的起因、功能及其愿景等。
作为三期系列文章的第二部分,本文延续了上一期内容,介绍了RichFaces,包括如何把RichFaces集成到之前提到的示例应用中、如何部署RichFaces porlet和RichFaces的多种特性和功能。
Amazon Web Services(AWS)的传道者Jeff Barr讨论了SimpleDB、S3、EC2、SQS、云计算、Amazon的不同服务如何与应用交互、AWS的起源、SimpleDB和微软SQL Server Data Services、AWS cloud的全球化、三月份的AWS停机。
Erlang的并发模型很有名,它的健壮性也很有名。但其他方面呢?在这篇文章里,Dennis Byrne演示了如何用Erlang建立内部DSL。
本视频主要以FreeWheel为例,对一个基于Rails的企业级应用进行了剖析。其中包括:FreeWheel的架构、部署、数据库的问题、REST API、敏捷开发过程、如何去写测试以及持续集成等等。
JavaFX显示了Sun的Java系列产品市场方向的一个重大转变。随着1.0版的即将发布,InfoQ以JavaFX预览版为参考,与Sun高级工程师Joshua Marinacci探讨了即将发布的1.0正式版。
本文主要讲述了如何用JBoss Portlet Container 和JBoss Portlet Bridge创建新项目,怎样配置一个JSF应用去使用JBoss Portlet Bridge,以及JBoss Portlet Bridge所具备的功能。
1 条回复
回复