Answers:
您正在寻找的概念称为表现力,而Matthias Felleisen在数学上有严格的定义:
“ 关于编程语言的表达能力 ”
www.ccs.neu.edu/scheme/pubs/scp91-felleisen.ps.gz(脚本版本)
这个想法的直觉是,如果您有两个使用两种不同语言的等效程序(例如,使用语言X的程序A和使用语言Y的程序B),并且您对A进行了本地更改,则需要对B进行全局更改,则X比Y更具表现力。
Felleisen提供的一个示例是赋值:在Scheme编程语言中,您可以删除赋值运算符,并且仍然具有图灵完整的语言。但是,以这种受限制的语言,如果允许分配,则添加将被本地化的功能将需要在不分配的情况下对程序进行全局更改。
我的讨论简化了一些细节,您应该阅读全文以了解完整的内容。
回答另一个问题:您可以说Java比汇编更具表现力,因为您可以向Java程序中添加一个新类,然后使程序的其他部分无需全局修改即可调用其方法,从而获得多态的好处。异常处理是Java比汇编更具表现力的另一个示例:您只需要编写一条throw
语句即可将控制权转移到堆栈上。在更基本的层次上,您也可以在a case
的开头附近添加新语句,switch
而不必担心手动重新计算任何跳转偏移量。
如果我正确理解了您的问题,那么您仍在寻找相对可衡量的东西,而不仅仅是主观判断。如果是这样的话,我个人比较喜欢解决任何特定问题(所有问题和所有程序员的平均时间)所花费的时间。在这种情况下,您可能不仅需要考虑语言本身,还需要考虑与其一起使用的框架/ API。简洁的语法是一个很小的因素:更重要的一点是,最常用的功能易于访问。
如果您正在寻找更主观的东西,我会说它有多有趣。程序员往往是希望解决问题的人,因此,一种对程序员来说很有趣的编程语言将不可避免地会成为解决大多数问题的一种语言。这项措施考虑到不同的人对如何使用事物有不同的偏好,因此“最好的”编程语言将是最广泛的程序员最感兴趣的语言。但是,您可能不仅需要考虑此处的编程语言和API,还需要考虑环境(IDE),这当然是程序员实际与之交互的地方。
您需要更好地定义术语。
从您可能要说的意义上来说,图灵的完整性与“权力”无关。而是关于可计算性。即,给定语言是否可以表达可以使用图灵机实现的任何程序。事实证明,几乎每种编程语言都是图灵完整的。
您可能追求的是衡量所谓的编程语言“表现力”的一种方法。我不确定是否存在这样的措施,或者是否存在,是否有用。从根本上说,不同的编程语言更擅长表达针对不同类型问题的解决方案。
编辑
只是说明一下,编程语言没有称为“能力”的属性。有一种通常称为编程语言的“表达性”或“表达能力”的概念。表现力部分在于编写简洁的程序来解决特定问题有多么容易。但是,也有相当大的衡量标准来简化程序的读取和编写。这有点像“美容”。看到它我就会知道,但不要让我定义它。
仅比较字符数并不能为您提供足够的表达能力。否则,您可以通过压缩源代码来使语言更具表现力...这是胡说八道。实际上,我不知道任何客观的表达方式,我强烈怀疑不存在任何表达方式。这实际上使该特性变得无用,而且很无趣。