技术开发 频道

Java死气沉沉,Python生机不断

  【IT168 资讯】

  Python的Version 3.0已经发布。Notably Python又做了一些Java一直很反对的事情:打破了与Python 2.x的向后兼容(Backwards compatibility),Notable修改了一个更加理智的基于Unicode的字符串处理模型。Pythonista的同仁告诉我很多其他不合理的东西如print operator也已经清除。尽管如此,我还是不建议所有的Python开发者立马升级(version 2.x仍将在接下来的几年中得到支持。)version 3.0显然是一个比version 2.x更加简单、更加优秀和合理的编程语言,这将提高开发者的效率并让他们的工作更加富有乐趣。显然,Python是一个充满生机的、不断进步的语言。

  相比较而言,Java则死气沉沉。像Python 2.x 一样,它也包含许多不合理和错误设计的地方(或许Java更多),但Sun一直拼死反对做任何事情来修补这些众所周知的问题。相反,在过去的12年里Sun不但不给这个脏兮兮的家伙洗澡刷牙,却对它喷香水、抹唇膏。(意指Sun不但不修补这些问题,还纵之任之)

  对version 1.4的Java而言,向后兼容(Backwards compatibility)是一个利于维护很有用的功能,但在Java 5 中,当泛化(generics)和自动装箱机制(Autoboxing)改变了语言的核心时,向后兼容(Backwards compatibility)彻底地出现问题。自动装箱机制(Autoboxing)是一个错误的选择,它试图掩盖住Java早期对原始(primitives)和对象(objects)采用隔离的类系统(type system)的决定。那是Java的Plessy v. Ferguson决定,原始(primitives)和对象(objects)是独立但等同的。一个独立的原始类型系统(primitive type system)在1995年的时候很有意义,那时CPU缓慢而且虚拟机技术并不先进。现在原始类型除了将编程语言更加复杂化之外,别无他处。

  泛化(generics)是另一个例子:在这儿向后兼容(Backwards compatibility)出了个好主意,最后却变成恐怖的东西。多线程设计(Multiple design)能够使代码运行在老的VM上,也即著名的类型擦除(type erasure)。最后,不管怎样,二进制兼容破碎。然而,如果他们不担心落后的二进制兼容而重新设计,没有人考虑泛化(generics)多么简单有力。

  闭包(Closures)如果现在加入,只会将形式更加恶化。当且仅当在Java同时移除内部类(inner classes)并做出所有的语法改变来支持真正的闭包(Closures)时,闭包(Closures)对语言而言才是好的特性。同样的,新的特性不能够添加到现有的羸弱基础之上,除非我们回到语言设计的初期从头设计。

  我无法想到还有像Java一样老的主流语言并试图维护version 1.0的兼容性,实际上,我能想到的有C#,但C#年龄只有Java的一半。除非我们做出艰难的抉择,并像Python一样摒弃那些传统,否则Java将注定将像C++和Cobol一样:留着长长的白胡子的开发者工具,自编程语言之初就存在并其后不断发展添加,花大量时间用在维护十年前的代码上。与此同时,新一代的开发者将因为更加现代的语言如Python而抛弃Java,就如同当年我们为了Java抛弃C++一样。

  承认存在问题只是解决问题的第一步,但Java甚至都没有承认他有问题。这个语言很大,很复杂•-。在单核奔腾2、100Mhz处理器和32位存储空间实用的东西,现在已经远远落伍。向后兼容(Backwards compatibility)已经成为缠绕在Java脚上的沉重枷锁。除非摘掉这个枷锁、更正以前的错误,Java和我们才能迈步向前。

  很难相信,五年前我就发出了这样的声音,然而至今仍然没有任何改变,而且事实反而更加糟糕。看看C++当年被Java替代的历史,也许Java也败局已定,是时候有新的语言来取代这个语言了?

0
相关文章