翻译整理 毛竹 南海
C#介绍
最近微软宣布了它的最新编程语言C#,这是一种面向对象的编程语言,它将作为Visual Studio中的一部分推出。C#(发音为“C-Sharp”)既保持了C++中熟悉的语法,并且还包含了大量的高效代码和面向对象特性。据微软产品经理透露,C#语言将在保持C/C++灵活性的基础上为程序员带来更高效的RAD开发方式。它不仅能用于WEB服务程序的开发,并且还能开发强大的系统级程序。
微软还没有正式宣布这一新语言技术,该技术将以测试形式出现在微软打算在7月中旬在专业开发会议上分发的Visual Studio 7中。Visual Studio 7将于明年某个时候正式发售。
Layman介绍说C#包含使XML编程更为轻松的技术。微软将使它的下一代工具软件、操作系统和应用支持XML技术。
新的编程语言还将包含虚拟机设备。微软官员已经公开表示C#技术和该公司去年开发的 Java竞争技术Cool没有关联。微软官员拒绝回答是否计划在Visual Studio 7中提供微软设计的视窗版Java Visual J++的某个版本。
C#的特性
现在,微软仍在一边继续反驳其竞争对手Sun控告它改变了Java语言的诉讼,一边在对美国反垄断指控顽抗到底,但与此同时,微软的天才程序员们也在技术上进行着一场补救的措施。那就是他们已经开发出来的C#语言,这是一种非常类似于Java的语言,微软深知即便是微软阵营中也有着相当一部分人喜欢Java语言,所以这次干脆就用C#来满足他们的愿望,这是一种非常完美的语言,适用于各种操作系统,并且与Windows紧密地结合在一起。
微软表示这种新的程序设计语言并不针对Java,但它将是C++的革新。而这正是Java所追求的两个主要目标之一(另一目标当然就是可移植性)。微软一直梦想着能开发出能与Java在Windows NT系统上抗衡的语言。C#的自动内存管理以及和Java一样都使用的C语言语法,似乎让这个理想成为现实。
微软称C#是由C和C++派生而来的一种“简单、流行、面向对象、类型安全”的程序设计语言,C#意在综合Visual Basic的高效率和C++的强大功能。但这种说法是否准确呢?由于C#的结构很像Visual Basic的ActiveX,它显然是冲着RAD开发者来的。但同时,“C#提供了C++的强大功能”这种说法也稍嫌夸张,将来很可能变成空头支票。
对某一对象接口的更新,微软称之为“继承”,当然“继承”是就“对象”而言的。但是,虽然“对象”这个词我们经常碰到,却很少有人真正理解了它的含义。微软的用户,甚至它自己的员工都经常把“对象”和“接口”弄混。所以微软干脆就用接口来定义各种对象,结果导致了“面向对象编程”(OOP)被微软弄得乱七八糟。现在,微软又在大踏步地前进了(虽然它内心还是很小心),它把它建立在接口基础上的“对象”集成到了开发工具里。不过它走得实在过了头,它甚至把对另一对象接口的更新称之为“继承”。
这个“继承”给程序员们带来的好处就是语言无关——只要接口维持其兼容性,用Visual Basic写成的对象在C#和C++中也可以良好地运行。但此特性是以真正的OOP技术和平台的可移植性为代价的。每个对象都被编译和注册到Windows子系统,只要你能访问这个子系统,你就能访问这个对象。来吧!欢迎来到.NET和NGWS的世界!——Windows平台从来没有完完全全地让人产生这样完整的依赖性。他们的动机当然要遭到全世界对微软有偏见的人的怀疑,当然,完全依靠此技术的C#也不例外。
事实上,C#将是完全依靠Windows的最完美的产物。那些困绕Java SDK, MFC 和SET的数据库已成为过去。你想放入C#的任何东西(无论何种语言),只要在Windows的.NET子系统下建立和包装的都可以使用Windows的运行库。
用MSIL进入.NET
当人们访问Usenet或一些新闻组时,会有一些诸如新语言和平台有效性之类的问题。什么时间和努力能解决这些问题呢?当然,如没有牢固的事实和有说服力的证据,即使是最有帮助的响应者,权威机构也会对他的断言持保留意见。我没有参加今年的专业开发者会议(PDC),因此我的发现都是基于那些与会者的反馈。
人们对微软过去几周的大肆宣传,最基本的错误理解就是C#只是Visual C++的改进版本。完全不是这么回事。C#和Java没有直接联系。它的特征设定是从Java获得的灵感。它的语法同Java一样,源自C和C++,但它的执行是完全新的,只依靠.NET结构。
C#也并非字节码(bytecode)。微软一位员工罗伯特.舒密特详细描述道:“C#编译程序产生的是‘微软中间语言’(MSIL)……但虚拟机或其他类似的技术则不能用于解释这种中间语言(IL)。相反地,每当应用程序载入或JIT编译程序需要编译它时,IL就会被转换成本地代码。一旦这种转换完成,可以执行的代码实际上是本地代码。”实质上,虽然这种方案有点像Java程序通过一个JIL编译程序,但这里最终的JIT编译是100%的本地代码,而Java的JIT产生的结果是不同的。
C#的弱点
这个方案也暴露了微软对C#和.NET介绍中的一些有趣的漏洞。MSIL是.NET提供的一个新特性,允许很流行的程序设计语言编译到一个单独的公用语言。(.NET支持的语言种类是相当惊人的)。这些语言都要服从一种叫“通用语言规范(CLS)”的构架。微软称之为“CLS兼容语言和类库之间可互操作的通用语言”。
编译所有的语言到一个单一的公用语言上,能让“继承”通过多重语言真正执行。这轻而易举的扫除了C#可能遇到的错误概念。.NET组件使用COM的IDispatch,它只允许接口执行。它比先前C#被评定为一种OOP语言的看法容易接受得多。它在程序设计上或许像Java一样是面向对象的。
但不幸的是CLS这种包括MSIL的共享语言基础,只让RAD开发者受益,而损害了硬件的核心开发者,有人认为创造一种新程序设计语言的目的就是有能力充分运用它和服务于可微调的执行能力,这一点在CLS世界里是做不到的。老实说,加速充分利用从来不是许多语言的唯一目标。许多语言的唯一目标(最瞩目的是像Visual Basic和Java的RAD语言)是加速和美化开发和展开能力,而不仅仅是运行时刻的速度。
舒密特文章中所提到的确实包含了相关和值得注意的评论:你可以用C++指定.NET,并在你的代码中运用所有C++特性。同时,因为.NET在运行时刻不能检验C++代码是否安全,此语言并不遵从CLS规范,里面所书写的程序也受到限制。作为应对,微软往Visual C++里添加非标准管理的扩展。用这些扩展写的代码能符合CLS规范。
C#将把微软领向何方就一目了然了。因为所有项目编写会只依靠MSIL和CLS JIT编译程序。这样C#或任何MSIL前端语言比Java任何时候都快。但很不幸,程序设计和编译程序级的优化不能在非微软的平台上充分利用,想在非Windows平台上展开.NET,再充分运用它们也是不现实的。
JAVA是C#的竞争对手
尽管.NET是微软一手缔造的,它并不是只能在Windows上使用。微软准备尽力为那些COM对象提供传统帮助(所有的OLE, ActiveX等等在下一代Viual Studio推出后,都将成为一个legacy平台)。但.NET不会围绕COM建造。新平台无疑将补充COM,并与它几乎天衣无缝地配合,但一点也不会依靠COM。这表明这种结构本身能够Macintosh, UNIX. BeOX展开。这样命名,是因为除了CLS构架是平台独立的,C#将用到的和所有遵从CLS的数据库也是平台独立的。也就是说,它们都是遵从CLS的,如果一个本机MSIL编译程序在平台上有效,那么它们能在运行时刻为任何结构进行编译。微软也积极争取被ECMA标准接纳,他们先前的Javascript已被接纳。 当Visual Studio. NET推出时,开发团体肯定会有不同的反应。"微软又开发了一个新平台",这已吓倒那些本来对微软平台统治忧心忡忡的人了。然而更重要的是C#或.NET战略不会对原始C++构成太大威胁,那么有理由推论C#和.NET将是Java的有力竞争者。考虑相反方面:Java VM靠翻译字节码来运行应用程序。CLS在运行时刻本机编译。Java平台只支持Java语言。.NET只支持MSIL,但一些无限制的高级语言如C#,Visual Basic,甚至Eiffel和COBOL都能启动MSIL。Java运用执行转接提供真正的OOP技术。MSIL,C#也是如此。在Java平台,简单地移动平级文件,项目就可以展开为产品目录。据说,.NET平台的项目也可轻松展开而不像以registry-happy Com为基础的项目。或许Java平台真正的优势只在于政治上的正确性--它不是微软搞出来的,且目前有成千上万的执着的宗教追随者。
作者的看法
具有讽刺意味的是,虽然我很了解Java和C#,我仍被冠以高级Visual Basic程序设计师的称号。人们会认为我这样一个VB设计师将是反对微软的偏执狂。但我也得面对现实。老实说:VB是一个RAD开发工具。别只顾着精美,别记着真正的对象。迅速得到结果才是重中之重。在商业世界里,纯粹的技术和结果不总是能相吻合的,短期结果往往胜过长期生产力。这是不幸的,但在许多公司中,这却是事实。这些公司就是C#的主要用户。我会使用C#吗?当然会用!我现在使用Visual Basic,但转入C#有何不好?我更欣赏Java和OOP语言的精美,但因为我进行的所有项目中,短期成果一直胜过长期成果,我已没有时间去考虑替换Windows平台。但如从纯技术和信仰角度来说,Java和C++的程序设计师就有足够理由关注C#,这是微软维持垄断的又一招。
最后,C#是好还是不好?那么,因为这里的“继承”指对接口界面的再执行,所以,它不是真正的OOP。如果你是微软,亦或如果你依靠微软技术而不准备切换平台,那C#是很棒的,并将为VB程序设计师们搬运Java和C++上的技巧提供很好的基础(因为语法是共享的)。但因为微软将全力推出C#,所以,Java和C++的拥护者们肯定会设计出新的语言,予以还击。同时,C#不一定可转移到其他平台,也不能真正体现OOP的价值,甚至对OOP的初学者
……