微软公司C大师StanLippman演讲.doc_第1页
微软公司C大师StanLippman演讲.doc_第2页
微软公司C大师StanLippman演讲.doc_第3页
微软公司C大师StanLippman演讲.doc_第4页
微软公司C大师StanLippman演讲.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

图为:微软公司C+大师Stan Lippman演讲(骆磊 摄)点击此处查看全部科技图片图为:微软公司C+大师Stan Lippman演讲(骆磊 摄)点击此处查看全部科技图片新浪科技讯 9月17日微软中国技术教育大会(TechEd 2004)在北京国际会议中心隆重举行。本届大会以“集成创新”为主题,全面展示世界领先的IT技术和IT系统建设方案。图为:微软公司C+大师Stan Lippman演讲(骆磊 摄)以下为其演讲和对话全文:翻译:今天我们非常容幸地请到了世界非常著名的CStan Lippman先生。从事软件开发者都知道他的经验,Stan Lippman先生从1985年到1994年在美国的贝尔实验室工作,和C的创始人一起从事C语言的开发。写了一本C语言的入门书,这本书成了世界上千千万万从事C语言程序编写的启蒙教程。在我们软件开发、陈长的过程中都从这本教材中受益匪浅。作为世界软件开发的一个鼻祖,我们非常高兴在微软技术大会请到他来到中国给我们讲课。从1985年到1994年Lippman先生在贝尔实验室,在1994年到了迪斯尼卡通片剧组部以及梦幻工作室,为这两个公司提供技术支持,还在加利弗尼亚喷气动力工作室,2000年加入微软,现在从事C语言及所有下一步语言的开发做指导。他不远万里从美国来到这里跟大家做演示非常难得。网络通讯使得世界如此之小,来自世界各地的人都可以方便地进行交流,象征着现代技术的发展。下面请大家用热烈的掌声欢迎Stan Lippman先生。Stan Lippman(翻译):就像你们看到这个讲台上有两个人说话,这轮讲座其实包含了两部分。第一部分,就是看图画,这个图画可能要有一千个字来形容。首先你们看到,这个图版就代替了过去静态C,它是静态的,是事先被画好的。你们看到的这些上面跑动的壁虎,代表了动态,即微软现在开发的.NET,是动态的,这个静态的图画和动态的壁虎正好形成了对比的作用。对C语言进一步的伸展在C语言上怎么样在.NET平台上做进一步的开发,就要对C做所谓增进,增进过程带来了很多的困难。怎样从一维空间成像变成动态的?这就是我接下来要讲的。C是多种形式的编程语言,不像只支持单层面的编程方式,而是支持多层面编程方式。正是因为同时支持多层面编程方式,使得学习C非常复杂。C第一代开发是84、84年,首先要支持传统过程式或者渐进式的编程,即将这些在C中有所体现。在1988年C语言工作创造者不断升级C的能力,具有了所谓多层能力,同时还支持普通编程模板,C语言的功能不断增加。Generic Programming在1991年加入进来,并增加了模板能力。在1998年之前相当长的时间里,C发展局限在怎样使C逐渐稳定在按照各种定制的语言标准的工作范围内。现在使用的微软Visual的一些版本就是使用上面一些功能。在2005VisualC版本就增加了动态的能力。我把今天要讲的内容做个概述,首先给大家解释一下最新C语言生成的内容,以及如何让编程人员使用传统的C方式使用CLI。在CLI加上了一些新的功能,讲到了终极函数带来的功能,在.NET平台上,C语言可以使你达到这因的功能。最后讲一下所有对C语言的改动和变动以及增加的功能并不是微软一个公司所增加的独特的功能,这些增加符合国际编程语言的标准,ECMA是世界上制定标准的部门,对C/CLI是支持的,所以这是世界性通用的语言,并不仅仅是微软的一项技术。刚才你们所看到的这些简单的图画所表示的意思下面我用文字来给大家做解释。如果你想制定一个DataT,在传统的C语言到底做什么样的事?传统C语言如何让人制定新的T。在传统C语言,当你运行一个数据的时候,首先C在运行的时候,资源的限定首先是静态的,在运行的时候不能变。所谓可预测性,就是要你在运行之前就要预测到可能发生的衡量,因为定好了数据在运行过程中就不能变。从这个意义上来讲,严格来说C语言并不见得支持所谓面向对象,因为当你面对了一个对象的时候,要用一个d才能突破一个固定的局限。正因为如此,运行的时候,你所面对的对象,带有什么样的信息在运行的时候你并不能拿到太多的信息,唯一可以拿到一个指针,其他的信息都不知道,这是传统C的局限性。在.NET的范围之内,如上面所讲的,也受到这个局限性的影响。在CLI的编程模式里,这个T代表所谓的句柄,和老式的C一个固定的存储相比较是不一样的。这个句柄所指向对象的时候还可以移动,可以track。一个对象在运行的时候去了什么地方,有什么样的变化,可以追踪。现在对编程人员来讲是透明式的。任何一个对象所谓的句柄在内存中是指向不通的对象,通过内存的镜向可以指向同一个对象。这个对象所谓的地址在内存中是非固定的,最后要去到什么地方,内存最后是否会回到,在这个过程中发生什么编程人员并不知道,也不需要知道。任何想要创作的对象,对象里所有种类的信息,保证在运行的时候一直跟着运行对象跑,这个时候可以把有关运行对象的信息调出来,而这些在传统C中是做不到的。刚才所描述的传统的C编程模式和新模式好象是完全矛盾的,所以在设计新C模式就是要考虑如何处理这样的矛盾,以达到希望达到的功能。也许在座的各位想要批评我,我做的设计可能存在问题,在您批评之前,我们一起来进行设计、开发。我将C语言当初完善的思路、讨论跟大家分享,以及在C语言功能的增加上做出的选择的过程。那么如何把C动态和静态的功能合并起来?有三种选择,第一就是什么都不做,让软件开发者选择了种类,接下来什么都不用管。就是说在编程的时候不用做任何改动,完全是透明式的,让C语言的合作伙伴来解决后面所有的细节,这可能是第一个很自然的选择。第二个选择在试图解决这样问题的时候,很多人说把编程用语言来解决,所以很多用户是用语言来解决编程问题。第三是在已有的C语言加新的标记,在编程序的时候就要使用稍微不同的标记,用新的不同的标记来代表新的功能,这是第三个选择。不管你是做哪种选择,作为设计师来讲要非常小心,因为世界上有很多人包括做C编程的人并不见得对微软友好,如果做错了可能造成对微软的攻击,所以这是需要小心的。设计一个语言的第二个定义指在编程语言设计过程中,任何语言做一件事所用的信号应该是一种类型,做不同的事会不同类型,这样避免造成混乱,这是我做编程时要遵守。所以我们反复问自己一个问题,就是我们怎样在语言上增加新功能的同时保证传统C语言使用者在使用传统C语言基础上,能够理解并使用新C语言的功能。经过很多考虑以及内部的辩论之后,最后解决刚刚讲的三个选择中的第一项选择是不可取的。采用透明方式,让所有编程人员都用老式编程方法,时而代表老的意思,时而代表新的意思,会带来很大的混乱,在信息方面也会带来很大的问题,因此第一种选择被摒弃了。第二种选择,使用Library有相当一部分是有这个取向,在贝尔实验室,很多办法都是用Library方式解决的。在C语言推行的时候,早期在业界引起很大的轰动,很多人在使用过程中不断希望增加C的功能,C语言的创始者认为这样不对,因为会使C语言过于复杂,所以加了Library的功能。最后决定什么样的功能是语言本身的功能?是语言本身的功能还是外部Library?最后做选择,都是看加进去的东西是否是C语言本身最需要的,还是只是为这个语言提供外部功能,以此为标准进行选择。刚开始这样开发的时候,我还要花时间说服其他的同事,我们不应该采用库的方法,要用库的方法加速推动在.NET动态的东西是不对的。在真正做开发之前,我意识到非常重要的一点,新增功能要让使用者感觉到就像C语言以前增加的“面向对象”功能一样。在这个语言上所做的变化,当语言软件开发使用时,能感觉到这是一个精致的设置,是经过深思熟虑的设计思考,而不是一个非常粗糙的东西。同时因为它是C语言的那部分,很重要的是要提供其他语言所没有的东西。因为C被广泛使用,要改动会影响到很多人,所以加进去的东西必须要是它以前所没有的,不能提供的。对于我来说这是非常重要的工作,做得好可以使C语言继续成为一个大家喜爱使用的有效率的工具,如果做不好就可能造成C语言彻底消亡。给大家举个很简单的例子,把C语言在新的动态方面做的改动给大家做个介绍,通过介绍告诉大家,这个语言是怎么改变的。改动首先要考虑在使用时当你社定一个新的类,你在使用的时候跟使用传统的类感觉应该是差不多的,让大家有熟悉感。所有软件开发工作者都要明确意识到,我们使用的新功能和老功能是不一样的,但又在熟悉的类的范围内,不仅有新的功能,与传统的C又有相似的地方。所以就采取了与老式C语言面向用户时差不多的方式,大家可以看到,这两行编码,在老吗的编码中可以看到这两行命令代码,你用gcnew和传统的new是很相近的,将原来的星号变为上尖角。在运行的时候内部资源被结束后,新的功能就用gc代表,根据运行的含义,很容易记住。在.NET范围内,可以把传统式的代码和新的代码可以联起来使用,因为两种代码的标注不一样。从其他的例子中大家可以看到在新的CCLI中,上面是新的制式,下面是老的制式,跟老式的非常接近,用不同的符号代表。而新的制式完全是动态的,在.NET范围内可以进行良好的运行,可以使C使用更方便,又不是完全脱离原有的标记。动态的过程中平台要能追踪,这个符号代表对所面对的对象都有动态的功能。比如在使用的时候,上面T的种类是带分号的,这是一个使用的类,在使用的过程中它有函数功能,你可以掉它的函数,调函数的时候T建号,P是它的功能,所以使用起来跟老的C语言很相似,容易过渡。除了对不同类的设定支持以外,我作为语言的开发者意识到光有这些是不够的,还要语言在运作时对联系到的索引和功能也要支持,即运行行为在工作中也要对它进行动态的支持。比如大家看到destructor,因为是运行时的功能,所以动态也要进行支持。在运行的时候,如果是面向一个种类,最后运行的时候就放在一个专门的资源点,在运行的驱动器里(gcnew)在结束的时候把所需要的函数一个个启动,就保证在内存中垃圾收集的工作可以很好地完成。语言的设计过程中,翻成中文叫“最后终结”,但“最后终结”在何时执行,语言本身并没有明确的设定。这就是CCLI里代表的意思,最后终结是以不是事先确定的。非固定性的最后终结过程,在动态的环境中是非常好,在资源过程中如何把资源回收还给系统起到很好的作用。这在C是非常重要的资源,在这方面的管理有很重要的特色,比如资源把数据库连接起来,在使用过程中也有自己特别的地方。在这种情况下,使用的资源在程序一旦用完后就要释放。在.NET采用的方式就是有一个最后释放的过程。但问题是最后的释放功能还需要进行专门的启动。C的改变希望将它变成自动的。下面给大家介绍如何用两个步骤使其变为自动化。第一个是从释放函数里集成下来,保证你的释放函数被准时地呼叫。第二个步就是说整个对象的时间和生命周期可以由你决定何时来释放。首先你释放的函数要确定被启动了,最后一项工作是完成的。这面是新的C/CLI的种类,在新的CLI中,以前的C也可以使用,黄色标出的是改变的部分,使得传统C语言在.NET动态环境中可以继续得以使用。如果已掌握了C编程能力,这也是可以让你继续使用C编程的唯一方法。这是C2005版,总结刚才的讲座。第一C/CLI保证它的类与以前传统的类是相同的,有些功能不够的,有些人使用别的语言来弥补。第二点变化,就是增加了一个新的layer of additional的功能,使得C语言得到加强。未来的工作使得动态语言功能可以非常紧密地整合起来,传统语言定义的对象可以使用,反过来也一样,下一步语言可以进一步增强。C2005包含的功能实际上是在.NET环境中进行高功能编程语言一个非常自然的选择。还有一点,刚才讲的C/CLI并不是跟其他的语言竞争,所以这些语言共同形成了.NET环境上一整套的大家可以交换使用的编程语言。我们认为Visual Studio2005这个版本,是目前C在.NET环境下非常好的选择。下面是提问时间,Stan Lippman带来了一些签名书作为礼物送给大家。提问:我是开发Windows Mobile应用的,我想问一下如何应用C/CLI开发Windows Mobile应用?C当代的语言是否已是一个新的语言了?是否传统的C已经死了?有人说将来C会在Mobile方面,非托管的C跟JAVA比起来有优势吗?Stan Lippman(翻译):首先是.NET这个平台本身也是对移动工具的开发,它是一个很自然的选择。beta(?)试用版里已经有,希望在第二版的时候把所有功能加进去。我把你的第二个问题反过来问你一下,如果你现在正在手术台上做一个心脏手术,你的命运跟这个手术是有直接相关的,你会不会把心脏舍去用.NET?在你对这个问题做一个肯定回答之前,传统式的C继续有其存在的价值。提问:现在具有CLI特征的编程对模板的支持与以前C的范型是否有很大的区别?Stan Lippman(翻译):传统的C进一步增长,上面加了新的应用。这样Visual Studio2005版本的C原来的C功能全部在,在的基础上加了新的功能。如果你是用2005版C的结果汇编,出来的结果和原来使用的C一样,不同的是新的C/CLI除了传统功能之外把.NET功能也整合在一起。提问:既然是对C语言进行新的扩充,在面向对象方面进行扩充,是否会在AOP方面做进一步的支持?Stan Lippman(翻译):AOP并不是一个得到证实的技术,它的未来不知道怎样。C和AOP不是一个技术。您讲的也许是

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论