图灵完整性以外的功率度量


18

我最初试图在StackOverflow上问这个问题,但是它太主观了:-(。我对定义编程语言强大功能的方法很感兴趣。图灵完整性是其中之一,但它几乎是普遍满足的。区分实际使用的编程语言的能力的度量标准,例如,有人可以提出一种非主观的方法来区分汇编语言和Java语言吗?

图灵完整性意味着一种语言在输出方面具有最大的功能(这几乎意味着它可以在现实世界中做任何非时间的事情)。因此,如果我们想定义一个更强大的衡量标准,则需要采取另一种方法。在最初的问题中提出了简短性,但这一点很难定义。还有其他建议吗?

Answers:


24

您正在寻找的概念称为表现力,而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而不必担心手动重新计算任何跳转偏移量。


非常感谢你!这正是我想要的!
Casebash 2010年

6

如果我正确理解了您的问题,那么您仍在寻找相对可衡量的东西,而不仅仅是主观判断。如果是这样的话,我个人比较喜欢解决任何特定问题(所有问题和所有程序员的平均时间)所花费的时间。在这种情况下,您可能不仅需要考虑语言本身,还需要考虑与其一起使用的框架/ API。简洁的语法是一个很小的因素:更重要的一点是,最常用的功能易于访问。

如果您正在寻找更主观的东西,我会说它有多有趣。程序员往往是希望解决问题的人,因此,一种对程序员来说很有趣的编程语言将不可避免地会成为解决大多数问题的一种语言。这项措施考虑到不同的人对如何使用事物有不同的偏好,因此“最好的”编程语言将是最广泛的程序员最感兴趣的语言。但是,您可能不仅需要考虑此处的编程语言和API,还需要考虑环境(IDE),这当然是程序员实际与之交互的地方。


我想说,测量所花费的时间也是主观的。哪个程序员花时间?如果您用同一位程序员测试两种语言的时间,那么他更了解哪种语言?有一些统计方法可以解决此问题,但一个人无法独自做到。
约翰·费舍尔

1
@约翰:仅仅因为某些东西只能进行统计分析并不意味着它是主观的。
David Thornley 2010年

@David:那不是我真正的意思。关键是,如果没有预先存在的研究,提问者将无法比较他所关心的语言的“力量”,而如果不对大集团进行统计分析,它就将是主观的。
约翰·费希尔

1

我将通过语言的生产力来定义语言的强大程度。很多人倾向于以快速编写代码的方式谈论生产力,但是由于程序的生命周期的大部分是维护而不是开发,因此更好的衡量标准是您读取和调试代码的难易程度,尤其是当有人编写代码时其他。最强大的语言是最容易阅读和维护的语言。


2
这样做的困难在于,了解一门语言会使了解它的人更容易。因此,该措施变得主观。
约翰·费舍尔

1

您需要更好地定义术语。

从您可能要说的意义上来说,图灵的完整性与“权力”无关。而是关于可计算性。即,给定语言是否可以表达可以使用图灵机实现的任何程序。事实证明,几乎每种编程语言都是图灵完整的。

您可能追求的是衡量所谓的编程语言“表现力”的一种方法。我不确定是否存在这样的措施,或者是否存在,是否有用。从根本上说,不同的编程语言更擅长表达针对不同类型问题的解决方案。

编辑

只是说明一下,编程语言没有称为“能力”的属性。有一种通常称为编程语言的“表达性”或“表达能力”的概念。表现力部分在于编写简洁的程序来解决特定问题有多么容易。但是,也有相当大的衡量标准来简化程序的读取和编写。这有点像“美容”。看到它我就会知道,但不要让我定义它。

仅比较字符数并不能为您提供足够的表达能力。否则,您可以通过压缩源代码来使语言更具表现力...这是胡说八道。实际上,我不知道任何客观的表达方式,我强烈怀疑不存在任何表达方式。这实际上使该特性变得无用,而且很无趣。


1
我知道图灵的完整性与可计算性有关。我们知道在可计算性的规模上存在较少的度量,例如有限状态机。但是我们不能使用可计算性来定义一个高于此的能力级别,因为图灵完整性在可计算性方面具有最大的优势
Casebash 2010年

@Casebash-您仍然没有说“力量”是什么。
斯蒂芬·C

2
那是因为我不知道,这就是这个问题的全部重点!
Casebash 2010年

那你回答的重点是什么?应该是一个评论。
reinierpost 2012年

@reinerpost- 我的回答的重点是详细解释问题毫无意义,以及原因。基本上,问题是在问:“有一种叫做“表达能力”的东西-我不知道它是什么,但是你能告诉我如何测量它。” 我的回答的核心是“表达能力”是定义不清的概念/属性,绝对不是可测量/可量化的。(这显然是一个答案,而不是评论。也许您只是不明白我要说的是什么?)
Stephen C
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.