【51CTO经典译文】大卫·梅吉森(Dave Megginson)***写了一篇文章:Java已死。(许多使用Java的XML程序员应该很熟悉,他推动了SAX API的开发)。
作为一种编程语言(而不是平台),Java与众不同,这应归因于Sun公司拒绝通过声誉良好的独立标准组织将其标准化(虽然做了很多努力,一次试图让Java通过ECMA,一次是ISO,但Sun公司都最终退出,并推出让人非常不满的JCP体系,既Java Community Process)。Sun缺少对Java作出巨大改动的能力和意愿(某些方式与其意愿不符),Java不得不面对两个主要的对手(微软的J++以及后来的C#,还有IBM的SWT),这两个对于主要的组件(图形库)提出了异议。Java成于中间件,但却失败于未能利用桌面浏览器的崛起之势:他们的HTML解析器在上世纪九十年代非常出色,但被有意地忽视,而至于无用之地。对此,很难不将其视为Sun公司有意为之:将浏览器市场留给它的对手和合作者。我的确曾非常喜欢Java,在某种意义上,甚至拿我的公司作为赌注压在Java上:今天我绝不会再这样做。
51CTO推荐专题:走向混合编程时代
对于桌面领域(我明白所有人都知道,在万维网时代和即将来临的iPad+Android时代,这一领域已是万劫不复地死去),同类语言有什么替代者?我把时间花在什么样的XML处理方式上?我一直留意较多的是Scala:它集成到JVM中,具有类似的基于C语言的语法,并且能够将类Java程序升级为拥有更多函数的DSL程序。然而,我还有三点疑虑。***,存在很多种函数式编程,它们使用了XSLT,对于XML处理,XSLT比Scala具有更好的优化性。第二,使用JVM让Scala处于不利地位,可能引起Oracle的诉讼(或许这种情况只是杞人忧天?)。第三,许多Scala的资料都写得比较学术化,或者是由偏门语言的拥护者编写。(不管是谁,在讨论某项技术的优势时,如果使用了monad这种专业术语,自我看来,其流行程度就会直线跳水。)
51CTO推荐专题:Scala编程语言
另一个竞争者是Vala,不过没有上述三种问题。某种程度上,这是一种真正的回归,回到上世纪八十年代:基于C的对象语言,但又被赋予了C++的强大和Java的成功。下面是Vala网站上的宣传介绍:
Vala是一种新的编程语言,其目标是为GNOME开发者提供现代化的编程语言功能,同时没有额外的运行时要求,并且相对于C语言编写的应用程序和库,无需使用不同的ABI。
Vala是基于GNOME的GObject系统,提供了那种你期望的类功能。与Scala一样,在语言级别上,它具有与Java Beans的get*()和set*()等同的属性,但是,对于属性更改通知和监听器(listener),它也能够提供了语言级别上的支持。它不具备很强的XML处理能力,只是一个迷你型的解析器,不过看起来它的确具有很好的Unicode功能(字符串为UTF-8,string.getch()可返回16位的unichar字符。)在功能级别上,Vala与Java***的不同之处应该是对象回收(de-allocation)的引用计数系统(reference-counting),相对于Java的GC,这一系统能够提供更多确定的实时行为,不过也为某些编程错误打开了一扇窗户。在这个时代,Vala的另一个古怪之处在于,对于阵列访问不进行边界检查,所以它比Java对规则的要求更为严格(不过可以推测,比C语言要宽松很多)。
我很期待有人对Vala产生兴趣,比如有人在考虑编写新的C或C++应用程序,或者使用C、C++、C#或者不断抱怨不满的Java程序员,想要拜托大企业的控制,同时在其背后有一个经过证实的(保持操作系统中立?)强大平台,这样的人能够去使用Vala。我想,与Scala一样,在大型项目上使用之前,你当然想要检查一下是否具有适当的IDE支持。
在服务器端,Google公司推出的Go编程语言是很有前途的:它更少面向对象,但同时具有C语言领域内的效率。他们的宣传介绍如下:
快速……并行……安全……有趣……开源
Go语言为功能强大的gorountines提供另一个关键字go,可封装各种fibre/线程/进程/多核类型的并行计算。
我很想看到Go和Vala联姻生子,带来一种更可爱的语言。我认为Vala和Scala还没有很好地发挥多核CPU的优势。
原文名称:Vale Java? Scala Vala palava and Go too
原文地址:http://broadcast.oreilly.com/2010/08/vale-java-scala-vala-palava.html
原文作者:Rick Jelliffe
【51CTO译稿,非经授权谢绝转载,合作媒体转载请注明原文出处、作者及51CTO译稿和译者!】
【编辑推荐】