Scala 2.8.0已在不久前发布。Scala 2.8.0中包含了很多新特性,像重新设计了集合库、翻新了REPL、改进了相等性比较等,备受业界关注。国内新出版的《Scala程序设计》(人民邮电出版社图灵公司)一书也迅速登上网上书店销售排行榜。与此形成鲜明对比的是Java的驻足不前,自从2006年12月发布了Java 6后,Java 7的发布却一再延期。Groovy创始人James Strachan曾发博文称Java面临终结,Scala将取而代之,业界名家对此众说纷纭。
到底Scala有什么优越之处,在国内现状如何,近日我们有幸联系到了国内Scala专家邓草原先生,让我们听听他对Scala的深入分析。
记者:您觉得相对于之前的版本,Scala 2.8.0最大的改进之处在哪?
邓草原:在语言特性方面,主要是@specialied对于原生类型的编译期处理和全新设计的collection包。当然,最重要的是Martin下决心在Scala的应用迅速扩散之前将类库的格式作了修改以容纳一些新的语言特性,这个修改与以前的Scala版本是不兼容的。
在编译器方面,主要是针对IDE的支持。现在Scala有了一个可以为各种IDE提供统一查询接口的交互编译器,大大方便了IDE的开发和合作。
记者:Scala版本不断推陈出新,自我完善,而Java 7的发布一再延期。有网友评论说:Scala得到了Java领域多数人的认可,前途不可限量。将来很可能成为Java平台第一编程语言(Java作为“编程语言”的身份将弱化,但作为“平台”的身份将进一步稳固并延续)。您对这一观点有什么看法呢?
邓草原:我赞同Scala的前途不可限量的说法,但是否能成为Java平台的第一编程语言还有待工业界的支持。更准确地说,JVM作为优秀的虚拟机平台前景继续看好;而Java语言本身由于各种制约,比如考虑与旧版本的兼容,制订语言本身特性的机制与制订各种API规范的机制混在一起等因素,导致其演变有些滞后于近年编程语言的需求和发展趋势;Scala确实是Java的非常理想的继任者。我提“继任者”,并不是说Scala将完全取代Java,而是指,Scala修正和超越了Java语言,可以在各方面,包括性能、语言的简洁性、类型安全、并行并发、与现有classes或jar包的互操作性等方面全面替代Java,而且至少现在是唯一的全面的替代者。
记者:Scala和其他JVM上的语言如Groovy、JRuby相比,各有哪些优势和劣势?
邓草原:主要优势是静态类型检查和与现有classes或jar包的双向互操作性。前者对程序的性能和类型安全非常重要,是企业级应用非常关心的要点,后者则将对Scala在各种规模的项目中渐进地采用起到关键作用。至于劣势,我认为没有。
记者:就您所知,Scala目前在国内的实际应用情况如何?
邓草原:我现在领导的商业项目和从事的开源项目规模还是相当大的,而且都是金融领域的应用。但应该说,与国外相比,国内的实际应用规模还是很小,了解和使用的开发人员也很少、社区交流虽然有了起步但还不够活跃。希望这种状况能随着Scala 2.8.0的推出、中文资料的增加、IDE的完善得到改变。
记者: 对广大技术人员在实际项目中应用Scala,您有什么经验和建议?需要面临的问题有哪些,怎样解决?
邓草原:恐怕经验和建议都是一条:用它。面临的问题主要还是文挡、资料不够,尤其是Scala社区对其使用过程中可能带来的新的设计模式和最佳实践之类的总结才刚刚开始。对于决心将Scala付诸应用的开发团队来说,需要有善于与国外的Scala社区交流的技术骨干来解决疑难杂症。从我的经验看,因为可以与Java互操作,如果真遇到特别头疼的问题,你总是可以通过混合部分Java代码绕过去。
记者:能介绍一下您自己目前从事的与Scala方面的项目情况吗,比如说NetBeans的Scala插件,AIOTrade。
邓草原:我现在几乎百分之百的时间都是在用Scala。对NetBeans的Scala插件而言,刚刚发布了与Scala 2.8.0正式版融合的新插件,目前我的团队都在使用它。与其它几个IDE(Eclipse和IntellJ等)上的Scala插件都有全职人员的参加不同。NetBeans的Scala插件目前只有我一个人在业余时间开发,由于我经常需要同时进行好几个项目,因此,我为NetBeans写Scala插件有点周期性,就是说,一旦有一段相对不那么紧张的时间,我就会根据过去一段时间使用这个插件的经验进行一次大修大补。好在这个插件从一开始的设计还可以,每次改完都可以在功能和性能提升的同时,还能较长时间地兼容Scala的后续进展,不需要怎么修补。像最新的这个版本,整个代码在去年10月份就成型了,至今还能适应Scala的快速变化。
还有就是去年,Martin希望我直接参与Scala代码树的修改,并给了我代码提交权,这样我直接改掉了若干与增量编译和编译中产生的元信息相关的缺陷。希望今后我有更多的时间参与Scala的代码演进。
至于AIOTrade,从去年年末开始已经完全用Scala改写,截至目前,这个项目的Scala代码已经超过了4万行,涉及到O-R Mapping、消息机制、Swing界面、服务等各个方面,其中大量应用了Actor模型来实现并行运算。Scala-2.8.0中新增的更轻量的Reactor也被我用来替换了几乎所有的Event/Listener代码。经过此次用Scala重新实现AIOTrade,我相信我终于找到了能较完美地统一函数和面向对象编程;统一本地/远程的事件、消息机制;统一并行与分布机制的语言,这就是Scala。