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

没有前九条的第十条编程规则:Greenspun's tenth rule

2016-06-15 15:01 525 查看
1993年Philip Greenspun提出了编程第十条规则:

Any sufficiently complicated C or Fortran program contains an ad hoc, informally-specified, bug-ridden, slow implementation of half of Common Lisp.

有意思的是,虽然名为“第十条”,但是并不存在相应的前9条,他本人是这么解释的:

Sorry, Han-Wen, but there aren’t 9 preceding laws. I was just trying to give the rule a memorable name.

计算机软件大牛Paul Graham也极力推崇Lisp语言。可见Lisp的确深受黑客的欢迎。如今的现实中,LISP思想常在,但是LISP语言却没有占据主流的编程环境。于是,又有人仿照这种规则格式,写出了如下规则:

Any sufficiently complicated C program contains an ad hoc, informally-specified, bug-ridden, slow, macro-based implementation of half of C++.

但是,显然C++并没有被大批黑客接受,不少大牛如Linus等就对C++嗤之以鼻,C++如今也是在走下坡路,所以有人对上述规则做了补充:

But this prevents people from using the other half of C++ by mistake which is much worse.

至于C++中哪些部分是值得C去模仿的,哪些部分又是让大部分黑客骂娘的,还需要自己在实际的项目中去体会。一般来说,

封装:把数据结构和操作数据的函数进行了绑定封装,这是C++最基本、最有用、最没有争议的功能;

继承:这个是OB和OO的主要不同,好像类继承并没有被广泛认为是普遍适用的;

多态:基于类继承和接口继承两种方式,接口继承更得人心;

函数重载:这种纯粹的语法糖,也是饱受争议;

模板:提供源码级别、编译时的多态,效率、安全性均好于运行时多态,然而其复杂的语法概念却让一般智商的程序员很难灵活自如使用。

标准库:C++标准库非常大,如今的C++11标准库里,连并行编程都囊括其中。STL设计精巧统一,囊括了常见数据结构和算法,然而过于统一的方式却让其API并不太友好,而且STL的模板本质带了调试困难、版本兼容等棘手问题。以至于很多大公司内部明文规定不允许使用STL。

匿名函数:也叫lamda表达式,这个功能非常好用,但是其实现也是用到了模板,所以也有模板的问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: