标题
MSDN 访谈录之C#编程一 rainbow(翻译)关键字 C#,msdn出处 http://www.msdn.com
MSDN 访谈录(MSDN Show)
C#编程
C#是一种令人耳目一新且为之一振的编程语言,它设计给C++程序员带来快速的开发能力,而又不牺牲C和 C++所特有的功能和控制。
在今天的这一期里,我们将要和Anders Hejlsberg交谈,他是微软一位资深的工程师,一直帮助设计、开发和实现该语言,并发挥其在未来.NET平台中的作用。我们还要和Jeffrey Richter(著名的编程作家和咨询专家)交谈,他从事C#的工作已经一年有余了。
介绍
Robert Hess,微软产品经理和“Show”节目主持人。ROBERT HESS: 让我们继续关注理解.NET体系(Architecture)。我们今天将关注新的C#(念“C Sharp”而不是“C Pound”!)编程语言。首先看看MSDN 消息更新栏目。
MSDN 消息更新
由技术编辑Erica Wiechers主持(略去与C#无关的谈话)
技术闲聊(TECHNO BABBLE )
Robert Hess和资深工程师Anders Hejlsberg会面,要讨论…??? ROBERT HESS: 欢迎回到这个栏目。好了,就象任何一个要在其上面开发软件的平台,为了使这些应用软件能真正地运行起来,所需要的一个主要东西就是一种编程语言。目前,.NET已经拥有了一种专门为此开发的专用语言,我们称之为C#。今天和我们在一起的是Anders Hejlsberg,他是微软一位资深的工程师,在C#语言以及.NET平台领域都扮演了一个关键的角色,在以前的“show”节目里大家都见过他。所以我邀请他到这里来,和大家一起谈论C#,谈谈它是什么,有了它程序员就可以从中得到什么好处,以及它是怎样真正地影响到应用程序的开发的。
那么,您究竟从事C#哪方面的研究工作,是从什么时候开始的?
ANDERS HEJLSBERG: 在最近大概两年半的时间里,我们一直在从事C#的研究工作。设计小组由4人组成,而且在这段时间里,我把主要的精力都放在了这上面。要知道,对于一种新的编程语言,我们有许多事情要去做。我想首先也许就是为程序员提供方便,使程序员开发出更多的产品就是最终目标。如今,虽然在产品的收益方面仅仅只是初具规模,但可以说,我们的目标,在某种意义上,不但要使C#具有C++强大的功能和出色的表现,而且还要使其具备简单易用以及RAD(Rapid Application Development,快速的应用程序开发)语言的生产率。
我们已经做了一些工作,例如,涉及到程序员如何利用更好的工具编写组件的范畴。如果你看看我们是怎样写应用程序的,应该是
曾经怎样写应用程序的,如果回顾过去,也就是说5年或10年以前,应用程序就是这样铁板一块地被创建的,它和操作系统的唯一交互,你知道,就是进行文件的i/o操作,而且无论如何操作系统都会载入应用程序,接着用户就与其交互,最后退出。看看现在我们是如何创建internet应用程序的,相比起来简直是天壤之别。应用程序不再是铁板一块了,而是由一系列更小的组件构成,它们分别栖息于不同的环境。例如,你可能拥有类似存储过程(stored procedures)和SQL Server那样的组件,也可能拥有栖息于浏览器中的控件,或者是存在于ASP网页中的代码。商业对象生存于中间层,调用整个集合的组件就等于调用该应用程序。于是为了使……
ROBERT HESS: 而当时您明白其中的每一个组件都比5或10年前的一个应用程序更加复杂。
ANDERS HEJLSBERG: 噢,绝对,绝对。同样,为了减少创建组件的复杂性,不象那种大块头程序,每当必须创建其中的一个组件时,就不必另起炉灶,而应该尽量继承一些早已存在于这些专门的栖息环境(hosting environment)中的东西。如果要写浏览器中的一个控件,就要继承一个基控件;如果要写中间层的一个商业对象,就要继承某些商业对象类;而要想公开属性、方法和事件等等,就要说明它们是如何通过把属性与组件联系一起,以便与栖息环境相结合。而且还要能够为这些组件撰写随组件一起发布的文档。
ROBERT HESS: 所有的这些只是标准的面向对象的编程,Smalltalk
拥有此特性的时间似乎已经不短了,并且……
ANDERS HEJLSBERG: 嗯,绝对如此,现在并不是不能做这样的事。但如果注意一下这种今天已经得到了广泛应用的编程语言,它们实际上并不真正支持面向组件的概念。如果你当初同意我们什么时候谈论组件,那么认为它们具有属性、方法和事件在当今是极其平常的。但如果注意一下C++,就会发现它仅仅提到“方法”这个概念,没有属性,也没有事件。现在,你可以利用命名模式来仿真它们,也就是说,对于一个属性,可以用一个get color和一个set color的方法来取代一个color属性;而要代替类中作为第一个类成员的事件,你拥有的用于接收事件的接口就应该被实现,为了这样,你就必须处理一些琐碎的事……
ROBERT HESS:嗯,部分原因是由于C++是基于C的,它只是象预处理程那样,又由于C本来就不支持,C++也不支持……
ANDERS HEJLSBERG: 是的,实际上我多少认为,你所看到的就是从C到C++再到C#的发展过程。从C到C++,面向对象编程的概念被加进去了。如果你经历了从C++到C#,那么我会说,面向组件编程的概念也已经被加进去了,而它们之间真的存在着某些相似的地方。就象可以用C代替C++进行面向对象的编程,你也可以用C++代替C#进行面向组件的编程,只不过是更困难而已。用C来进行面向对象的编程是极其困难的,你必须手工地布置V表(虚拟函数表),并且还要处理所有琐碎的事情。用C++写组件也确实可行,但必须要为属性手工地设置命名模式(naming patterns),必须实现事件同步(event syncs),必须具有外部的IDL文件,在文件中可以对栖息属性(hosting attributes)进行描述,必须具有外部的文档文件,等等。我们只真正采纳了其次一个合理的步骤,它反映了人们是如何编写应用程序并把其整合到语言中的
ROBERT HESS: 那么,最初的一些目标是什么?仅出自内心的看法,当您第一次着手这个项目时,您要解决的问题和要确定的这种新语言的方向是什么?
ANDERS HEJLSBERG: 嗯,我认为正如您所说,面向组件只是一方面。我想另一个关键的因素就是简单化。使编写应用程序更加简单化,不让程序员做一些琐碎的事,机器可以代你做。大量的简化取决于.NET runtime本身,但也取决于语言。基本上,最终我们所做的,就是让你把更多的时间、更多的精力放在算法上,而让系统去做一些琐碎的事。我认为,许多其它非常关键的事情比较现实,我总不能吩咐人们把他们现有的代码通通扔掉吧。我们必须找到权衡的方法,并不仅仅是你的编程技巧,而且还包括你以前编写的、早已存在的代码。因此在C#里,以权衡你技巧的名义,我们努力坚持在与C++的基础语法最接近、最真实的地方。所以用了C#,C++程序员会立即觉得很眼熟、很亲切。
ROBERT HESS: 您的所做的一切应当以C语言为基础,是否就是当初的思路之一?或者您是否原来就认为,让我们应与过去彻底决裂,再开始设计一种全新的语言?
ANDERS HEJLSBERG: 嗯,我想这种语言应该以一种崭新的面貌出现,可是我们明白,必须让C和C++程序员熟悉这种语言。当然那就意味着在某种程度上,我们必须把语句结构从弯曲的大括号变换成其它一些东西。我们已经打下了一些基础,但仍然存在着其它某些关键的规则,譬如允许写健壮的软件,这就意味着象垃圾回收(garbage collection)、异常处理、类型安全这样的功能,根本地改变了设计该语言的思路,非常难于上手,以后也不容易扩展。我的意思是说,在C++中,C++语言拥有的一个强大功能之一,但有时也同样是难点之一,事实上您知道,就是没有类型安全。如果你了解清楚自己要做什么,就会从中获取巨大的力量,否则,只是自找苦吃。在C++中,获得一个虚悬指针(dangling pointer)易如反掌。同样,覆盖掉一个数组的尾部,或者拥有一个未初始化的变量等等,也是极其容易事