Java源于1991年的一个机顶盒项目,并由Sun在1995年发布了1.0版本,到今天算下来,也要有20年的时间了。JDK1.3-->JDK1.4-->JDK5这两次版本升级,使得java语言得到了极大的完善,但此后的JDK6和尚未正式发布的JDK7,并未给人太多的惊喜,至少我是这种感觉。其实从最近几年JVM兼容语言的百花齐放就可以看出来端倪:JAVA在JVM平台上的地位,正在遭受日益严重的挑战。
JDK6到JDK7竟然有四年多的跨度,而且新加入的特性,也并不是那么激动人心(相对于社区的期望和动态语言的快速发展),闭包(Closure)本来是一个万众期待的特性,在经过激烈的争论之后还是被放弃了。
越来越多的人开始担忧JAVA的前途,我觉得,以目前的情况来看,JAVA在JVM上失去Number One的地位是迟早的事情,但我们不要忘了,这个有些老态龙钟的JAVA曾经的辉煌,以及它所背负的兼容性包袱。
java的每一次版本递进,都要考虑对以前版本的语言兼容性、平台兼容性和移植兼容性。
语言兼容性(language compability),要保证已有的词法、语法在新版本上含义不变;平台兼容性(platform compability),要保证新版本提供的API(比如java.util/java.io)与已有版本保持一致,原有程序不做改动,可以在新平台上运行,且行为一致;移植兼容性(migration compability),就是要求原有的程序可以逐步迁移到新的平台,而不是要改相关模块都必须改。以泛型为例,如果有两个不支持泛型的模块,用collection进数据交互,当其中一个模块升级到支持泛型后,是不会对另外一个模块产生影响的。
其实不仅仅是java,任何一个软件系统,随着塞入的功能越来越多,都会逐渐变得臃肿不堪,因为没有哪个架构师有长线预测未来的能力。C的经典,是因为其语言特性的简单和时间稳定性,如果要把泛型、闭包、垃圾回收都加入到C,那么C就不再是C,而是C#。
不过,对于开发人员来讲,我觉得没有必要悲观,也没有必要怀疑java的未来,或者准确的说,不要怀疑JVM的未来,java正在从一种语言(language),变成一个平台(platform)。Java7的虚拟机对多种动态程序语言增加了支持,也充分说明了sun(或者说oracle)的意图:java不是唯一,java和其它jvm兼容的语言也不是对立的,平台掌握在我手里,那么当然是语言越多越好。
但开发人员也应该做出适当的调整,那就是应该分出一部分精力关注一下JVM的规范和其它语言的特性,既然有更多选择,那么也应该充分发挥各种语言的强项,拿合适的技术做合适的事情。
也许再过若干年,我们会更关注JVM的版本而不是java的版本,java语言,也许就会变成一个参考实现(reference implementation),就像glassfish之于J2EE;或者,我们可以将java/groovy/scala各种语言真正无缝集成在一个源文件中(就像jsp和html一样)也为未可知。
未来总是美好的,您觉得呢?
一家之言,欢迎拍砖 !
以下信息来自Wiki,是能够运行在JVM上的各种语言:
JVM implementations of existing languages
Language ![]() | Java implementations ![]() |
---|---|
Ada | JGNAT |
AWK | Jawk[2] |
C | C to Java Virtual Machine compilers[3] |
Common Lisp | Armed Bear Common Lisp[4] CLforJava Jatha (Common LISP) |
Forth | myForth[5] |
Haskell | Jaskell[6] |
JavaScript | Rhino |
LOGO | jLogo[7] XLogo[8] |
Lua | Kahlua[9] |
Objective Caml (OCaml) | OCaml-Java[10] |
Pascal | Component Pascal |
PHP | IBM WebSphere sMash PHP (P8)[11] Caucho Quercus[12] |
Python | Jython |
Rexx | IBM NetRexx |
Ruby | JRuby |
Scheme | Bigloo Kawa SISC JScheme |
Tcl | Java Tcl |
New JVM languages
- AspectJ, an aspect-oriented extension for the Java programming language.
- BeanShell, a scripting language whose syntax is close to Java.
- Duby[13], a customizable programming language featuring type inference and a heavily Ruby-inspired syntax.
- The E programming language has an implementation on the JVM.
- Fan[14], a language built from the ground-up to be portable across the JVM and the .NET CLR.
- Fortress, a language designed by Sun as a successor to Fortran.
- Frink, a language that tracks units of measure through calculations.
- Hecl
- Ioke, a prototype-based language somewhat reminiscent of Io, with similarities to Ruby, Lisp and Smalltalk.
- Join Java, a extends Java with the Join Semantics of the Join Calculus.
- Jelly (Programming Language)
- Joy
- Judoscript.
- N.A.M.E. Basic.
- NetLogo, a multi-agent programming language.
- Nice.
- Noop, a language built with testability as a major focus.
- ObjectScript
- Pizza, a superset of Java with function pointers and algebraic data types.
- Pnuts.
- CAL, a Haskell-inspired functional programming language.
- Sleep, a procedural scripting language inspired by Perl and Objective-C.
- The V programming language[15] has an implementation on the JVM.