彻底的正则化的研究C++(或任何支持泛型的语言)的泛型编程模式--倡议

Gandolf 2003-04-19 12:29:59
这是本人在这个论坛发表的第一篇贴子,自我简介一下先。偶在美国一大学计算机系读博士,研究方向是计算机语言和超大规模软件结构设计。当前选择的课题是泛型编程模型的正则化(Formalization)及其在超大规模软件设计中的应用。

我们知道,泛型或模板类的概念并不是C++中首先提出的,早在1970年代在施乐的PARC实验室中就用理论模型和实验语言实现过。在ADA语言中也有这样的语言结构。C++的原始设计中也没有Template的概念,后来才在ADA的范例启发下倒入的,这也是很多成熟的商业编译器并不能很好的支持Template的原因。泛型设计的模型和理论探讨还没有非常成熟化,因为这是在Procedural Language和OO Language之后出现的更新也是更复杂的概念。对于Procedural Language或通常所谓的结构化语言,已经有很彻底很成熟的研究(除了Garbage Collection这样的特殊课题),这就是所谓的Lambda-Calculus。这种所谓的Calculus就是把计算机语言学及实践遇到的问题正则化,用一种精炼严格的数学结构来表达。但并不仅仅是表达而已,因为数学结构的抽象和简明可以是的结构的组合和分析更为简易,所以能发现很多以前仅仅停留在实践层面上的认识中所不能或很难发现的有趣的结果。对于OO Language,现在还没有很成熟的数学研究,但是已经有所谓Omega-Calculus和Theory of Object。对于在OO之上更进一步的泛型语言结构以及它们和Procedural Language中的类型结构的作用(或用正则化的说法叫运算)还是一个全新的领域。深入的理论研究有助于开拓新的未知编程结构,彻底的全面的了解泛型编程的所有可能性。所以我们现在正在努力尝试构件一种所谓Gamma-Calculus的数学结构。

大家一定对Andrei Alexandrescu以及Sutter这些牛人的眩目的C++技巧叹为观止,其实任何不是仅仅肤浅的了解C++的人都会惊叹C++居然还可以这么用。

但是如果从正则化的角度考虑所谓的Meta-Programming不过是对类型的运算,以一个基础类型集合为起点,根据语言规则定义一组运算,这些运算的结果是产生所谓的组合类型或衍生类型,运算本身是一组表达式。我们定义一个具有特定性质(或静态/动态特征)的类型,希望通过设计一组合适的表达式来产生这样的结果类型。这里我们看到这样的表达式就是我们希望的Meta-programming,在C++中就是一组模板定义。从数学理论上来说,如果我们可以恰当的定义运算规则(或者说一种“群”,可能的,nobody knows yet,我们可以利用已有的数学理论来彻底研究分析所有的类型运算以及可能的性质。最后的结果翻译(可以通过程序来做)成特定的语言代码。

所谓Meta-programming其实是以编译器为虚拟机的一种编程,这里有全新的规则。但是语言结构的组合是无穷尽的。怎样使简单的小规模的语言结构能够组装成大规模高层的结构,同时又考虑到实际可能出现的限制:比如说,代码膨胀,运行效率,运行实体互操作等,这又是一个新的课题。

Andrei等人现在已经把C++的泛型编程推向一个新的高度。虽然如很多人指出的,表面看来似乎是流于奇技淫巧,但是他们的设计并不仅仅是炫耀花哨的技巧,而是有明确的目的的。首先是提高源代码级的健壮性,比如Andrei苦心设计了很多表达式:mojo,volatile-based并发编程等。其次是最大限度的降低代码的复杂程度,把处理程序结构的复杂性的工作交给经过编译器去做,就象以前手工的优化汇编代码被交给了编译器一样,这方面,Policy-based设计就是很好的例子,正交化的设计可以成指数级的降低程序结果的复杂性。有人可能会Argue说这样造成维护和调试的极大困难,对此我想指出两方面:1,这种泛型设计通常来说是一个软件项目的基础工作,应该由库设计师和架构设计师来做,目前这还不是普通程序员可以胜任的,而且基础工作中的错误同样会成指数级的扩散到软件的其它部分,所以对设计者和实现者的要求是很高的;2,现在学术界已经在研究有效的泛型Debug工具,我们课题组中有这个方向。

讲了这么多主要是抛砖引玉,告诉大家这个还不为大多数人所知的东东。有兴趣的人可以和我们一起来做这些工作。毕竟总是跟在别人后面拾人牙慧沾沾自喜不是什么很令人觉得有面子的事。一句话,你要是有兴趣,别管别人怎么说,没必要打口水仗。要做,就做最前沿的,做前人没有梦想过的事,做十年二十年前的东西,你都不好意思跟人打招呼。(怎么听起来有点想《大腕》啊?:)) ,搞笑而以)。
...全文
38 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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