延续还是创新——记微软新型程序设计语言Microsoft C# 小蕤 佳杉 2000年 第27期   美国微软公司6月26日公布了新型的程序设计语言“Microsoft C#”的概况。C#以C和C++为基础,是一种面向对象程序设计语言。该语言适用于微软公开的基于“.NET”平台的XML基础应用开发业务。提供的框架允许C#组件成为Web服务,这些服务可以通过Internet,从运行在任意平台上的任意应用中调用,微软宣称C#提高了程序开发进度而又消除了可能导致增加开发费用的程序设计错误,它带给C和C++程序员更快的开发速度而又保持了这些开发人员所期望的功能和灵活性。看来微软又向全世界的程序开发者作出了一个非常大的承诺。   微软声称:C#将使C++重新焕发光彩,对C++程序员来说这是一个他们时刻渴望的真正的奇迹,这是一个了不起的计算机开发语言。现在就让我们从各个角度来了解一下C#到底是怎样一种“了不起的”计算机语言。 #1 期待革新   在过去的二十年中,C和C++是开发商用软件时使用最广泛的语言。虽然二者都给程序员提供了大量的控制机制,但与这种灵活性并行的却是要付出程序开发进度的代价。与其他语言相比,用C或C++开发相同的应用程序需要更长的周期。出于对灵活性的需要以及这两种语言开发周期较长的原因,很多C和C++程序员一直在寻求一种可以更好平衡功能和开发进度的语言。   目前,有很多编程语言通过牺牲C和C++程序员所需的灵活性来提高其程序开发进度。这样的方法给开发者带来了太多限制(比如省略用于底层代码控制的机制),而且提供的是最不通用的命名方式,它们很难与先前存在的系统进行互操作,而且通常不能很好地适应目前的Web程序设计。   对C和C++程序员而言,最理想的解决方案就是在能够访问所有底层平台功能性的基础上有一个高效的开发速度。他们需要一个与新兴Web标准完全同步的开发环境,而这个环境可以很容易地综合现存的应用。此外,C和C++开发者还希望在需要的时候能够得到在底层编写代码的能力。 #1 C# 带来的希望   微软的C#就是针对这个问题而出台的。使用这种语言,程序员可以很快为微软新的.NET平台建立适用范围广泛的应用程序。(注:.NET平台提供了完全开发计算和通信的工具以及相应的服务)。而且正是由于C#极好的面向对象设计,它对构建许多组件(从高层商用软件到系统级应用程序)是一个很好的选择。如果使用简单的C#来构造这些组件,它们很容易被转换成Web服务,比如可以通过Internet,从运行在任意操作系统上的任意语言中调用,这种前景听起来是多么地诱人!最重要的是,C#带给程序员高效率的开发速度而没有牺牲作为C和C++特点的功能和控制性。正是由于继承了这些特性,C#具有对C和C++高度的保真性。熟悉这些语言的开发人员可以很快适应C#。   新兴的网络经济正推动商业整体运作较以往更快的速度对竞争对手的威胁作出反应。这就要求开发人员缩短开发周期并快速地提供某个程序更多的增强修订版,而不仅仅是一个不变的版本。C#设计时考虑了这些因素。它有助于开发人员用更少的代码实现更多的功能,并因此减少了出错的几率。   具体来说,微软公司隆重推出的C#有如下特点: #1  1.包含新兴的Web程序设计标准   用于开发应用程序的新模型意味着越来越多的方法需要使用新兴的Web标准,比如HTML,XML以及SOAP。现有的开发工具是先于Internet,或者是在我们目前所知的Web的雏形时期出现的。因此,它们通常不能很好地适应新的Web技术。   C#程序员可以为在MS.NET平台上开发应用程序建立一个扩展的框架。C#对转换任意组件为Web服务包含一个内置的支持,这些服务可以通过Internet从运行在任意平台的任意应用中调用。 #1  2.消除了代价高昂的编程错误   即便是资深的程序员也会犯最简单的错误——比如忘记初始化变量,而通常这些简单的错误会导致无法预料的问题,这些问题在很长一段时期内可能都不会被发现。一旦某个程序作为产品被广为使用,就是纠正最简单的编程错误代价也是很高的。C#现代化的设计消除了最常见的C++程序设计错误。最终的结果使程序员编写和解决复杂商业问题的程序更容易,而维护的代价也降至最低。 #1  3.通过内置的版本化支持减少了开发代价   更新软件组件是个不很正确的选择。修订代码可能也在无意中改变了现有程序的语义。为了帮助开发者解决这个问题,C#语言中包含版本化支持。比如,方法重载必须明确;不像Java和C++,在C#必须注意重载。一个相关的特征是对接口和接口继承的支持。   总之,这些特征使得开发某个项目后续版本的进程更容易并因此减少了开发后续版本的总体代价。 #1  4.更好地反映商业逻辑过程   因为企业作了大量的努力来制定商业计划,在抽象的商业过程和实际的软件实现之间必须有一个紧密的联系。但是大多数语言工具没有联系商业逻辑和代码的简单方法。比如,现在开发人员可能使用代码注释来标记哪些类组成了一个特定的抽象商业对象。   C#允许类型化,扩展的元数据,它可以应用于任何对象。一个项目开发者可以定义指定域的属性,并把它们应用到任意语言元素——类、接口等等。之后,开发人员可以用程序检查每个元素的属性。例如,这可以使编写一个自动的工具更容易,这个工具将保证每个类或接口作为某个特定抽象商业对象的一部分而被正确定义,或者使生成基于某个项目指定域属性的报告更简单。这种定制元数据和程序代码之间的紧密结合有利于加强预期程序行为和实际操作之间的联系。 #1  5.扩展的互操作性   安全的环境对大多数公司应用是很适宜的。不过实际经验表明一些应用程序还是需要内部代码的,或者是出于性能原因,或者是为了与现有的应用程序接口进行互操作。这种状况可能迫使开发者使用C++,即便他们想使用一个更高生产率的开发环境。   C#通过以下方法解决这些问题:   包含对组件对象模型和基于Windows APIs的内部支持,使用C#允许有限使用内部指针,每个对象都是一个自动的COM对象。开发人员再也不必明确实现Iunknown和其他COM接口。相反,这些功能是内置的。同理,C#程序可以内部使用现存的COM对象,而不管用何种语言来设计。   对那些需要C#的开发人员而言,它包含一个特殊的特征,即允许一个程序由任何本地API来调用。在一个特殊标记过的代码块内部,允许开发者使用指针和传统的C/C++特征,比如手工管理的内存或指针结构。相对其他环境而言,这是一个很大的优势。它意味着C#程序员可以利用他们已有的C和C++基础,而不必抛弃它。 #1 争论不休   C#公布后,有很多相关的争论,最尖锐的莫过于与Sun公司的争端。虽然微软公司非常严肃地声称,C#并不是微软针对Sun公司的Java语言而推出的产品,但它的确引用了Java的某些思想,而且如果要运行C#应用程序,必须有一个虚拟机环境。这样的应用软件的确是Java模式的。微软刚一发布C#,Sun的工程师就开始研究它的技术信息,据他们说C#不可能是对付Java的杀手。由于微软提供的文档不完整,他们不能准确地指出C#能做些什么,但他们相信C#只是依赖于Windows平台的C或C++的下一个版本。而且Sun公司大名鼎鼎的工程师Tim Lindholm说,微软根本没有为C#确定一个执行模式,它没有自己的类库,它使用VB和VC++同样的类库,因此微软只是把它作为一种纯粹的语言而不是一个平台,它根本不能和Java相提并论。   很多制造商和开发商都对C#持保留态度。IBM还没有决定是否支持它,尽管它赞扬了微软向标准化组织提交C#这一行为。Hurwitz集团相信C#将迫使Sun向标准化组织开放源代码和提交完全的Java信息。   如果真如微软所述,C#以C和C++为基础,融入了C和C++的灵活性而又增强了开发人员的生产性能,C#的确是一个不错的选择。但就目前形势来看,如果开发者准备用C#来开发,条件还不成熟。虽然微软承诺在7月份提供一个包含C#的Visual Studio 7 Alpha版本(当然,C#也会出现在Visual Studio 7的正式版中),但Visual Studio 7的正式版本的发行不会早于2001年初。然而即使到了那个时候,C#还是会碰到一些问题。   作为一个软件开发人员,没有必要介入公司之间的争端。而争端的结果,无论哪方取胜,都是双方推出功能更加完善的产品,获益的不仅仅是企业,我想更多的还是开发者。就C#语言自身而言,或优或劣,都应该让程序员自己在使用中得出结论! #1  背景一:   微软最新软件研发信息——下一代软件Microsoft.Net   微软最近公布了它的下一代软件Microsoft.Net的简要介绍。该软件的设计是为了更好地发挥网络计算机和网络通信的优势,通过智能设备和高级网站的应用为用户提供更简便、更具个性化和更有创意的网上体验。   这一新的软件产品家族用Microsoft.NET的名称取代了“下一代视窗服务系统”(NGWS)的称谓,它包括用于开发下一代网络服务的软件和适用于智能网络设备的软件。微软还宣布它计划开发基于.NET平台的新产品,包括新一代的视窗操作系统、视窗DNA服务器软件、微软办公软件、MSN网络服务软件和视频工作站开发系统。   微软的目标是:“改变目前这种网站各自独立的局面,建立一种可以按照用户的需求自由组合的交互式网络。”.NET软件预计将于2001年问世。届时微软将继续为.NET以外的视窗产品提供服务。 #1  背景二:   新网络语言标准XML   XML是互联网联合组织(W3C)创建的一组规范,以便于软件开发人员和内容创作者在网页上组织信息,XML实际上是一种定义语言,使用者可以定义无穷无尽的标记来描述文件中的任何数据元素,从而突破了HTML固定标记集合的约束,使文件的内容更丰富更复杂并组成一个完整的信息体系。   为了达到不同平台整合的目标,必须要有一个共同的网络语言作为整合的基础,微软决定以XML作为日后开发.Net平台的共同标准。   产业分析师认为,目前发展XML为业界共同标准的最大问题是:微软、SUN等软件公司或其他产业的公司如银行及医药业等是否能将它们之间竞争的差异性放在一边,且大家同意共同使用XML格式。令人担心的是,软件公司可能会采用那些最符合自己产品策略、且彼此不兼容的XML版本,这种情况将会伤害以XML为网络语言共同标准的愿望。   除了微软呼吁以XML为共同的标准之外,另外一个非营利性的组织——绿洲 (Oasis)也希望以XML为标准。Oasis是由IBM、甲骨文 (Oracle)及SUN电脑所组成,它们都希望创造一套定义特定产业的XML函数,并且希望为彼此间的传递数据定义出共同的方法。   微软所公布的XML标准,称之为BizTalk frmework;绿洲也正在发展自己的标准,称为Electronic BusinessXML,并计划在未来的18个月内公布最后的版本。