原文见《程序员》杂志第十期,商业站点请勿转载
有些时候等待是一种幸福,就如对于Java 1.5(商业的版本号为5.0)和.NET 2.0(内部版本号为1.2)的守候。对于Java社区,1.5 RC1的等待恍如隔世,终于在所有人快失去耐性的时候给出了这个定心丸;对于.NET社区,则是一种欣喜,反过来也是一种担忧,毕竟相对稳定的.NET 1.1版本还没有Java社区中那样成熟的姿态,却要考虑是否迈进2.0的新世界。
不知道是不是商业宣传的错觉,很多人将这两个重量级产品做比较的时候更多的是着眼于Java语言和C#的语言的比较,从某种意义而言对于.NET是不够公平的,同样对于Java而言也不是公平的。
在讨论Java的时候我们很容易的将Java语言和Java平台混为一趟,和.NET平台比较的过程中也更多的是将Java平台和C#比较,或者Java语言和.NET平台比较,在我个人的意识中,这是不够公正的。
Java经过多年的发展,已经从单一的语言及其运行时环境扩展成一个完成的应用平台,并且在企业应用领域处于绝对的领先地位,J2EE已经成为事实上的大型企业应用的标准技术架构。而在移动开发领域,因为其跨平台的优势,在各种Java兼容设备中的开发也成为一个非常重要的生力军。
.NET从提出的开始就是立足平台,相对于Java提倡的“一次编写,到处运行”,.NET更加提倡“一个平台,多种语言”,因为平台的统一性,因此在各个语言的兼容性和混合开发方面做得比Java好,也因此有些MS的拥护者嘲笑Java是“一次编写,到处调试”。
纵观这两个平台的革新主要体现为如下两个方面:
Java:这是从产生到现在第一次真正意义的对于语言实现进行大刀阔斧的改造,一直以来,Sun公司将更多的精力放在类库的扩充和技术架构的规范定义上,比如JDBC的不断完善,JMS、JNDI、EJB等等非常重要的规范就是在这几年的发展过程中逐渐成熟起来的。俄而在语言方面,从1997年Java1.1推出之后Java Class文件就一直没有做过大的变动,在语言支持上也没有太多的变化,因此像《Thinking in Java》这样的“宝典”从第一次出版到现在也没有本质性的变化,更多的是作者对于一些观点的修正。而在类库方面,经过sun公司和开源社区的共同努力,已经让java变成了一个巨无霸的平台,除了JDK自身庞大的类库以外,SourceForge能够找到一些非常完善的应用框架,比如Hibernate、Ant、Spring就是其中的典范。而此次的更新则意味着在语言层次上Java将变得更加“职能”,更加适合实现面向业务的应用,而不再是一切需要依赖令人望而生畏的类库去实现也许不算复杂的应用。语言的“轻量化”的结果就是带来开发生产力的提高,同时依赖于Java世界目前拥有的强大资源,我想对于Java而言是一个新时代的开始,从1.5起,Java更加轻便,也不再阳春白雪高高在上,通过核心类数据共享,通过注解(Annotation)的支持,通过多线程的改进,Java也逐渐走入桌面应用市场。
.NET:有一点可以肯定,C#语言的革新绝对不是.NET 2.0新功能的全部,按照微软一贯的作风,从语言到类库再到开发工具的全线支持才是.NET 2.0的全部,从这个角度而言,前些日子公布的代号为“Whidbey”的Visual Studio 2005 Beta1才彰显微软的“狼子野心”,除了C#中泛型、匿名方法、迭代程序和局部类的引入,对于VB.NET也不例外,通过My命名空间极大的简化了对于系统资源的访问。一直备受非议的Managed C++也返璞归真,除了保留了传统C++的功能之外,对于托管应用程序的编写也终于可以使用令人赏心悦目的代码去完成,而不是C++程序员深恶痛绝的“__gc”关键字。而类库方面的改进才是真正让开发人员欣喜若狂,ASP.NET 2.0加入了门户开发的框架——WebPart的支持,也加入了针对用户个性化的支持,比如Skin、Password Recover等等。
有对手总是一件不算坏的事情,这个世界不需要“独孤求败”,商业规则也不允许“独孤求败”的出现,因为那样会打破竞争格局的平衡,而Java和.NET这两个平台的纷争才算刚刚开始,而较量的结果则是有利于整个软件世界。发展到现在,两个平台在技术架构的目标上已经趋近相同,如果说要比较出一个大概,那么我想在语言层次上因为C#或者VB.NET是后来者,就注定了比Java更加先进,在类库框架方面同样因为是迟到者,目前还无法在大型应用方面和Java抗衡,这两个相互较量的平台同样的比较在相互学习中携手前进,谁是受益者呢?我想还是广大的用户。
J2SE 5.0与.NET 2.0部分技术参照
Java
.NET
说明
泛型Generic
3.5
4.5
.NET中的泛型保持了非常好的效果,几乎能够完成所有事情,然而,J2SE 5.0却采用的是不完全的“擦拭法”泛型,很多功能不能完全实现。
元数据Metadata
4
4.5
Annotation以及Attribute的对比在前文中能够看出,.NET在这个方面仍然略占优势。
虚拟机VM
4.5
4
虚拟机方面,J2SE 5.0作了相当大的改进,将原来的虚拟机进行了大规模改进,这个部分Java略占上风。
垃圾收集GC
4
4
两个平台的垃圾收集算法上区别不大,效率也非常接近,只是.NET有Windows平台的一些支持,因此两方面有细微差别。
语法机制
4.5
4
语法机制上,已经没有太多比较的余地,不过Java在此次大规模版本升级上,还是对语法机制作了比较积极的修改。
多线程Treading
4.5
3.5
在J2SE 5.0中,在多线程方面又进一步做了很多基础性工作,尤其是在类库方面进行了很多基础性工作的提高,加上本身在企业级系统架构上的优势,在线程上有了比较大的优势。
类库
4
4.5
这次的版本升级中,.NET类库有了很大的提高,在很多方面,尤其是客户端类库方面比之Java又有了更大的进步。
可移植性和开放性
5
3
Java的可移植性和开放性一直就是非常优秀的。程序的开放性,系统移植的方便性等各个方面,Java都胜出.NET很远。因此,目前各个领域的开发中,如服务器端、嵌入式、
企业级系统架构
5
3.5
这个部分一直以来都是Java最强大的地方。企业级架构所关注的几个领域都是Java的优势所在,如何满足业务需求、尽量保持结构的简单清晰,生产率的要求和可测试性都是企业级开发关注的重点所在,Java在新版本中依然表现不俗。