我经常读到一些编程语言比其他语言更清晰,我多次问自己是否有一种客观的方法来衡量一种语言的清晰度,以便在给定抽象语法的情况下设计一种清晰且人性化的具体语法可能的。也许为此目的存在某种设计模式?
简而言之:如何实现语法的最大清晰度?知道任何量化语言“清晰度”或“表现力”的方法吗?
尝试衡量这些方面是否有意义?
谢谢。
我经常读到一些编程语言比其他语言更清晰,我多次问自己是否有一种客观的方法来衡量一种语言的清晰度,以便在给定抽象语法的情况下设计一种清晰且人性化的具体语法可能的。也许为此目的存在某种设计模式?
简而言之:如何实现语法的最大清晰度?知道任何量化语言“清晰度”或“表现力”的方法吗?
尝试衡量这些方面是否有意义?
谢谢。
这句话我听过太多次了,不经意地扔在不同的语言上,不同的人会根据不同的标准选择不同的语言。
在Beautiful Code中,Yukihiro Matsumoto(Ruby 的设计师)争论说用 Ruby 编写 Hello World 程序比用 Java 简单得多。虽然我不认为这个例子是为了扩展,但作者的观点是你必须添加到你的代码中的杂乱无章的数量反映了理解用那种语言编写的程序的缺陷。也就是说,你得到的分心越少,程序就越“可读”。
现在,根据我的经验,优秀的程序员用他们编程的所有语言编写清晰的代码,尽管用他们更熟悉的语言更清楚。作者的才能以及他在该语言中的广泛经验最终使语言本身的清晰度或表达力相形见绌。
要考虑的另一点是可用库的数量和 API 的质量。如果您必须编写更少的“支持代码”来完成工作,那么生成的程序可能会更清晰,因为它看起来更直截了当。
您可能会对所谓的“自然编程”进行一些研究:
http://www.cs.cmu.edu/~NatProg/index.html
他们试图设计语言来满足人类的期望,而不是试图让人们适应对计算机来说最简单的语言。他们以实验为基础。例如,当你指示他们“带回来的东西不是苹果或梨”时,研究有多少人从一盒水果中带回来一个梨。(我没有跟上他们的结果,但这听起来像是一个很有前途的项目。)
尽管如此,“清晰度”和“表现力”还是难以衡量的。当然,有一些研究可以对语言进行定量测量,例如计算机语言基准游戏。有些人从该游戏中提供的解决方案中获取了数据,并绘制了诸如“代码大小与性能”之类的趋势图:
http://blog.gmarceau.qc.ca/2009/05/speed-size-and-dependability-of.html
您可能能够根据有效执行给定任务所需的代码大小趋势,对通用语言提出一些基于指标的不稳定建议。但是,您正在确定“清晰度”和“表现力”是什么的相当主观的概念。(我倾向于相信更快地完成相同工作的较短程序通常更清晰,但有很多反例。)
所以我想说的是,如果没有明确的目标受众可以对测试对象进行可用性研究,那么在对语言进行概括方面,你不会比这些指标做得更好。
(注意:我喜欢Rebol,我认为它具有令人难以置信的清晰和表现力……但前提是您以某种方式使用它,这涉及到开发 DSL 方言,这不是很多人认为的方式当他们编程时。然而!)
我不认为有。清晰度是主观的,设计模式并不是衡量语言清晰度的好方法(实际上,设计模式通常是为了规避语言的限制而诞生的)。
有些人喜欢语义丰富而简洁的语言(例如 perl),并不真正介意符号的使用,而另一些人则喜欢类似于自然语言的语法,这样您就好像在对计算机说话(例如 Hypercard)并且不真的不介意冗长或模棱两可。
像这样的问题通常会导致迂腐的答案。
语言就像工具。
它们是为满足某些目的而建造的。逻辑编程语言以比面向对象程序更优雅的方式解决某些问题。同样,许多主流解决方案都可以通过典型的面向对象或过程语言轻松完成。
工具使用者的气质和其他因素,在这种情况下,程序员也很重要。有些人已经在 Perl 中实现了漂亮的解决方案,但对我来说它总是看起来像黑魔法。我更喜欢 Python 的结构简单性。对于一些人来说,它对空白的使用是可恶的。
如果可以对语言的清晰度和表现力进行评估,那充其量只是一个非常主观的评估。
然而,一个明显的迹象是该语言的大量代码生产。一些语言,比如brainfuck,还没有被采用,而Python、Ruby等已经流行起来。虽然,这些和许多因素只能是一个指标。一些语言,尽管结构很好,但可能找不到太多的接受者。
网络效应也会影响语言的采用。
我发现 LOLCODE 是所有语言中最容易理解的语言:
HAI
CAN HAS STDIO?
I HAS A VAR
IM IN YR LOOP
UP VAR!!1
VISIBLE VAR
IZ VAR BIGGER THAN 10? KTHXBYE
IM OUTTA YR LOOP
KTHXBYE
衡量语言的可理解性不如衡量程序员的可理解性重要。
您还可以查看最新版的“编程语言概念”一书,作者:RW Sebesta。本书中有章节(我不记得确切的第 1 章或第 2 章)讨论了评估编程语言的标准。