C#首席架构师Anders Hejlsberg访谈 (转贴1)

win32c 2003-01-12 04:17:45
C#首席架构师Anders Hejlsberg访谈  

John Osborn 著 荣耀 译

7月,O’Reilly编辑John Osborn参加了微软职业开发者会议。在此,他对著名的工程师、微软.Net框架C#语言首席架构师Anders Hejlsberg进行了采访。Anders Hejlsberg因设计PCs上最早的语言之一—Turbo Pascal而广为人知。他把Turbo Pascal许可给Borland公司,后又率队创建了Delphi—一个极为成功的可视化的client/server应用设计工具。访问时在座的还有微软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。很多语言都有我们感兴趣的相同的核心思想,比如深度面向对象、简化对象(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代码,可以做不安全的造型转换,可以抑制内存从而使其不会被意外地垃圾收集。

关于不安全代码有很多争论,人们似乎认为我们在吸毒或是在干什么别的坏事。我认为这是个误会。代码不会仅仅因为标记了“unsafe”就表示它不受管制。当然,我们不会扔出不安全的指针使人们容易受到从Internet下载的不安全代码的攻击。不安全代码被深深地约束在安全系统里。我们提供这样的弹性:1.呆在托管代码箱里完成工作而不会坠入深渊;2.转入一种不同的语言使用一种不同的编程模型编写本地代码。如果你停留在这个箱子里,我们会使代码更加安全,因为系统知道它要干什么。事实上,即使你编写不安全代码也并不意味着你离开了托管空间。因此,你的不安全代码会变得更能干。

Osborn:

请给我多讲一些在托管环境里处理不安全代码的机制。

Hejlsberg:

好的。描述托管执行环境比如Smalltalk、Java和.NET通用语言运行时一个重要特征是它们提供了垃圾收集机制。为了提供垃圾收集机制,至少要提供一个现代的垃圾收集器,一个“标记和清扫”垃圾收集器,比起传统非托管代码来说,你必须更多地了解正在执行的代码。为了找出要排除的死对象,你必须能遍历堆栈,找到所有活动的根,并指出哪些对象是活动的哪些是不再被访问的。然而,为了能够达到这个目标,你必须和你执行的代码紧密协作。代码要具有更好的描述性。它要告诉你它是怎么分布在堆栈里的,它的局部变量在什么地方等等。

当你在C#中编写不安全代码时,你可以做不是类型安全的事,比如指针操作。当然,标记为unsafe的代码并非绝对执行在不可信任的环境里。为了使之执行,你必须授予信任,否则,代码将不会执行。从这一点来看,和其它本地代码并无区别,真正的区别是它们仍然运行在托管空间里。你编写的方法有一个描述表,它告诉你哪些对象是活动的,因此,不管什么时候你进入这些代码,你都不必跨越列集边界(marshalling boundary)。否则,当你进入非描述性的、非托管代码(比如通过Java本地接口),你不得不在堆栈上设置一个水印或设立一个屏障。你必须重新列集所有箱子外的引数(arguments)。一旦开始使用对象,你必须对你触及的东西小心翼翼,因为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#中,我们只有一种class,并且总是被垃圾收
...全文
194 3 打赏 收藏 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
mgspeed 2003-01-16
  • 打赏
  • 举报
回复
up
benbencatrabbit 2003-01-12
  • 打赏
  • 举报
回复
up
mouseanAnya 2003-01-12
  • 打赏
  • 举报
回复
MARK!
内容概要:本文围绕基于电感电容电流环PI与前馈补偿矩阵构造的跟网型储能变流器,开展dq坐标系下的阻抗理论建模与Simulink仿真对比研究。通过建立储能变流器在dq域的数学模型,设计包含电感电流内环、电容电流中间环和电压外环的多环控制结构,并引入前馈补偿矩阵以提升系统的动态响应能力和稳定性。在此基础上,采用小信号分析法推导系统的输出阻抗模型,构建完整的dq域阻抗理论框架,并利用Simulink平台搭建高保真仿真模型进行频域扫频验证,实现理论建模与仿真结果的精确对比,深入分析控制参数对系统阻抗特性的影响规律,揭示其在抑制并网系统振荡、提升稳定性方面的关键作用,为新能源并网系统的稳定性分析与优化设计提供坚实的理论支撑和技术路径。; 适合人群:具备电力电子、自动控制理论基础,从事新能源发电、储能系统、微电网或电力系统稳定性研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①掌握跟网型储能变流器在dq域的阻抗建模方法;②理解多环控制与前馈补偿对系统阻抗特性的影响机制;③实现理论阻抗模型与Simulink仿真扫频结果的对比验证,支撑并网稳定性分析。; 阅读建议:学习者应结合控制理论与电力电子变换器知识,重点关注数学推导与仿真建模的一致性,建议动手复现Simulink仿真模型并进行参数敏感性分析,以深化对阻抗重塑机理的理解。
内容概要:本文介绍了基于Matlab实现的基本雷达与干扰机仿真系统,旨在通过代码实践帮助读者深入理解雷达系统的工作原理及其在复杂电磁环境中与干扰机的相互作用机制。内容涵盖雷达信号的发射、传播、目标回波接收、微多普勒效应建模、干扰信号的生成与影响分析等关键环节,结合具体的Matlab代码实现了完整的仿真流程,并提供了详尽的结果可视化与性能评估,重点展示了目标探测、时频特征提取、干扰抑制策略等关键技术的实现方法,有助于掌握雷达系统动态特性与抗干扰能力的分析手段。; 适合人群:具备一定Matlab编程基础,对雷达系统、信号处理、电子对抗或通信工程等领域感兴趣的高校学生、科研人员及工程技术人员。; 使用场景及目标:①学习雷达系统的基本构成与工作流程;②掌握雷达回波信号与典型干扰信号(如噪声干扰、欺骗干扰)的数学建模方法;③通过Matlab仿真深入理解微多普勒特征、时频分析技术(如STFT、小波变换)及干扰抑制算法;④为开展雷达目标识别、抗干扰算法设计或电子战系统仿真等前沿研究奠定实践基础。; 阅读建议:建议读者结合提供的Matlab代码逐段运行并调试,重点关注雷达信号模型、目标运动建模、干扰生成模块及信号处理流程,配合文中仿真结果进行对比分析;同时可延伸学习现代信号处理技术如压缩感知、机器学习在雷达中的应用,以提升综合科研与工程实践能力。
基于星形耦合自均流机制的双三相LLC变换器变频调压与多模式切换控制策略研究(Simulink仿真实现)内容概要:本文研究了一种基于星形耦合自均流机制的双三相LLC变换器,重点探讨其变频调压与多模式切换控制策略,并通过Simulink进行仿真实现。该研究旨在解决双三相LLC变换器在不同工作模式下电流不均衡、电压调节不稳定等问题,通过引入星形耦合结构实现自动均流,提升系统效率与可靠性。文中详细分析了变频控制对谐振变换器输出电压的调节机理,设计了多模式平滑切换策略以适应负载变化,确保系统在轻载、重载及瞬态工况下的高效稳定运行。同时,建立了完整的Simulink仿真模型,验证了所提控制策略在动态响应、稳态精度和抗干扰能力方面的优越性。; 适合人群:从事电力电子与电力传动、新能源变换技术及相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①用于高效率、高可靠性的直流电源系统设计,如电动汽车充电、数据中心供电等;②为多相LLC谐振变换器的均流控制与模式切换提供理论支持和技术方案;③适用于需要高性能电源变换器的工业应用场景,推动先进控制策略在实际系统中的落地应用。; 阅读建议:读者应具备一定的电力电子电路与控制系统基础知识,建议结合Simulink仿真模型同步学习,深入理解控制逻辑的设计细节与参数整定方法,并可通过修改仿真参数验证不同工况下的系统性能,以增强实践理解和创新能力。

7,776

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧