用来创建基于JavaScript web应用的以Java为中心的编译器
Google Web Toolkit(GWT),今天(8月28日)它发布了
1.5版。InfoQ有幸采访了其技术领导Bruce Johnson以了解关于该发布的更多信息及增加的新特性。
GWT 1.5的主要新特性包括:
- Java 5语言支持——支持Java 5的特性如泛型、枚举、注解、自动装箱及可变参数列表
- 编译优化——编译后的应用的性能再一次得到改进,现有的应用使用GWT1.5重新编译后速度将有很大提升
- JavaScript增强——JavaScript的Overlay类型及新的高性能的DOM API提供了强类型的JavaScript对象和DOM编程,而这一切无需增加运行时成本
- 默认的可视化主题——新版本提供了几个基于CSS的UI主题以初始化应用的感官(look-and-feel)
可以在
这里查看完全的变化列表及
发布信息。
Johnson阐述了1.5版的几个变化:
[@gwt.eventArgs以前用作]针对RPC的基于javadoc的元数据。这是一个很棒的示例,因为当升级到GWT 1.5时,大多数人一开始都会遇到这个变化。RPC现在变得更简单也更丰富,因为RPC接口可以简单地指定泛型集合。另一个值得注意的事情就是GWT 1.5现在已经完全支持“long”原始数据类型了。在GWT 1.5之前,“long”并没有得到真正支持,因为JavaScript没有64位的整数类型,因此使用本地的JS number并不能表示“long”的全部范围。在GWT 1.5中,我们通过产生额外的代码来确保long的行为是完全正确的,尽管在性能上要比GWT 1.4稍微低点。这是不可避免的:我们必须在性能和正确性上做出抉择,显然我们会选择后者。如果你在GWT 1.4中大量使用了long类型并且速度要比数字范围更加重要的话,请考虑将这些变量改为“int”或者“double”以保持与GWT 1.4一样的速度。
Johnson还详细分析了编译器的变化——以此来支持1.5版:

Code
GWT编译器前端重用了Eclipse提供的优秀的Java编译器。它处理所有的解析和语法检查,然后构建一个抽象的语法树(abstract syntax tree,即AST)。接下来我们使用该AST进行优化并生成JavaScript输出。Eclipse编译器让我们变得更加轻松,因为它处理了大量工作。但是,寻求在JavaScript中有效地表达新概念的方式,如枚举和增强的for循环,仍然花费了我们大量的工作。新的语言特性还对GWT库起到了积极的连锁反应,最明显的就是在RPC中能够使用泛型这个新功能,我们还对注解进行了扩展以在下面这些情况中代替基于javadoc的元数据方式:国际化、图像包和基准。
Johnson说到GWT在web开发方面的主要竞争对手可以分为三类,同时也谈到了GWT该如何使自己有别于这些竞争对手:
- 非DOM的UI模型,如Flex——GWT使用浏览器的DOM模型而并不想代替它,同时Johnson指出GWT已经实现了一些非常棒的Flash和DOM UI的集成
- 服务器端的HTML生成器,如JSF——GWT对其是个补充,因为它是纯粹的客户端技术(除了RPC之外),并且它与服务器端组件集成的很好,然而Johnson指出更加丰富、更具状态的GWT客户端代码使我们可以构建更具响应性和流畅的UI,从而降低了对服务器端的等待
- AJAX库,如Dojo与jQuery——这儿的主要区别在于编程语言的选择;GWT使用现有的Java开发工具和编译器功能来产生高度优化的JavaScript代码。我们可以同时使用Java和JavaScript,然而Johnson说到Java使用的越多,GWT编译器的优化程度也就越高
当被问到GWT与Google的其他工程的整合时,Johnson说到:
关键点:GWT给予你很多,但是它不想变成一个“围墙花园(walled garden)”。任何抽象都会有遗漏的东西,所以最好接受这个事实。我们有意简化该抽象,这样你就可以触及JavaScript的具体细节,那么你就可以集成你喜欢的任何其他技术了。这种灵活性对于GWT本身和其用户来说都是一种保险单:你可以确定你能将任何客户端技术与GWT集成,同时我们(GWT开发小组)也不必显式地将其与开放的东西进行集成,因为你总是可以自己完成这件事而不必等我们来完成。对于我所提到的灵活性的示例,请参考
Ray Cromwell的工作——Syndroid。
Johnson还说有很多与GWT的集成,包括将其集成到Spring、Flash以及
大量的Google Code projects。
当被问到GWT未来的计划时,Johnson说到:
我们将继续关注性能改进以及将要从GWT孵化器中出来的几个新widget,包括一个日历控件和几个漂亮的表格widget。我们还在着手做其它完全新鲜的东西,如声明式的基于XHTML的UI模板机制。我们尚未计划好一切,但我期望在随后一个或两个版本中能将其加进来。顺便提一下,我希望它的开发周期比GWT 1.5更短。
Johnson还希望能将GWT作为Google App Engine的一个开发环境,要是这样的话,那真是太酷了。
(文/Ryan Slobojan 译/张龙 出处/Infoq)
您可能对 [Java] 的这些文章也感兴趣: