`
ruilin215
  • 浏览: 1147561 次
  • 性别: Icon_minigender_2
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

微软架构师谈编程语言发展(一)

阅读更多
本文是对微软Channel 9中采访几个语言大牛的视频的翻译。
名字为Anders Hejlsberg, Herb Sutter, Erik Meijer, Brian Beckman: Software Composability and the Future of Languages
大家可以找来看看。
个人感觉这些大牛高屋建瓴,有点有面地谈到了多个语言的发展和语言的相互关系,对于我们开拓视野非常有帮助。由于只能靠听来翻译,篇幅又长,只能分段(估计有4-5段)慢慢来。而且,水平所限,难免错误,请大家指正。
微软架构师谈编程语言发展(一)
译者:程化
Charles:好的。今天我们请到了微软设计编程语言的大师们。请你们介绍一下自己。
(译者注:Channel 9的主持人,从其对话来看,应该是编程出身,对于程序有很好的理解)
Herb:我是Herb Sutter,我是VC++小组的架构师。
(译者注:C++标准委员会,Exceptional C++系列的作者,C++领域的大牛人)
Erik:Erik Meijer,我在VB以及C#小组工作。
(译者注:先是SQL Server组的架构师,现为VB、C#组的架构师,从事把CLR、关系数据库、XML数据合为一体的伟大事业)
Brian:我是Brian Beckman,和Erik Meijer一起工作。呵呵
(译者注:物理学家,天体物理为主,业余时间写程序,包括编译器,自称来自从事影视娱乐业的家族,家里以其从事科学研究为奇)
Anders:我是Anders Hejlsberg,我的技术领域是C#。
(译者注:微软的“技术小子”,公认的牛人,C#的主要设计者,.NET框架的重要参与者。微软之前,Anders是Borland的工程师,Turbo PASCAL的主要开发人员,Delphi的首席架构师)
Charles:我们今天访谈主要讨论两个相关的论题:可组合性(Composability)与编程语言。作为程序员,当我们构造系统时,总是要面对这两个问题。你们是创设语法,搭建架构的人。所以,我想讨论的一点是,你们是如何协调工作的?三个语言——C#、VB和C++,都在演进,同时又服务于不同的目的,C++更多服务于系统级,C#和VB更多偏向应用层面。而且,语言在不断创新(译者注:谢谢ponda的修正)。这一切是如何形成的?你们一起工作吗?你们是如何决定语言的创新的(译者注:谢谢ponda的修正)?你们是一起设计,还是想到什么后再与他人共享?很抱歉提这样的怪问题,请试着回答。
Anders:我想,你说的两种情况都存在吧。事实上,早在我们做LINQ之前,Erik就在Comega项目做了很多工作了。在LINQ和Omega之间有很多相似之处,有很多互相影响的部分。我们一直在讨论相关的问题。而且,Erik实际也在C#设计组中,所以,我们总是就当前的工作及时交换意见。VB组和C++组的人也在一幢楼里工作,大家经常碰到一起。所以,我认为这一切是相互渗透,以及不断聊天的结果。
Charles:但是我的意思是,你们是否也象最终用户一样对自己做出区分?比如,有的事情在VB中能做,C#中就做不了。比如,对于VB来说,完全的晚绑定以非常简单的方式实现了,而C#中就没有晚绑定。为什么VB和C#有这样的不同?你们有意如此的吗?
Anders:我认为这个问题更多的是历史原因。我想说的是,我们必须考虑历史因素,尤其当你讨论VB时更是如此。VB有其悠久而丰富的历史,从一开始,VB就作为晚绑定的语言出现。(开始时)VB没有任何类型。很显然,晚绑定对于VB来说有某种核心作用。但是,从那时开始,VB已经逐步演进为一种更为“强类型”的语言,到现在,甚至你可以把VB看作一种支持晚绑定的强类型语言。呵呵。但实际上,这个过程是相反的。C#从一开始就是强类型语言,而且直到现在,我们都坚持早绑定。这并不是说我们在未来也不会支持晚绑定,但是,我们很可能以不同于VB的方式支持,而且可能对晚绑定的方式做些改进。C#是否支持晚绑定其实只是一种选择。对于老式的弱类型对象模型来说,比如OLE,如果我们从晚绑定角度出发,会比从早绑定角度出发好讨论得多,因为这种对象模型无非就是对象的若干方法的交互,反射,等等。
Charles:这些东西完全可以靠底层帮你完成……
Anders:是的,对,非常正确!
Herb:语言之间的差异在一定程度上是由用户引起的。对于靠近底层编程的C和C++程序员来说,性能永远都是一个核心和主要的问题。你可能发现不同语言有不同的特性,但是,更经常的是,你会发现这些不同特性想要解决的都是同一类的问题,比如,“并行执行”。现在,没有谁能够忽视这个问题,并且,一种语言如果想在未来5到10年保留在主流编程语言的队伍中,这个问题就是无法忽视的,因为这是硬件的发展方向。我们正处于一个新的时代,50年以来,我们首次在非单核的机器上工作。任何人都无法忽视这个现象。因此,就这个问题来说,大家都要处理一些相似的东西,但是,处理方式、语法可能不同,具体的特性也可能不尽相同。我也相信,不同语言推出同一特性的时间先后顺序也不相同,因为不同语言针对不同的客户群体服务,客户要求的东西不一样,因此,对于特性处理的时间先后顺序并不一致。就像Anders说的,各种情况都有一些。
Erik:是这样的。对VB和C#有怎样的差异,我可以给出一个具体的例子。该例子是“无名函数(或‘lambda表达式’)”。我们想在VB中也加入这种功能。首先就是寻找正确的语法。我们向VB项目组要到了VB的名称表,名称表中的名字支持两种语法的都有(VB和C#)。但是,这次他们想要更像关键字的名字,而不是C#那样长长的名字,因为他们觉得像关键字的名字更加“VB化”一些。这里你看到的就是语法上的区别。但是,在语义上也是有区别的。当你查看一个大函数内部的,嵌套很深的结构,比如“for”循环的时候,语言是何时、如何处理变量捕获,如何进行实例保护的就非常不同。在C#中,每次循环时实例都被保护,而在VB中,象JavaScript那样,变量是被隐性提升到函数顶部的。所以,在变量捕获方面,语义上的区别也存在。有时这些区别是极其细微的,你必须写非常变态的程序才能看到这些区别。
Anders:每次你写出依赖这样的特性的程序时,我们就能找出成百的Bug。呵呵
Erik:是啊是啊。
Brian:你逃不出作战室的
(译者注:微软的“作战室”,是产品、程序、测试人员一起对需求、找Bug之所在。)
Charles:这样看来,大家都同意不同语言在相互影响,不断演进。对于VB和C#来说,你们有相同的核心——处理引擎,你们必须在CLR的基础上出发,随着CLR的演进而演进。很显然,C++属于另一个世界。但是,各种语言要互相影响,你们必须在C#中加点什么来吸引用户,让他们用C#而不是VB.NET,是吧?应该不止是语法的区别,语言中必须还有一些核心的东西来吸引用户。
Herb:我认为你说的是对的。但是,我不同意你提出的理由,说我们必须在各自的语言中加点什么特性吸引用户,从而使他们不去使用其他的微软的语言。为什么呢?比如我吧,我更加关心使用C++或者C#的用户到底需要什么,我怎样才能帮助他们把工作完成得更好。也许某处有某种很牛的特性的语言,但我的工作是——怎样才能使客户的工作更成功?我必须要考虑客户会如何集成,我怎样做才能使客户工作得更好,这也是CLR的核心所在,因为目前已经不是靠一种语言就能做完整个项目的时代了。我怀疑在稍有点规模的实际项目中,是否还有人仅仅依靠一种开发语言。一般说来,你用脚本语言写点东西,其他语言写工具和组件,系统语言写核心的东西。你不停地在做集成。这就带来了我们所讨论的“可组合性”的问题。因为“可组合性”本质上就是跨语言产生的问题。当你写Web浏览器时,你不知道某个插件是用C#,C++,某种CLR扩展,还是其他什么写的。不管如何,这些东西必须一起工作,这就是主要挑战之所在。因为,要想使这种“可组合性”成为现实,我们必须时时将CLR和CLR以外的东西当作白盒来考虑。但是,我们这样做的时候又会碰到“锁”的问题。“并行执行”已经越来越重要了,但是,“锁”是完全不具备组合性的。因此,这是“可组合性”面对的主要障碍。我实际上已经转移到另一个话题上了。总之,对我而言,这更多的是一个语言交互的问题,而非语言竞争的问题。
Brian:我插句嘴。我在一定程度上代表了用户。我是个物理学家,同时,我也经常写点小程序,进行模拟和仿真,解决一些数学问题。要想成功,“可组合性”对我的来说是绝对地重要。我可以不在乎编程语言,但是我很在乎该语言是否有我所需要的组件。我有点夸张了,因为我其实还是在乎编程语言的,呵呵。基本上,我十分愿意使用任何能使我的工作更简单的编程语言。
这里,我先戴上顶“老人”帽,谈谈这个世界的历史上,非常少的成功软件之一——数值计算库(译者注:谢谢drdirac的修正)。这些东西是N年以前用FORTRAN写的。几十年以来,人们用这些库解决了许多非常重要的科学问题。任何头脑正常的人都不会想坐下来从头写一个“线性代数包”(译者注:谢谢drdirac的修正)或者类似的东西。有许多数学家终其一生在完善这些软件包。我们需要的是“互操作性”。不简单的是互操作性,我们需要的是“可组合性”。所有人都知道,FORTRAN不支持递归,因为所有的变量都是引用传递。这就带来了包之间接口问题。如果你想要集成某种自身内部不支持集成的东西,你就不能再需要集成的两边使用这样同一个包用于集成,这行不通。呃,我已经忘了最开始我在说啥了,哈哈,我尽讲些物理小故事了。让我回到C++、C#和VB上。这些语言我都要使用,我更喜欢C#一些,因为我喜欢它的操作符重载。为什么我喜欢操作符重载?因为我做数学计算,类似于四元数和八元数(译者注:谢谢pongba的修正)的奇怪线代运算,用一个小加号就能够代表那些要进行的一大堆计算。
Erik:伙计,也许你想用的是模板?哈哈。
Brian:(译者注:看样子生怕别人认为自己不知道模板)不,我才不想用模板呢。只要我一用模板,我就会开始想:喔,模板的预处理器是图灵完备的(译者注:谢谢drdirac的修正),也许我可以仅用(模板)就实现出一个链表处理库来(译者注:谢谢pongba的修正)……很快,我就会偏离真正的数学思考。在应用程序绝对需要晚绑定的场合(比如,那些小的计算模拟器什么的,晚绑定是成功的关键),此时,很自然地,我会选择VB。至于C++,天哪,大多数时候,C++用来实现其他的语言,做这类事C++很拿手。在用于科学的环境下,我多次实现过Scheme(译者注:谢谢drdirac的修正)。
总而言之,我就是泛泛谈谈“可组合性”。
Anders:如果你回过头去看看十年之前,会发觉潮流已经逐渐变化了。当我开始编程生涯时,进入编程这行的学习曲线就是:学习要使用的编程语言本身。各个编程语言几乎在每个方面都不相同。语法是你要学习的很大一部分。这是以前的事了。现在,你要学习巨大的框架,这个框架正越变越大,语法只是顶上的一小颗樱桃。我认为我们在这方面确实前进了很多。很有趣的是,编程语言就像你的眼镜一样,所有的东西根据编程语言的不同,要么看着是玫瑰色的,要么是紫色的,如此等等。但是,实际上起作用的东西是学习所有的API,学习你所基于的,越来越大的平台或者框架。如今,学习曲线的90%都耗费在这上面。掌握了这些,你就可以在C++、C#或者VB.NET什么的之间,毫不费力地进行语言转换,将部分项目使用这种语言,部分项目使用那种,并且找出组合这些语言的解决方案。相对于以前,实际上是不久之前,这是个主要的进步。当然,这些能出现,是由于有了通用的类型系统,以及各种语言中的那些抽象。每种语言之间的差别则是细微的,而且这些差别说不上来有什么特别的理由。
分享到:
评论

相关推荐

    微软架构师谈编程语言发展

    ### 微软架构师谈编程语言发展 #### 关键知识点概览 1. **编程语言发展的多维度考量** - **历史背景**:每种语言都有其独特的历史发展轨迹,如VB从弱类型语言逐渐过渡到强类型语言,而C#自诞生以来即定位为强类型...

    微软软件架构师的修炼之道

    1. 技术深度:掌握至少一种或多种编程语言,如C#、Java、Python,并深入理解微软的技术栈,包括.NET框架、Azure服务、Power Platform等。 2. 系统设计:学习如何设计高可用、高性能、可伸缩的系统,包括负载均衡、...

    09年微软架构师Web Service PPT讲义

    【标题】"09年微软架构师Web Service PPT讲义"揭示了当年微软对于Web Service技术的深度理解和实践指导,这是一份由微软架构师精心编排的培训材料,旨在帮助开发者和IT专业人士理解并掌握Web Service的核心概念、...

    架构师培训教材[整理].pdf

    - C#:微软公司开发的一种面向对象的高级编程语言,是.NET平台的一部分。 - BASIC:初学者通用符号指令代码,是一种简单的编程语言。 - Pascal:一种早期的编程语言,用以教授编程基础。 - Smalltalk:一种面向对象...

    人人都是架构师

    《人人都是架构师》这个主题,暗示了在IT行业中,每个开发者都有可能通过学习和实践提升自己,成长为一名优秀的架构师。在这个过程中,.NET和C#是两个关键的技术栈,它们在构建复杂系统和软件架构中扮演着重要角色。...

    TypeScript 微软脚本编程语言.rar

    TypeScript的作者是安德斯·海尔斯伯格,C#的首席架构师。 [4] 它是开源和跨平台的编程语言。它是JavaScript的一个超集,而且本质上向这个语言添加了可选的静态类型和基于类的面向对象编程。 [4-7] TypeScript扩展了...

    微软架构资料 asp.net

    对比J2EE和.NET Framework,虽然Java是一种语言,但发展成为了一个跨平台的解决方案,而.NET则是一个支持多语言的框架。.NET Framework的开放性体现在它甚至支持Java的衍生物——Visual J# .NET,这展示了.NET平台的...

    人人都是架构师_《0528》.rar

    2. **C#语言基础**:C#是一种面向对象的编程语言,由微软开发,广泛用于Windows平台和.NET框架。掌握类、对象、接口、继承、多态等核心概念是必要的。 3. **.NET Framework**:这是C#编程的基础平台,包括类库、...

    .net进阶书籍_人人都是架构师.rar

    《.NET进阶书籍_人人都是架构师》这个压缩包文件显然聚焦于.NET技术栈的高级主题,特别是针对C#编程语言的学习与实践,旨在帮助开发者提升至架构师的层次。这里,我们将深入探讨.NET框架、C#语言特性和软件架构设计...

    高级Shell脚本编程.zip

    Shell脚本编程是Linux/Unix系统中的重要技能,它是一种用于自动化任务、管理系统和实现批处理操作的脚本语言。在Linux环境中,Bash(Bourne-Again SHell)是最常用的Shell,它扩展了原始的Bourne Shell功能,并且在...

    架构师关键词

    以上这些概念构成了架构师的词汇表,理解和熟练运用这些知识对于成为一名优秀的架构师至关重要。在实际工作中,架构师需要根据具体业务需求,选择和整合这些工具和方法,构建高效、可扩展和适应性强的系统。

    .net经典书籍_人人都是架构师__0525).rar

    《人人都是架构师》是一本深入探讨.NET技术体系和软件架构设计的书籍,它主要针对C#编程语言的开发者和对软件架构有兴趣的IT从业者。这本书籍旨在提升读者的.NET开发技能,帮助他们理解并实践架构设计的核心理念,...

    人人都是架构师(0520_).rar

    《人人都是架构师(0520_)》这个压缩包文件显然聚焦于IT行业的软件架构设计,特别是与C#编程语言相关的主题。架构师在IT领域中扮演着至关重要的角色,他们负责设计和规划复杂的软件系统,确保其高效、可扩展、可维护...

    编程大师访谈录1

    查尔斯·西蒙尼,作为匈牙利程序员、软件工程师,同时也是微软的前首席架构师,他的访谈向我们展示了他对程序设计语言和软件开发流程的独到见解。他所倡导的“意义编程”理论,鼓励人们用更自然的语言来编程,这种...

    RAD10.2 Release 3 架构师安装破解指导,官方下载+网盘 不看后悔

    Delphi 是一款著名的面向对象的 Pascal 编程语言,以其高效的代码生成和丰富的组件库而闻名。在本指南中,我们将涵盖官方下载、安装过程、可能遇到的问题以及破解步骤。 首先,确保从官方渠道或者可靠的网盘下载 ...

    《架构师》电子月刊2010年10月刊PDF电子书

    从给定的文件信息中,我们可以提炼出一...通过上述内容,我们可以看到2010年左右的IT行业动态,涉及移动开发、企业战略、软件工程、云计算、开源项目、编程语言、Web技术等多个领域,体现了当时技术发展的趋势和热点。

    软件架构师培训基础教程

    ### 软件架构师培训基础教程核心知识点详解 #### 一、软件架构的重要性与基础知识 **重要性:** - **稳定性和扩展性:** 一个良好的软件架构能够确保系统的稳定性,同时也支持未来的功能扩展。 - **伸缩性和适应性...

Global site tag (gtag.js) - Google Analytics