您的位置:首页 > 编程语言 > C语言/C++

2005年C++软件技术大会第一天

2005-11-20 00:34 323 查看
今天是C++软件技术大会的第一天,上午的主讲人是Bjarne Stroustrup,topic是关于C++新标准C++0X制订的一些情况。Bjarne用了4个词来描述标准制订的过程: 正式(formal)、缓慢(slow)、官僚主义(bureaucratic)、民主(democratic)。另外,那个X预计是9,所以如果进度正常的话下一代标准应该是2009年推出。
下午由科泰世纪的陈榕讲述他们公司推出的一种二进制级组件编程模型——Elastos。这位老兄典型的北方人,那一张嘴可真能白活,一场演讲下来软件界的不少名人都被他涮了一回。不过吹归吹,他说的那东西还真挺有意思。演讲开始时他让一手下演示了一个用类似XAML的语言调用一个符合Elastos规范的二进制组件模块的例子,在调用时并不需要任何关于此模块的源代码(包括头文件)。一些对国产技术严重没有信心的人肯定会说这有啥稀奇的,跨平台组件标准好多咧,比如Mozilla的XPCOM。我个人认为,咱们先别忙下结论,技术的好坏还是由实践来检验吧。我对组件与脚本的之间的互操作性很感兴趣,准备做完OpenLua编译器之后,也研究一下Lua与COM的交互,所以很期待陈榕最后会演示如何在JavaScript、Ruby脚本语言中操作Elastos组件,不过可惜由于时间的关系没看到。
到了下午3点半,便是讲师互动论坛,我抢到了向Bjarne当面请教的机会(激动啊)。我的问题是: Bjarne认为扩展C++应该首先使用程序库的方式,而不是往语言本身加新的特性,可有的时候用库对语言扩展是一件很困难的事(比如Eiffel中的Contract机制就很难用库来优雅地实现,因为面向对象体系中的contract与class hierarchy息息相关。不过这个例子我提问时忘了说。),这时如果编译器开放若干操作源程序抽象语法树(Abstract Syntax Tree)的内部接口给程序员,从而允许他们自定义针对特定领域的语言特性,这是不是一个可选的方法?C++ Template作为一种编译期执行的静态元编程语言(static meta-programming language)虽然是图灵完备(Turing complete)的,可使用起来却不自然,将来有没有可能让程序员就使用C++本身或者C++的子集来进行静态元编程?另外,我还问他是否听说过Open C++,如果听说过请他谈谈对它的看法。
Bjarne回答很干脆,他说开放编译器接口是一种很老的技术,而且虽然某人自定义的语言特性对那个人来说非常好用和自然,但对其它人来说未必,所以C++标准不会接受这种做法。对于我所说的C++ Template使用上的不自然,他说很可能是你解决的问题不适合用模板,所以难产生优雅自然的方案,而且语言语法这东西也是看着看着就亲切了的。至于Open C++,他说他不喜欢这种可以让阿猫阿狗都能自定义关键字的系统,它们注定会失败的。
由于激动,耳朵有点跟不上趟,只抓住了Bjarne说的几个词,大部分没听懂,上述回答是陈榕翻译的,也不知道他译全了没有。下面谈谈我听完回答后的想法。
是的,开放式编译器确实是一个很老的思想,最老的编程语言之一Lisp很早就通过可编程宏系统(programmable macro system)部分地开放了编译器的接口。Bjarne站在整个C++社群的高度看待标准化问题是完全正确的,我也不奢望C++标准会将其纳入,只是想知道当已有的语言机制(包括库)不能很自然地描述某类问题时,他是否认为该技术是构建领域特定语言(Domain Specific Language)的一种比较好的方案。关于C++ Template,Bjarne说的“如果很难找到优雅的方案很可能就说明你的问题不适合用template来解决”这句话真可谓忠言,我应该牢记在心。但是我所说的template使用不自然并不是指普通的template运用,而是指现在很热的C++模板元编程技术。模板元编程干了什么?不就是让我们在编译期运行一些计算代码,操纵一些源程序,并取得一些原本只有编译器才知道的信息吗?可这效果都是通过编译器的Constant Folding和模板实例化机制来迂回达到的。所以我认为就这点来说,模板很不直观、很不自然,我期待着将来程序员可以用他们熟悉的C++来写编译期执行的静态元程序。最后Bjarne对Open C++的评价给我泼了一盆不大不小的冷水,因为我正在针对Lua语言做一个类似Open C++的开放式编译器OpenLua,当然希望大师能有积极的评价。不过Bjarne是站在一个语言标准制订者的角度来谈这个问题,他当然不希望粗心激进的程序员随便引入一堆未经深思熟虑的语言特性以及关键字,想到这些我也就颇为释怀了。
很可惜的是因为激动有两个问题忘记问了。一个是想请Bjarne谈谈他对基于原型(prototype-based)面向对象模型的看法以及为什么主流面向对象语言都采用基于类(class-based)的模型。想提这个问题是因为在使用Lua时接触到基于原型的面向对象编程,觉得很新鲜,而据我所知却只有不多的几种语言(比如JavaScript,SELF)采用该方案。还有一个非常detailed的问题,就是C++的缺省参数与函数重载到底是不是正交特性?Ruby的发明人Matz认为它们是,我认为不是,并撰文(《C++的缺省参数与函数重载是正交特性吗?》)写下了我的理由。我比较确信自己是正确的,但还是觉得应该向C++之父求证一下。唉,脑子一热就啥都忘了,不知道下次与这种顶级大师面对面的交流又会是什么时候?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: