2002年5月,由代数符号压缩到一个小空间中的意义的数量,是另一种情况,有助于我们习惯于在他们的帮助下进行推理。-查尔斯·巴贝奇,引用于艾弗森的图灵奖演讲。
在讨论LL1邮寄名单上的“书呆子的复仇”提出的问题时,保罗·普雷斯科德写了一些让我印象深刻的事情。从表面上看,宣称这是一种编程语言似乎是一件相当糟糕的事情。据我所知,简洁性=力量。如果是这样,那么代换,我们得到了,这似乎不是你想要做的权衡(如果这是一种权衡)。这并不是说Python的目标不是作为一种有效的编程语言。简洁等于力量吗?在我看来,这似乎是一个重要的问题,对于任何对语言设计感兴趣的人来说,这可能是最重要的问题,而且直接面对这个问题会很有用。我还不确定答案是不是简单的“是”,但这似乎是一个很好的假设。假设我的假设是简洁就是力量,或者足够接近,除非在病理例子中,你可以将它们视为相同的。在我看来,简洁性是编程语言的目的。如果直接用机器语言告诉计算机该做什么,计算机也会同样高兴。我认为我们不厌其烦地开发高级语言的主要原因是为了获得优势,这样我们就可以用10行高级语言来说(更重要的是,想一想)需要1000行机器语言的东西。换句话说,高级语言的主要目的是使源代码更小。如果较小的源代码是高级语言的目标,那么衡量一种编程语言的能力的标准就是它使您的程序变得多小。相反,一种不能使你的程序变小的语言在编程语言应该做的事情上做得不好,就像一把切得不好的刀,或者打印出来的东西难以辨认。然而,指标在什么意义上很小呢?代码大小的最常见度量是代码行。但我认为这个指标是最常见的,因为它是最容易测量的。我认为没有人真的相信这是对节目长度的真正考验。不同的语言对一行应该放多少有不同的约定;在C语言中,很多行除了一两个分隔符之外什么都没有。另一个简单的测试是程序中的字符数,但这也不是很好;一些语言(例如Perl)只是使用比其他语言更短的标识符。我认为衡量程序大小的更好的方法是元素的数量,如果你画了一棵代表源代码的树,那么元素就是一个不同的节点。变量或函数的名称是元素;整数或浮点数是元素;文字文本段是元素;模式元素或格式指令是元素;新块是元素。存在边界情况(是两个元件还是一个元件?)。但我认为它们中的大多数对于每种语言都是相同的,所以它们不会对比较产生太大影响。这个度量需要充实,在特定语言的情况下可能需要解释,但我认为它试图度量正确的东西,即程序包含的部分的数量。我认为你在这个练习中画的这棵树是你为了构思这个程序而必须在脑海里做的东西,所以它的大小与你写或读它所要做的工作量成比例。设计这种度量可以让我们比较不同的语言,但这并不是,至少对我来说,这不是它的主要价值。简洁性测试的主要价值是指导语言的设计,语言之间最有用的比较是同一语言的两个潜在变体之间的比较,简洁性测试的主要价值是指导语言的设计,语言之间最有用的比较是同一语言的两个潜在变体之间的比较。我能用这种语言做些什么来缩短程序?如果程序的概念负载与其复杂性成正比,并且给定的程序员可以容忍固定的概念负载,那么这就等同于问,我能做些什么才能使程序员完成最多的工作?对我来说,这似乎等同于问,我如何才能设计出一种好的语言?(顺便说一句,没有什么比设计语言更明显地表明,所有语言都是等价的这一老生常谈是错误的。当你在设计一种新的语言时,你会不断地比较两种语言--如果我做了x的语言,和如果我没有做x的语言--来决定哪种语言更好。如果这真的是一个没有意义的问题,你不妨抛硬币决定。)。追求简洁似乎是发现新想法的好方法。如果你能做一些事情,让许多不同的程序变得更短,这可能不是巧合:你可能已经发现了一个有用的新抽象。您甚至可以编写一个程序,通过搜索源代码c++来提供帮助。