Anders Hejlsberg中文译名:安德斯·海尔斯伯格,丹麦人,Turbo Pascal编译器的主要作者。进入微软公司后,先后主持了Visual J++和.Net。
主要历程编辑本段回目录
1 加入Borland公司之前
安德斯·海尔斯伯格曾在丹麦技术大学学习工程,当时他在丹麦拥有个叫Poly Data的公司,他编写了Compass Pascal编译器核心,后来叫Poly Pascal。
2 在Borland公司
安德斯·海尔斯伯格把Compass Pascal编译器核心授权给了美国Borland公司,并作为雇员加入Borland公司,并且是后来所有Turbo Pascal版本与Delphi前3个版本的架构师。Philippe Kahn为第一个版本的Turbo Pascal添加了用户界面与编辑器。
3 加入微软公司
据说,比尔·盖茨亲自参与了这次挖角行动,并许诺安德斯·海尔斯伯格在微软将得到技术上的足够自由和资源支持。据说该事件也是微软公司和Borland公司后续官司的导火索。
4 在微软公司
进入微软公司后,首先主持了Visual J++的开发工作,后来由于在Java开发工具授权问题上和Sun公司的纠纷,微软停止了Visual J++的后续开发。
这之后,作为.Net概念的发起人之一,安德斯·海尔斯伯格被任命为微软.Net的首席架构师,主持.Net的开发工作。
Delphi和.NET之父:安德斯·海尔斯伯格编辑本段回目录
安德斯·海尔斯伯格(Anders Hejlsberg,1960.11~),丹麦人,Turbo Pascal编译器的主要作者,Delphi和.NET之父
安德斯·海尔斯伯格曾在丹麦技术大学学习工程,当时他在丹麦拥有个叫Poly Data的公司,他编写了Pascal编译器核心,最初叫作Compass Pascal,后来叫Poly Pascal。Anders把该编译器核心授权给了美国Borland公司。安德斯·海尔斯伯格作为雇员加入Borland公司,并且是后来所有Pascal版本与Delphi前3个版本的架构师。Philippe Kahn为Pascal添加了用户界面与编辑器。
Anders Hejlsberg曾在丹麦科技大学学习工程学。Anders Hejlsberg第一次登上软件界历史舞台是在80年代早期,因为他为MS-DOS和CP/M设计了一个Pascal编译器。当时,还是一个小公司的Borland很快雇用了他,并买下了他的编译器,改称Turbo Pascal。在Borland,Hejlsberg继续开发Turbo Pascal,并最终带领他的小组设计了Turbo Pascal的替代品、开发工具史上的奇迹:Delphi语言。
1996年,Anders Hejlsberg在Delphi3发布前离开Borland去了MS。
在此之前,MS曾多次企图挖走Anders,但都没有成功。据信anders去MS(主要)不是钱的问题,虽然MS的开价也相当有吸引力: 130万美元年薪外加股票期权和分红,总计超过300万美元。更主要的原因是Anders和Delphi开发组的其他成员在修改编译器的问题上发生了争执;还有,据Borland内部人讲,Anders认为自己不再是“不可缺少的人”。
Anders在Delphi3中几乎没有做什么工作,Chuck Jazdzewski扮演了一个更重要的角色。(--Anders Ohlsson) Anders在Borland时把所有精力都放在了Pascal产品上,也需要新的挑战,这时Bill Gates的亲自邀请,许诺给与挑战的机会,Anders加入了Microsoft就势在必行。
Microsoft 用丰厚的薪水、股票认购权和巨额的加盟奖金雇请了 Hejlsberg 之后,Borland 曾提出通过不正当手段吸收新成员的控告。Borland 还曾声称 — 提供了很少的细节来支持指控 — Hejlsberg 正在开发“Delphi for Java”。这场诉讼虽然最终以 Borland 的胜利而收场;但Anders 已经在为Microsoft工作了。
1996年Anders来到微软后,直接主抓Visual J++的研发工作,并在1999年被授予“distinguished engineer”(卓越工程师),在微软仅有16人获得这样的荣誉。
后来微软希望通过开发最新的软件开发语言来赢得软件开发者的拥戴,在微软公司把视窗操作系统和软件向网络迁移的新市场战略中,C#语言是最重要的环节。微软动用了最好的资源。Anders担任了C#语言的首席设计师,同时也是微软.NET战略构架的重要参与决策者。考虑一下Anders的经历,就不会奇怪微软将此重任交给他了。毕竟C#也不是他对软件开发方式重大变革的首次。现在经过几年时间的埋头苦干,C#已成为微软反击Java语言的最有力武器。
鉴于他为软件开发做出的巨大贡献,Anders在《Dr.Dobb's》杂志的2001年西部会议上被授予“Prestigious Excellence in Programming Award”,《Dr.Dobb's》杂志的主编Jonathan Erickson说:“这一荣誉,我们每年只颁给那些在软件开发领域做出非凡贡献的人员,Anders开发的C#和他整个职业生涯中为软件开发所做出的巨大贡献有目共睹,他无愧于这一荣誉!”
比尔盖茨也高度评价说:“我们为Anders获得这一荣誉感到无比自豪,Anders在C#创建中所做的努力将会改变现在的软件开发方式,并将在以后的十年继续产生影响。”
“程序员是最好的职业”,Anders说:“每两年,CPU的速度要加倍,内存容量是原来的四倍,但是我们的大脑还是原来的大小,很显然,将需要更多的程序原来补充这些。”
______
注:海尔斯伯格曾在微软博物馆视频上表明他是1960年生的,但很多其它资料显示,他是1961年生的。2006年,在巴塞罗那微软技术教育大会(TechED)上,安德斯再次确认他生于1960年。
Anders Hejlsberg的故事编辑本段回目录
在我的世界里,Anders Hejlsberg是如同神一般存在的人物.
Delphi和C#的缔造者,Borland的创始人之一,现在Microsoft的核心人物之一,在一定程度上影响着这个世界的发展.温文尔雅,为人低调.不管在Internet中还是在现实生活中,都找不到太多关于他的信息.进入Microsoft已有九年,只是到了近几年随着dotNet的问世才开始在公众面前出现.像他这样的人,拥有别人艳羡的财富,名誉和地位,却甘心默默无闻的工作.我想,当年他接受Microsoft邀请的唯一缘由,就是Microsoft能提供让他的才华充分发挥的环境,而在Borland,他已被限制的太多.
一个曾与他共同工作过的同事在BLOG写道,Anders Hejlsberg拥有不可思议的个人魅力和语言表达能力,得到了所有人的尊敬,并令人敬畏.
程序员是个特殊的行业,这里中的每个人都智力出众,骄傲无比,并以此自负.有句经典的话:管理程序员,就像放牧一群骄傲的猫.我不知道,只能去想象,在这个行业中,一个温文尔雅却能让同行竞争对手感到"敬畏"的人,到底是个什么样的人.也许,因为在他身上体现出的,正是程序员们追求的终极之道:以精神魅力征服世界,而不是物质魅力.
Anders Hejlsberg曾在丹麦科技大学学习工程学,他编写的Pascal编译器的核心,1981年将Pascal编译器卖给了Borland,并加入Borland公司,那时的Borland公司还是一个名不见经传的小公司。
Anders Hejlsberg在Borland主持开发了Turbo Pascal,Turbo Pascal获得一直好评,Anders Hejlsberg并未止步不前,他将Turbo Pascal编程一种面向对象的、拥有可视化环境和卓越的数据库访问特性的应用程序开发语言-Delphi。
Java出现了。Anders Hejlsberg在Borland一直郁郁不得志,据Borland内部人士讲Anders Hejlsberg认为自己不再是不可或缺的人。比尔盖茨慧眼识才,三故茅庐,把Anders Hejlsberg请到了微软。最开始微软许以重金,但Anders Hejlsberg不为所动,当清楚Anders Hejlsberg的想法后,比尔盖茨答应给他一个宽松的环境,既领导Visual J++小组,并提供薪水和红利奖金300万美元。这样Borland这个大牛孵化器为微软输送了一位超级大牛。好景不长,SUN公司认为微软破坏了java的跨平台性,很快微软就会利用它的VJ++将java开发人员拉拢到它的周围,而它的VJ++以及WFC的很多特性明显是为了Windows平台设计。SUN中止了对微软的java授权。此后微软便选择Anders Hejlsberg担任C#的首席设计师。
Borland创业故事编辑本段回目录
记得大学时,第一个在PC上使用的软件就是SideKick。这个至今让我仍然无法忘记的软件,也曾让许多人津津乐道,而Borland当时也就是以SideKick成为全球知名的软件公司。不过Borland第一个奠立创业基础的软件,却是我大二用来交作业的TurboPascal,而Turbo Pascal也是我听到的第一个关于Borland的有趣的故事。
当年Philippe Kahn(Borland的创始人)和Anders Hejlsberg到美国创业时,便由Anders以汇编语言撰写了Turbo Pascal的编译器,而Philippe则包办了Turbo Pascal其他的部分。在这两位仁兄开发完Turbo Pascal之后,穷得快连登广告的钱都没有了。Philippe为了在Byte杂志(还记得这个著名的杂志吗?)刊登Turbo Pascal的广告,和Anders商量了一个方法,那就是直接约Byte杂志的人到当时Borland的办公室讨论刊登广告的事情。
当Byte的人到了Borland之后,Philippe、Anders和公司的助理小姐故意忙着接电话,接受Turbo Pascal的订单,并且告诉Byte杂志的人等一下。过了一阵之后Philippe才进入房间向Byte的人道歉,说他们的Turbo Pascal受到市场的热烈欢迎,订单源源不断地到来,因此可能不需要在Byte杂志刊登广告了,接着Philippe向Byte的人展示Turbo Pascal这个产品。由于在当时的机器中Turbo Pascal能够在极少的RAM中常驻执行,又提供闪电般的编译速度,这立刻让Byte杂志的人当场震惊。凭着专业知识和丰富的经验,Byte的人立刻知道这将是一个革命性的软件,因此马上希望Philippe能够在Byte杂志刊登Turbo Pascal的广告,并且愿意以半价刊登。当然,Philippe也立刻爽快地答应了,于是一个革命性的软件Turbo Pascal终于在Byte杂志刊登出来了。当时售价49.99美元的Turbo Pascal立刻为Borland带来了大量的财富,Turbo Pascal也马上成为PC上除了基本的Basic之外最畅销的开发工具,由此正式揭开了Borland影响PC开发工具近20年的历史的序幕。
Turbo Pascal是由Anders Hejlsberg亲自开发的,并且和Philippe Kahn谈好的条件是Borland每卖出一套Turbo Pascal,Anders便从中抽取一份版权费。由于当时软件的价格不算便宜,能够写编译器的人更是少之又少,所以编译器工程师通常都能够获得优厚的报酬。因此当时Anders Hejlsberg在完成了Turbo Pascal、并且和PhilippeKahn谈好了合作条件之后,Anders理所当然地认为一套Turbo Pascal会定价数百元美金,因为这不但是当时一般编译器的价格,而且Turbo Pascal还内含了一个开发环境和编辑器(Editor),这是当时许多工具没有提供的。
没有想到极具商业头脑的Philippe Kahn了解到:如果把Turbo Pascal定价在数百美金,那么Turbo Pascal可能只会卖出数百到数千套,无法冲出大量的销售额。因此,Philippe Kahn以极大的勇气,瞒着Anders Hejlsberg只把Turbo Pascal定价为49.95美金。这种价格在当时对于编译器和开发工具来说简直是不可思议的低价。当Anders Hejlsberg知道了Philippe Kahn的定价后,简直快气昏了。因为在这么低的价格下Anders的版税金一定少得可怜,因此当时Anders说他把最好的Pascal开发工具拿去让一个白痴销售。没有想到的是,Philippe Kahn的定价策略获得了极大的成功。Turbo Pascal以极佳的品质和令人不可思议的低价格成为当时最具吸引力的Pascal开发工具。当然,在Turbo Pascal卖出了让人难以置信的成绩之后,Anders便再也不提他把专业Pascal编译器让白痴去卖这件事了。
关键产品--SideKick
虽然Turbo Pascal快速地让Borland在当时全世界的程序员中成为最响亮的软件新星,但是真正让Borland打人一般计算机使用人群、快速成长为软件巨人的大功臣的,却是Borland早期最重要的产品--SideKick。
在Turbo Pascal之后,Borland接着推出了SideKick这套软件。SideKick可以说是随后著名的内存常驻软件(Terminate and Stay Resident-TSR)的始祖,也是Borland跨出开发工具领域、让几乎所有PC使用者认识Borland的关键软件。SideKick在当时以许多丰富的小工具和记事功能让它成为每一个程序员爱不释手的工具。还记得当时我每天都会使用SideKick的ASCII对照表和计算器的功能,因为在汇编语言(Assembly)盛行的时期,查阅ASCII对照表和在2进制、10进制以及16进制之间进行转换是每日必要的工作。
当然SideKick也很快成为了畅销软件,在全球狂卖数10万套,继续把Borland往顶尖的软件公司推进。
所谓的TSE代表Terminate and Stay Resident。这个意思是说,这类软件在执行后会隐藏在内存的某个位置中,但是并没有出现在屏幕上。不过使用者通过一个快捷键就可以立刻调出这类软件让使用者使用,在使用完毕之后又可以按一个快捷键再度隐藏它。这样的软件运行方式在当时是一项全新的创举。
以我的眼光来看,SideKick这个软件对于Borland来说是非常关键的作品,因为我将SideKick归类成"消费型软件"产品。所谓消费型软件,是指可以被所有计算机使用者使用的软件,而不是只给程序员或是开发者使用的软件。凡是现今比较会赚钱或是规模比较大的软件公司大都属于开发"消费型软件"的公司。例如Microsoft除了有和Borland竞争得你死我活的开发工具之外,最重要的是Microsoft拥有两大"消费型软件":Windows操作系统和Office。这两类软件才是Microsoft最赚钱的产品。Oracle是另外一个很好的例子,数据库几乎是现在任何应用都需要使用的软件。同样,SideKick就属于这一类型的软件,因为SideKick可以被所有的开发者使用来增加生产力,而不管开发者使用的是什么语言。因此当Borland推出SideKick之后,立刻在全世界狂卖,也成为继Turbo Pascal之后Borland最赚钱的产品。我认为在后来的数年之中Borland走得比较辛苦,便是因为Borland再也没有推出像SideKick一样属于"消费型软件"的重量级产品,而只有属于程序员和开发者小众市场的产品,这是非常可惜的事情。而"消费型软件"也是到现在我仍然认为Borland应该推出的产品。
由于SideKick的TSR技术是当时独一无二的,而且是如此的好用,这引起了当时许多人的好奇,并且成了所有软件厂商模仿的对象,我还记得稍后许多的计算机信息书籍都以如何学习TSR技术作为卖点。也是因为SideKick和TSR太成功了,因此Borland立刻进行了两个工作。第一当然是马上开发下一版的SideKick,让SideKick继续执类似软件的牛耳,以防止其他软件公司推出类似的软件来分食SideKick打下的天下。
很快地,Borland便推出了SideKick的后续版本,不但功能更多,而且SideKick从原本完全以开发者为中心的软件转变为适合所有计算机使用者使用的消费型软件。看看左图,从产品封面以"Desktop Organizer"为主题便可以了解到SideKick在当时的定位。果然,后续的SideKick又持续地大卖,这让Philippe Kahn非常振奋,也让他雄心大盛,开始想要通过SideKick的成功主导PC软件的标准,这当然就是SideKick一举成名的TSR技术。
在Borland通过Turbo Pascal和SideKick大获成功之后,也因TSR技术成为大多数开发者津津乐道的软件公司,许多软件公司都开始模仿Borland的TSR技术开发大量的TSR软件。不过当TSR技术大量被运作之后。最后却造成众多的TSR软件彼此冲突,无法正确地相互共存,这主要是因为许多TSR软件都使用了相同的快捷键来调出/关闭软件,或是隐藏在相同的内存位置。我还记得,当时同时使用几个TSR软件时,必须遵照一定的运行次序才可以正常使用。
为了解决这个扰人的问题,Borland开始广邀软件公司,想要以Borland为首制定TSR的标准。如此一来,只要所有的软件厂商遵照Borland制定的标准,那么所有的TSR软件就可以彼此正确地运行在PC之中。当Borland公布了这个想法并且发表了初步的TSR标准规格之后,却立刻引起了Microsoft的紧张。因为当时TSR是如此的流行,Microsoft害怕TSR技术由Borland主导之后会让Borland成为PC软件的霸主,进而严重影响Microsof想主宰PC的计划。
因此在Borland开始正式制定TSR标准之际,Microsoft便站出来反对Borland定义的TSR标准,并且声明Microsoft将在未来的DOS操作系统中加入对于TSR的支持,因此没有必要再额外制定TSR标准。当时的软件公司,包括Borland在内,都无法和Microsoft对抗。在操作系统厂商表明了反对立场之后,Borland的这个构想很快便迫于形势而放弃了。关于TSR的争议应该算是Borland和Microsoft之间的第一场战争。虽然在没有引起太大的烽火之前便很快收场,不过也算是Borland和M1crosoft第一次真正的交手。也正是由于这次的相争,让Microsoft惊讶于Borland快速的兴起,并开始正视Borland这家在当时还算小的软件公司。
虽然在有关TSR的技术之争中Microsoft赢得了胜利,不过很奇怪的是,此后TSR软件反而开始慢慢地退烧。除了一些少数的公用程序软件仍然使用TSR之外,之后便没有什么重量级的软件是使用TSR技术开发的,这算不算是另一桩Microsoft介入之后搞砸的技术呢?
最后再叙述一个从Borland老员工处听来的有趣故事。许多人一直想要知道:Borland的总部在哪里?或是想要知道:为什么Borland会选择Scott Valley作为总部?事情的经过是这样的:
当年Philippe Kahn和Anders Hejlsberg到美国准备开始创业时,由于没有资金,Philippe Kahn就在西餐厅打工,负责端盘子的工作,而Anders Hejlsberg则努力的在开发Turbo Pascal。
当Philippe Kahn存了一笔小钱之后,两个人便开始了创业大计。首先他们必须找到一个公司的总部,可是要在哪里实现Philippe Kahn和Anders Hejlsberg心中的理想呢?虽然当时他们住在L.A.附近,但是光凭Philippe Kahn存的一点小钱是绝不够在L.A.大展鸿图的,因此Philippe Kahn和Anders Hejlsberg决定到比较偏远的地方试试。于是这两位仁兄便开着Philippe Kahn的破车往南出发了。听说当Philippe Kahn把车开到Scott Valley附近时刚好没有汽油了,眼看四周的环境觉得还不错,就决定在这个地方展开Philippe Kahn和Anders Hejlsberg的创业之梦。就是这个决定让原本默默无闻的Scott Valley在数年之后竟成为一个家喻户晓的高科技盛地。
C#首席设计师Anders Hejlsberg专访编辑本段回目录
C#首席设计师Anders Hejlsberg专访
作者:John Osborn
译者:荣 耀
[译序:精彩技术,不容错过!限于时间和能力,译文倘有讹误,当以英文原版为准。]
2007年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公共语言运行时一个重要特征是它们提供垃圾收集机制。为了提供垃圾收集机制,至少要提供一个现代的垃圾收集器,一个“标记和清扫”垃圾收集器。比起传统不受管制代码来说,你必须更多地了解正在执行的代码。为了找出要排除的死对象,你必须能遍历堆栈,找到所有活动的根,并指出哪些对象是活动的哪些是不再被访问的。然而,为了能够达到这个目标,你必须和你执行的代码紧密协作。代码必须具有更好的描述性。它要告诉你它是怎么分布在堆栈里的,它的局部变量存放在何处等等。
当我们在C#中编写不安全代码时,你可以做不是类型安全的事,比如指针操作。标记为不安全的代码并非绝对执行在不可信任的环境里。为了使之执行,你必须授予信任,否则,代码将不会执行。从这一点来看,和其它本地代码并无区别—真正的区别是它们仍然运行在受管制的空间里。你写的方法有一个描述表,它告诉你哪些对象是活动的,因此,不管什么时候你进入这些代码,你都不必穿越列集边界。否则,当你进入非描述性的、不受管制的代码(比如通过Java本地接口),你不得不在堆栈上设置一个水印或设置一个屏障。你必须重新列集所有箱子外的参数。一旦开始使用对象,你必须对你触及的东西小心翼翼,因为GC[垃圾收集器]仍然在另一个不同线程里运行。如果你不使用一些隐晦的方法锁定对象从而正确地抑制垃圾收集器,它可能会移去对象。如果你忘记那么做,那你将会不走运。
我们采用了一个不同的方式。我们说过,“让我们集成这个到语言中去。让我们提供声明,例如fixed声明,它可以让你抑制对象以和GC协作并集成之。”用这种方法,我们提供最佳方式,带领所有已经存在的代码一起向前,而不是仅仅将它们抛弃。这是一个不一样的设计方式。
Osborn: 因此,你们对不安全代码的处理方式是—不安全代码的内存实际上是在垃圾收集器的监视之下?
Hejlsberg: 是的。但是,就象所谓的“购者自慎,不包退换”一样,它并不安全。你可以获取指针并做错事—当然,你在本地代码里也能干同样的错事。
Osborn: 我认为另一个易混淆的地方,是理解C#在哪儿停止和公共运行时从哪儿开始。与它从公共运行时库得到的相比,C#语言自身的创新是什么?
Hejlsberg: 好的,我想这个混淆来源于这样一个事实—当人们谈论Java时,他们并不真的知道哪个是语言哪个是运行时。当人们谈论Java时,混淆就发生了。哪个语言哪个是运行时?当他们谈论Java时,他们到底指的是什么?Java,语言?Java,语法?还是Java,平台?人们把这些不同的方面混成一团。我们的方式表明我们想成为一个跨语言的平台。我们将创建一个平台,它允许你进行多语言编程,并且共享一套公共的API(应用编程接口)。让我们承认这一点,一些人喜欢用COBOL编程,一些人喜欢用Basic编程,一些人喜欢用C++,还有一些人将会喜欢用C#—我希望。但是,我们不会试图告诉你,忘记你曾经做过的所有的事情吧,我们不会说,“现在只有一种语言,在这个竞争中不会再有创新了”。我们说业界因为弹性而友好。Java是怎么来的?它的出现是因为在它前已经存在一些编程语言,而在它后也还将会出现一些编程语言。我们想打造一个平台,在此你可以偏爱某种语言但不会否定整个价值取向;我们想打造一个平台,它将是创新的。今天谁在帮助COBOL程序员?谁把他们带入WEB?只有在.NET平台上你才可以把富士通COBOL嵌入ASP页面。我的意思是,它真正是革命性的!
Osborn: 假定.NET平台上支持多语言,那为什么选择C#而不是Visual Basic、C++甚至COBOL?是什么使C#如此引人注目?
Hejlsberg: 首先,C#可以使我们从一张白纸开始。也就是说,我们没有任何向后兼容性的负担。这显然会使事情简化,无论从是从实现的立场还是从使用的立场都是这样。例如,在C#中,我们只有一类类型,并且总是被垃圾收集。而另一方面,受管制的C++有两套。因为它要保留非垃圾收集风格的编程。因此,在C#中,只需要你理解一些简单的概念。
语言是一个有趣的东西,它是一种口味;语言又是一件严肃的事情,它是程序员选择的一种生活方式。我是指,我们意识到我们不能走出来说,“这儿有个平台,你只可以使用一个基础语言。”即使在那个平台上用一种语言可以做所有的事情,人们还是可能不喜欢它的语法。他们可能喜欢大括号或者一些其它的程序块分界符。那是他们熟悉的。那是使他们感觉舒服并且富有生产力和能力的。我们对待C#的方式仅仅是为认为语言太复杂的C++程序员和认为丢失了一些C和C++语言特性的Java程序员提供一个可选物。我们寻求一个简化C++的方式并投入到一个多语言的平台中,它提供更大的互操作性,并且它提供完备的组件概念等等。
Goodhew:一件有趣的事情来自于我们对开发者跟踪调查,60%以上的职业开发人员使用两种或更多的语言去创建他们的应用。特别是当我们问他们都用哪些开发工具的时候,我们得到的答案是:没有哪一种开发语言将会是终结者并且所有程序员都会使用它。正如Anders早先所说,人们期望某种能够满足他们所做或他们所感的语法。这是一个个人选择。这也是整个.NET平台所关心的—提供给开发者一个语言实现选择。我想我们做了件漂亮的工作。你基本上可以在Visual Basic、.NET和C#中做同样的事情。Visual Basic对大多数程序员来说仍然是易接受的。C#则具有更多的活动空间并且比VB更富威力。
Osborn: 这意味着在C#中可用更少的声明实现更多?
Hejlsberg: 是的。意味着通过不安全代码,你可以得到更多的能力。
Osborn: 也就是说,不能在VB中写不安全代码?
Hejlsberg: 是的。不可以。
Goodhew: 但是,基本上,两种语言都可以做同样的事。和Visual Studio 6相比,这是一个根本性的改变。在Visual studio 6.0中,如果你想创建多线程的MTS对象,并且你是一个VB程序员,你就没招。你不得不用C++。现在,有了.NET框架,你可以使用任何一种你喜欢的语言。
Hejlsberg: 这就是我在一般会议谈话里说过的,.NET框架提供一致的编程模型。在语言和框架的进化过程中,我们一贯似乎都是把一种程序语言绑死在特定的API和特定的编程方式上。VB是快速应用开发工具;MFC(微软基础类)是子类化的方式;ASP则是把东西塞到Web页面中。在每一种情况下,你对编程模型的选择决定了你对程序语言和可使用的API的选择。每次当你变换框架时,它都增加了你学习新语言和API负担的工作量。我们真正努力统一这一切,我们提供一套API,一套支持可视化设计的工具,我们还提供一个可以任选一种适合你的语言的弹性。
Osborn: 我不知道这对那些使用象VBScript和Jscript脚本语言的有什么作用?
Hejlsberg: .NET框架下奇妙的事情之一是使脚本语言能够编译。看看ASP+,现在,实际上,在你的页面里运行的是真正编译的代码。它不是后绑定的、调度查找的—如果用户没有点击页面,你不会看到运行时错误。ASP+开发者可以使用Visual Basi.NET完整的威力而不是VBScript。并且第一次,他们可以使用Perl、Python和其它流行语言,如果他们这么选择的话。
Petrusha: 服务端的JavaScript现在也能被编译?
Hejlsberg: 没错。
Goodhew: .NET框架使得使用脚本语言就象用具有完全特性的语言一样,因为它们现在访问的是一个真正的编程框架并且访问的是同一基类API。你应该看看搞Jscript实现的伙计们都已经实现了什么。[编注:Jscript是微软对ECMA 262语言规范(ECMAScript 版本 3)的实现,只有一些很小的例外(为了保持向后的兼容性),Jscript是对ECMA标准的完整实现]。所以.NET平台提供了一个公共语言框架,对脚本写作者来说,具有极大的好处。
Osborn: 我们已经讨论关于Java、C++和脚本。在PDC[译注:(微软)职业开发者会议],我听很多人争论.NET IL(IL是微软中间语言,所有编译器都必须产生它以运行在.NET框架上)和运行于Java虚拟机中的Java字节码并没有什么不同。从你的谈话中,显然你并不同意这一点。你介意进一步评论它们之间的区别吗?
Hejlsberg: 好的。首先,IL的思想是一个很老的思想了。你可以追溯这个概念到UCSD Pascal p-machine(一个早期的个人计算机Pascal实现)或者Smalltalk。P-code曾被Basic和Visual Basic使用,Word的一个组成部件,内部使用p-code引擎,因为它更精简。所以,p-code并不是什么新东西。
参考文献编辑本段回目录
http://baike.baidu.com/view/119319.htm
http://www.chinavalue.net/wiki/showcontent.aspx?TitleID=233563&cid=228000
http://hi.baidu.com/zzqin/blog/item/0863a8dee352ef5acdbf1a59.html
http://www.mitbbs.cn/article_t/DotNet/24885548.html
http://www.linux-cn.com/html/program/aspnet/20070428/24856.html
http://blog.csdn.net/galen_wang/archive/2008/03/25/2217559.aspx
http://en.wikipedia.org/wiki/Anders_Hejlsberg