C#首席设计师Anders Hejlsberg专访

 C#首席设计师Anders Hejlsberg专访
  
  作者:John Osborn
  
  译者:荣 耀
  
  [译序:精彩技术,不容错过!限于时间和能力,译文倘有讹误,当以英文原版为准。]
  
  
  
  7月,O’Reilly 编辑John Osborn参加了微软职业开发者会议。在此,他对著名的工程师、微软.Net框架设计师、C#程序语言首席设计师Anders Hejlsberg进行了采访。Anders Hejlsberg因设计PC上最早的语言之一—Turbo Pascal而出名。他把Turbo Pascal授权给Borland公司,后又率队开发了Delphi—一个极为成功的可视化的客户/服务应用设计工具[译注:此处不必拿MIDAS之类较真J]。访问时在座的还有微软C#产品经理Tony Goodhew和O'Reilly的Windows编辑Ron Petrusha。
  
  Osborn:
  
   我已经看到一些关于C#[发音为"See sharp"]的新闻故事,我注意到有很多似乎倾向于这样的观点—或理论上说—C#不是Java的克隆就是Java的微软替代物。如果你来写这个标题,你希望人们怎么评论这门语言?
  
  Hejlsberg:
  
   首先,C#不是Java的克隆。在设计C#期间,我们考察了很多种语言,如C++、Java、Modula 2、C、Smalltalk等。很多语言都有我们感兴趣的相同的核心思想,比如深度面向对象、简化对象等等。
  
   C#和这些别的语言尤其是Java的关键不同点是它非常接近C++。在我们的设计中努力使然。C#从C++直接借用了大多数的操作符、关键字和声明。我们还保留了许多被Java抛弃的语言特性。为什么Java中没有枚举,道理何在?我的意思是,抛弃它们是基于何种理论基础?在C++中,枚举显然是一个很有意义的概念。在C#中,我们保留了枚举并同样使其类型安全。并且,枚举不只是整型,它们实际上是从.NET基类库里的System.Enum派生下来的强类型的值类型。如果没有造型转换,枚举类型“foo”和枚举类型“bar”不可互换。我认为这是个重要的差异。我们还保留了操作符重载和类型转换。C#名字空间的整体结构也非常接近C++。
  
   但是,超越这些传统的语言论题,我们设计语言的一个关键的目标是使C#面向组件。我们向语言自身加入了你在编写组件时所需要的所有概念。例如属性[译注:即property,翻译为“属性”,由来已久。我怀疑如果先有attribute的话,property会不会被翻译为“性质”、“特性”,而attribute才是“属性”:JL]、方法、事件、特性[译注:即attribute,截至目前,此名词译法仍较混乱。有的翻译和property不区分,也译为“属性”;有的译为“特性”;有的译为“属性信息”。在该名词译法尚未统一之前,本着精简原则,笔者先把它翻译成“特性”。但注意,XML中的attribute的译法一般比较统一,即为“属性”(因为XML中没有一个类似于property的东西会与之混淆)。因此,本文最后交叉描述C#和XML的部分,请留心“特性”、“属性”各有所指。]和文档等,它们都是一流的语言结构。我们对特性所做的工作是全新的和创新的。利用特性可为任何对象加入有类型的、可扩展的元数据。这在目前任何其它程序语言里都看不到的。C#也是第一个合并XML注释标记的语言,编译器可以用其直接从源码中生成可读的文档。
  
   另外一个重要的概念是我所说的“一站购物式软件”[one-stop-shopping software]。一旦你用C#写代码,你就在这一个地方写了一切。不再需要头文件、IDL(接口定义语言)文件、GUID和复杂的接口。因为它是自包容的单元。一旦用这种方式写自描述的代码,你就可以把你的软件嵌入到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代码,可以做不安全的造型转换,可以抑制内存从而使其不会被意外地垃圾收集[译注:此处用作动词J]。
  
   关于不安去代码有很多争论,人们似乎认为我们在吸毒或是在干什么别的坏事。我认为这是个误会。代码不会仅仅因为标记了“不安全”就表示它不受管制。当然,我们不会扔出不安全的指针使人们容易受到从Internet下载的不安全代码的攻击。不安全代码被深深地约束在安全的环境里。我们提供这样的弹性:1.呆在受管制的代码箱里完成工作而不会坠入深渊;2.转入一个不同的语言使用一个不同的编程模型写本地代码。如果你停留在这个箱子里,我们会使代码更加安全,因为系统知道它要干什么。事实上,即使你写不安全代码也不意味着你离开了受管制的空间。你的不安全代码会变得更有效率。
  
  Osborn:
  
   请给我多讲一些在受管制的环境里处理不安全代码的机制。
  
  Hejlsberg:
  
   好的。描述受管制的执行环境比如Smalltalk、Java和.NET公共语言运行时一个重要特征是它们提供垃圾收集机制。为了提供垃圾收集机制,至少要提供一个现代的垃圾收集器,一个“标记和清扫”垃圾收集器。比起传统不受管制代码来说,你必须更多地了解正在执行的代码。为了找出要排除的死对象,你必须能遍历堆栈,找到
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: c是英文字母表中的第三个字母,也是拉丁字母表中的一个字母。在英语和很多其他语言中,c通常发音为/k/,有时候也可以发音为/s/。 在数学中,c通常用作一个常数,代表一个固定的数值。在代数方程中,c通常用来表示一个未知数或常数项。 在化学中,c代表着摄氏度(Celsius)的缩写。摄氏度是一种温度单位,以安德斯·开尔文(Anders Celsius)的名字命名,常用于国际科学计量。 当谈到电荷(charge)时,c可以代表电荷的单位——库仑(Coulomb)。库仑是国际单位制中电荷的单位,用来表示电子或其他粒子的电荷量。 在计算机编程中,c是一种编程语言,它被广泛用于系统级编程,尤其是用来开发操作系统和驱动程序。 总之,c可以代表字母表中的一个字母,也可以代表数学中的常数,物理中的单位,化学中的温度单位以及计算机编程中的一种语言。 ### 回答2: 「C」最常见的用法是代表拉丁字母表的第三个字母,也是英语字母表的第三个字母。它也可以代表许多其他的事物,下面列举了一些例子。 首先,C可以代表“度量单位”中的摄氏度。摄氏度用来测量温度,它以人类活动的常见温度为基础,将水在常压下沸腾和冰融化时的温度分别设为100℃和0℃。 其次,C还可以指代一种编程语言,即C语言。C语言是一种通用的高级编程语言,被广泛用于开发各种应用程序。它具有简洁、高效、灵活等特点,被许多程序员和软件开发人员所喜爱和使用。 另外,C还是一个音乐世界常用的音符。在西方音乐中,C代表着一个特定的音高。在简谱或五线谱上,C以一个空心圆圈表示。 此外,C还可以指代一种短语“carbon copy”的缩写。在电子邮件中,如果我们要将某封邮件的一个副本发送给其他人,我们就可以使用“cc”字段来添加这些人的电子邮件地址,这样他们也将收到邮件的副本。 总之,C可以有很多不同的含义和用法。无论是作为字母、温度单位、编程语言、音符还是缩写,C都在不同的领域发挥着重要的作用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值