|
|
|
|
|
|
m****a 发帖数: 2593 | 1 【 以下文字转载自 Programming 讨论区 】
发信人: mrmaja (麻家), 信区: Programming
标 题: 王垠的这篇写的不错
发信站: BBS 未名空间站 (Mon Feb 3 01:36:03 2014, 美东)
http://www.yinwang.org/blog-cn/2014/01/25/pl-and/
喜欢这段和AK的比较,
程序语言与武器
前段时间 AK-47 的设计者 Kalashnikov 去世的时候,我从一篇文章了解到他设计 AK-
47 的故事,发现 AK 跟我喜欢的程序语言设计有异曲同工之妙。
AK 简单得就像一把锤子。它身上没有太空时代的材料。大多数汽车修理店都有可
以制造出 AK 的工具。
这篇文章首先提到,AK 的高可靠性最主要来自于它的简单,而其实简单也是程序语言
最重要的东西。程序员需要解决的问题一般都挺复杂,如果他们的工具再被设计得复杂
,那么他们大量的脑力就被浪费在解决这语言的问题,而不是真正需要解决的问题了。
Kalashnikov 开始的时候把任何有可能出问题的设计都排除在外了。
与简单的设计背道而驰,现在很多程序语言为了赶潮流或者吸引眼球,喜欢标新立异,
喜欢加入很多“特性”,可是这些特性很有可能不但不解决问题,而且会制造问题。绝
大部分程序员都不理解这个道理,所以有些人听说我在设计自己的语言就问我:“它有
什么新特性吗?”我没法回答他们,因为我的设计几乎没有新的特性。我现在所做的一
切思考和试验都是在去掉不必要的麻烦。一个语言缺少一些好的特性,以后还可以加进
去,可是它如果多了一些问题特性,那一旦有人开始用就没法去掉了。
AK 上面没有袖珍和娇气的部件。这样你就不用费事在草丛里,泥地上或者溪流里
找它们了。
士兵是人,会摔跤犯错误,程序员也是人,所以程序员的武器应该像士兵的武器一样,
方便他们找到问题。可是很多程序语言让程序员犯错误之后花很多时间和精力才能找到
错误的所在,浪费大量本来可以用来解决问题的时间。我的前同事 TJ 说他刚进入博士
学习的时候花了好几个月,就为了找到 C 代码里面一个指针计算错误,导致内存结构
破坏和莫名其妙的错误结果,而出现指针计算错误的位置跟错误结果出现的位置毫无关
系。我也遇到过类似的问题。C 语言的指针不就像是某些武器上面的袖珍部件吗?一不
小心掉在地上就找不到了。
AK 只有一个复杂一点的部件,那就是它的弹夹。弹夹的设计很大程度上影响到枪
的整体性能,所以 Kalashnikov 在上面花了很多设计时间。
这个工程经验其实对于程序语言的设计者有启发意义,因为弹夹与枪主体的接口,和程
序语言的函数接口很类似。Tony Hoare 在他的《给程序语言设计的建议》中也提到,
函数的调用必须简单而且快速,因为调用的开销会累积起来形成很大的性能问题。可惜
的是很多语言没有注意到这个问题,函数调用时总是有一堆的动态检查和重载要做,很
大程度的影响了它们的性能。
Kalashnikov 不是天才,他不是为了发明而发明,他解决不了问题的时候就高兴地
从别人那里学过来。
这是非常值得我们程序语言设计者学习的。很多程序语言专家都有盲目排斥“对手”的
心理,“自己人”的东西就不假思索的表扬,对手的东西就一味的批评。最后的结果是
没有把敌人的好东西学过来,让自己人吃亏。在操作系统和数据库等领域也有类似的思
维方式,这是非常有害的。
直到被更好的东西取代,AK 会继续和我们在一起。什么才是“更好”,这是由历
史和民族来定义的,而不是枪支设计专家。
在计算机的世界里也是一样,程序语言,操作系统,数据库…… 它们的好坏不应该是
由它们的设计者决定的,而是看它们是否经得起时间的考验。很多几十年前以为是好的
设计,到现在已经很明显的显示出了它们的缺点。这就是为什么我喜欢批评一些语言,
操作系统和数据库的设计,因为我看到了它们在历史的长河中已经快要到达终点。自欺
欺人的掩盖这些缺陷只会让我们输掉战争。 | f*******r 发帖数: 5301 | | j*****v 发帖数: 7717 | 3 要求不能太高,网站第一行字就说了
http://www.yinwang.org/
【在 f*******r 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 作为一个上过学的人,应该懂得一些基本概念
|
|
|
|
|
|