Paul Graham:百年编程说话
也许的计划出那种说话的方法是仅凭你的意愿写下措施,不消思量是否有编译器可以表明它,也不消思量是否有硬件能运行它。当你写措施的时辰你可以设想有无穷的资源(我想我们此刻应该可以想象获得一百年后有无穷资源的景象)。 人们会凭意愿写出什么样的措施呢?应该是所需的起码的劳动。要彻底的起码:在你的思想还没有被你此刻风俗了的编程的说话影响的“条件”下所想到的所需的起码的劳动。不外你已经风俗了的编程说话的影响是云云的广泛深刻,甚至于你不得不做出庞大的全力来降服它。你可以只管想象一下我们这些懒鬼怎么去用起码的全力表达一个措施。究竟上,由于我们全部的设法是云云受到我们的思想所用的说话的限定,以是措施的简捷一点的表达都让我们很是受惊。你必要做的是发明和醒觉,不是天然而然地陷入个中。 一个有效的诀窍是用措施的长度来作为你编程劳动的几多的近似值——虽然不是按字符来计较的长度,而是按独立语法元素(根基上就是是理会树的巨细)来计较的长度。要说最短的措施就符号是你起码编程劳动也不完全精确,可是它作为一个简捷性的指标是寥胜于无的。那么,说话计划的法例就酿成了:看看一个措施并问一问,是否尚有此外要领可以把措施写得更短? 现实上,用不行想象的百年说话写措施会按照你靠近它的内核的水平差异其功效也有所差异。你可以此刻就写出排序措施,可是很难猜测一百年后将必要什么样的代码库(library),或许会呈现很多新规模的代码库。譬如,假如到时辰SETI@home(译注:Search for Extra Terrestrial Intelligence at home,是由美国加州大学伯克利分校成立的一项旨在操作连入Internet的成千上万台计较机的闲置手段征采地外文明的庞大试验)尚有用,我们就将必要与外星人(alien)通讯的代码库。虽然条件是他们也足够发家,也能用XML来雷同。 极度一点,我以为你本日就有也许计划出那种焦点说话。有人也许会说,现实上它已经早在1958年(译注:J.McCarthy于1958年提出了Lisp的设法,并于同年跟他的门生们一路举办最初的实现事变。)就被计划好了。 假设我们本日就可以用所谓百年说话,我们会用它来编程吗?为了答复这个题目,让我们回首一下以前,假如我们当前所用的编程说话在1960年就可用,当时的人们会用它们吗? 从各个方面来讲,谜底都是否认的。当今的说话是成立在1960年还不存在的一些基本上的。譬喻,像Python这种说话中每行的缩进是很故意义的划定,可是这种划定在当时辰的打印终端上是行不通的。这样的题目临时不说,试想一下,当时辰的措施都是写在纸上的,1960年月的措施员们会喜好用我们本日所用的说话来写措施么? 我以为照旧会的。固然对付那些已经把史前迂腐的说话根深蒂固地融入到他们对计较机措施的熟悉中的缺乏想象力的人来说,确实很难。(天哪!没有指针要领那怎么哄骗数据?没有goto怎么实现流程图?)可是我以为最智慧的措施员们将很天然地行使我们当今所用的大大都说话——假如他们其时有这些说话的话。 假如我们此刻就拥有了百年说话,最少它会发生巨大的伪代码。用它来写措施又会怎么样呢?既然百年说话必要天生快的天生码以顺应某些应用,那么或许它应该也能天生足够可接管的高效的天生码来顺应我们此刻的硬件。只是我们或者不得不比一百年后的用户要给出更多的优化提议,但那也是划算的。 我们此刻有了两个见识,假如你把他们团结起来,会发生风趣的也许性:(1)原则上讲,百年说话是可以在本日被计划出来的;(2)这种说话假如本日已经存在,那么用它来编程该当是不错的。当你看到像这样明摆着的两个见识,就不难想到:为什么不此刻就试着用百年说话来编程呢? 假如你是做说话计划事变的,我以为你最好有这种方针,而且把它紧记于心。当你学驾驶的时辰,他们教给你的根基原则之一就是不要只是让你的引擎盖瞄准阶梯上的行道线,而是要把眼光对准远处。哪怕你只是在意下一个10英尺会产生的事,也应该这样。我想我们在编程说话方面可以也应该这样做。 Notes 我信托Lisp说话中的Machine Lisp是第一个将“声明(动态变量除外)只是优化提议,而不会改变正确措施的意义”这一道理详细化的说话,而Common Lisp初次将其明晰地阐释了出来。 感激Trevor Blackwell,Robert Morris 和Dan Giffin,他们阅读了本文的初稿,感激Guido van Rossum,Jeremy Hylton和Python社团的其他全体成员,是他们约请我在Python大会上谈话。 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |