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

本文探讨了Philip Greenspun提出的编程第十定律,并分析了该定律对于Lisp语言及C++的评价。通过对Lisp语言特性的回顾,以及对C++中封装、继承、多态等特性的讨论,揭示了这些语言对现代编程的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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表达式,这个功能非常好用,但是其实现也是用到了模板,所以也有模板的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值