当前位置:编程学习 > C#/ASP.NET >>

C#首席架构师Anders Hejlsberg访谈

7月,O’Reilly编辑John Osborn参加了微软职业开发者会议。在此,他对著名的工程师、微软.Net框架C#语言首席架构师Anders Hejlsberg进行了采访。Anders Hejlsberg因设计PCs上最早的语言之一—Turbo Pascal而广为人知。他把Turbo Pascal许可给Borland公司,后又率队创建了Delphi—一个极为成功的可视化的client/server应用设计工具。访问时在座的还有微软C#产品经理Tony Goodhew和OReilly的Windows编辑Ron Petrusha。

Osborn:

     我已经看到一些关于C#(发音为"See sharp")的新闻故事,并注意到有很多似乎倾向于这样的观点,或理论上说,C#不是Java的克隆就是Java的微软替代品。如果你来做宣传的话,你希望人们怎么评论这门语言?

Hejlsberg:

     首先,C#不是Java的克隆。在设计C#期间,我们考察了很多种语言,我们考察了C++,我们考察了Java,我们考察了Modula 2、C,我们还考察了Smalltalk。很多语言都有我们感兴趣的相同的核心思想,比如深度面向对象、简化对象(object-simplification)等等。

     C#和这些别的语言尤其是Java之间的关键不同点是,它非常接近C++,在我们的设计中努力使然。C#从C++直接借用了大多数的操作符、关键字和声明。我们还保留了许多被Java抛弃的语言特性。为什么Java中没有枚举,道理何在?我的意思是,抛弃它们是基于何种理论基础?在C++中,枚举显然是一个很有意义的概念。在C#中,我们保留了枚举并同样使其类型安全。并且,枚举不只是整型,它们实际上是从.NET基类库里的System.Enum派生下来的强类型的值类型。如果没有进行造型转换,枚举类型“foo”和枚举类型“bar”不可互换。我认为这是个重要的差异。我们还保留了操作符重载和类型转换。C#名字空间的整体结构也非常接近C++。

     但是,超越这些传统的语言论题,我们设计语言的一个关键的目标是使C#面向组件。我们向语言自身加入了你在编写组件时所需要的所有概念。例如properties(属性)、methods(方法)、events(事件)、attributes(特性)和documentation(文档),它们都是一等的语言成分。我们对特性所做的工作是全新且具有创新意义的,利用特性可为任何对象加入有类型的、可扩展的元数据。这在目前任何其它程序语言里都看不到。C#也是第一个合并XML注释标签的语言,编译器可以用其直接从源码中生成可读的文档。

     另外一个重要的概念是我所说的“一站购物式软件”(one-stop-shopping software)。一旦你用C#写代码,你就一体化地写了一切。不再需要头文件、IDL(接口定义语言)文件、GUIDs和复杂的接口。因为它是自包容的单元,所以,一旦你能够以这种方式编写自描述的代码,你就可以把你的软件嵌入到ASP页面或植入各种不同的环境,这在以前是不可能的。

     让我们再回到这些关键的组件概念。语言是否应该支持属性或事件,业界有很多争论。没错,我们是可以用方法表达这种概念。我们可以用诸如“get”或“set”之类的程序块的命名模式,模拟属性的行为。我们可以用接口和实现接口的适配器并转发到对象。这都是可以实现的,正如同可以在C语言里进行面向对象编程一样。只是它更加困难,需要更多手工劳动,为了真正表达你的思想,你最终不得不去做所有的工作。我们认为是时候了,应该有门语言使得创建组件变得容易些。最近几年来,开发人员在创建软件组件。他们并不是创建整个应用或整个类库。每个人都是在创建从宿主环境提供的基组件继承下来的组件。这些组件重载一些方法和属性,它们处理事件,并把组件安装回系统。树立这些概念是关键的第一课。

Osborn:

     你最近在介绍C#时,第一张幻灯片上面写着:“C/C++家族里第一个面向组件的语言”。

Hejlsberg:

     是的。这是我的首要目标之一。我们谈论一切如何都是对象,这也非常关键。以前象Smalltalk和Lisp语言都可以这么做,但代价高昂。我认为C#包含一些优美有趣的创新,以使得组件开发容易些。例如装箱和拆箱的概念。装箱可以使一个值类型的值转换为一个对象,拆箱可以使一个对象转换为一个简单类型的值。这在以前或许也有,但我们把它应用于语言的方式是一种优美的创新。

     我们努力避免以“象牙塔”的方式设计C#和.Net框架。我们承受不起重写我们所有的软件的负担。业界也负担不起,特别是今天我们正转移到Internet时代。你要善于利用你已经拥有的。所以,我认为互操作性也是关键的。我们致力于为程序员提供所有符合Internet标准的可互操作的恰当的解决方案,例如HTTP、HTML、XML以及业已存在的微软技术。所以你不会有如坠深渊的那一刻—发现新的.NET框架下没有提供你用的一些东西,或者当你意识到你想利用一些已经存在的API或组件的时候。你已经看到我们已把所有COM互操作能力内建入语言和通用运行时;你已经看到可以使用DllImport特性导入已存在的DLL(动态连接库);你已经看到即使那些都不能遂你所愿,我们也有不安全代码的概念。不安全代码允许你编写使用指针的内联C代码,可以做不安全的造型转换,可以抑制内存从而使其不会被意外地垃圾收集。

补充:软件开发 , C# ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,