2002年01月10日
这个星期,微软终于发布了.Net的面向对象的旗舰语言C#
。它是由Anders Hejlsberg也就是Turbo Pascal的设计者为Web 服务的开发量身定做的。微软一年半多的时间以来一直把它说成是最美好的东西,而Java以及开放源代码团体则嘲笑它不过是一个恶人嘴里吐出来的另一种语言罢了。
换句话说,对C#的批评意见随处可见。但是,在通过几次电话采访以后,我获得了Derek Ruths的帮助,他是Advanced Reality项目的首席科学家和参与者,这个项目旨在使任何应用程序都能够相互合作。Ruths用Java开发了他的Resence AR程序,但是他也在积极的探索C#语言。他与Gartnet分析师David Smith的观点成为了这篇关于C#的神话与现实的文章的要点。
C#是“类Java的。”这句话在一方面是对的,但是在其它方面看来却不对。微软否认C#是对Java作出的一种“反应”,并声称它是C++的直接的继承物--虽然Java自身也可以这么认为。据报道,将Java应用程序移植到C++上来相对容易一些,而且它所使用的API函数和类有相同的名字。与Java一样,C#也有垃圾内存回收的功能,也就是说无用的内存在应用程序运行的过程中被自动的回收。但是这两种语言之间存在一个巨大的差别:Java是平台无关的而C#在很大程度上只适合Windows操作系统。
Java仍然占有很大的优势。Java产生的原因部分的是作为C++的改进,C++是一种很难掌握但是非常强大的语言。但是Java的出现已经有一阵子了,而C#则刚刚开始。“所以在Java中存在一些早期设计遗留下来的难以逾越的障碍,”Ruths说。而C#则在语法上增加了一些“甜头,”(Ruths语)--它的关键字和概念能够让开发过程稍微容易一些。另一方面,他认为C#的窗口模型与Java Swing相比显得弱一些。总的调查显示,在综合了两者的强项和弱项以后,C#和Java在它们的功能和易用性上是有得一比的。
C#最终会使Java程序员投降。Gartner的观点与上面的有所不同。Java虽然还有很大的势力。很少有人会怀疑C++和Visual Basic的程序员会很快转移到C#上来--但是对于Java程序员来说,如果他们想转移阵地的话,他们必须投身到由所有微软平台构成的自我封闭的世界中来--而这些平台对于企业后端应用的渗透还很不够。Java程序员为什么要抛弃这么多的东西呢?当然,.Net计划中很大的一个动机就是在企业后端应用方面占领一席之地,但是这个过程需要时间。
如果你想开发.Net Web 服务,你就要学习C#。也许这是个好主意。微软不断重复的句子是“C#是C/C++家族中第一个面向组件的语言。”Ruths同意这个观点“总的说来,它要更容易一些。”但是.Net中的通用语言运行库使得你能够使用任何其它一种不同的语言来编写.Net组件。
另一个有趣的的观点:Ruths认为C#可能会重走Java小应用程序走过的可下载的,客户端运行的应用程序的道路(但不会在移动计算领域出现,这里Java仍然一统天下)。COM组件总是面向桌面的,所以这种想法也是合理的。有一点是肯定的:C#会是Bill Gates称为微软最重要的产品的Visual Studio.Net的关键部分。你将会在未来的几个月内学习许多关于C#的知识。