当讨论编程语言时,“powerful”是什么意思?

31

在编程语言的讨论/比较中,“power” 这个术语是指什么?

它是否有一个明确定义的含义?即使是不太明确的含义?

如果有人说“语言 X 比语言 Y 更强大”或者问同样的问题,他们的意思是什么 - 或者说他们想了解什么信息?

15个回答

30

它没有明确定义。在这类讨论中,“语言X比语言Y更强大”通常只意味着“我喜欢语言X胜过语言Y”。另一方面,人们通常会说出任何图灵完备的语言都可以完成与其他图灵完备的语言相同的任务,因此两者并没有严格的优劣之分。

我认为一个好的解释是表达能力。当一个语言表达能力强时,表明在表达概念时需要的代码更少。对我来说,这不仅意味着你写的代码更少,以完成相同的任务,而且也意味着代码更容易被人理解。当然,通常情况下(到一定程度),读的代码越少,阅读和理解的难度就越小。

在这里,“强大”的标准库也起到了同样的作用。如果一个语言配备有全面、完整的库,那么该语言的惯用代码将能够从现有的库代码中获益,并且不必在应用代码中重复或重新发明公共功能。最终结果是,完成相同的任务需要编写和阅读更少的代码。

我一直在说“通常”和“到一定程度”,因为一旦一种语言变得太简洁,就会更难为人类解密。我想在这个极端情况下,一种语言可能仍然被认为是“更强大”的(甚至是“过于强大”)。因此,我的个人解释“强大”包括了一些“有用”和“可读性”的方面。


3
+1 以表现力为佳。需要明确的是,一种语言之所以强大,不仅在于它能够简洁地向计算机表达指令,还在于它能够清晰明了地向普通读者表达意图。这就是为什么“短小精悍”并不总是更好的原因。 - ʇsәɹoɈ
我喜欢第二段关于表现力的部分。它让我想起了巴别塔。要意识到一门语言的强大程度取决于使用它的开发人员,而这些开发人员通过代码与自己、机器或其他开发人员进行沟通来获得他们的力量。 - cwharris

22

C是强大的,因为它是低级的并且可以让你访问硬件。Python是强大的因为你可以快速地原型化。Lisp是强大的因为它的REPL给了你很棒的调试机会。SQL是强大的因为你只需要说出你想要的内容,数据库管理系统就会找出最好的方法来完成它。Haskell是强大的因为每个函数都可以被独立测试。C++是强大的因为它有十倍于任何一个人所需或使用的语法结构。APL是强大的,因为它可以把一个10屏幕的程序压缩到10个字符中。甚至COBOL也是强大的,因为... 难道所有的银行都在使用它没有其他的理由了吗?:)


汇编语言非常强大,因为您可以编写最快的无符号除以3的代码:2个mov,1个mul和1个shr :) - elmattic

13
“Powerful”没有真正的技术含义,但很多人提出了建议。
其中一些更有趣的建议:
Paul Graham希望称某种语言为“更强大”,如果你可以用更少的代码行编写相同的程序(或其他合理的程序大小度量标准)。
Matthias Felleisen撰写了一份非常严肃的理论研究,名为《On the Expressive Power of Programming Language》
作为一个了解和使用许多编程语言的人,我相信语言之间存在真正的差异,“power”可以方便地描述一种语言可能比另一种更好的方式。然而,每当我听到讨论或声称一种语言比另一种更强大时,我倾向于牢牢地掌握我的钱包。

如果你说“在特定领域中,一种语言可能比另一种更好”,我会点赞。否则,它太过于强调一种真理主义。 - JUST MY correct OPINION
+1 对于Felleisen的非常有趣的链接表示赞赏:比较可计算函数集合是无用的,因为语言是通用的...更具表现力意味着在较小的语言中进行翻译需要对程序进行全局重组,这与在不支持协程、闭包和延续的语言中编写它们的直观感受相符。 - poolie

8

在编程语言中,描述“能力”的唯一有意义的方式是“用最少的资源完成我所需的任务”,其中“资源”被定义为“我不想付出的任何成本”,因此可以包括开发时间、CPU时间、内存空间、金钱等。

所以基本上,“能力”的定义是完全主观的,在任何客观讨论中都失去了意义。


我不同意最后一句话。如果“power”只在特定情境下有意义,它并不一定更少用或者甚至毫无意义。答案的其余部分是正确的。Power = 能够以很小的努力实现事物的能力。 - iwein

7
强大意味着“功率高”。 “功率”是增加您完成任务能力的东西。 “事物”在形状,大小和其他方面有所不同。因此,当应用于编程语言时,“强大”意味着它可以帮助您快速高效地完成任务。这使得“强大”在某种程度上被定义,但在不同领域中并非常数。在一个领域中强大的语言在另一个领域中可能会变得无能为力,例如C语言非常适合系统级编程,因为它直接访问机器和硬件,并提供比汇编语言更快的编码结构。 C编译器还生成运行速度快的紧凑代码。但是,一旦您转向Web应用程序,C可能会变得非常“不强大”,因为需要花费大量精力才能启动应用程序,并且必须担心许多与内存等无关的细节。
有时,语言在多个领域中都很“强大”。这使它们具有通用的“强大”标签(或者因为我们在SO上所以是徽章)。 PG声称LISP正是如此。这可能是真的也可能不是。
最终,“强大”是一个充满含义的词语,因此您应该评估是谁在说它,为什么他说它以及它对您的工作意味着什么。

4
人们关心的真正意义只有两个:
一是“强大”在“以更少的资源(时间、金钱、程序员、LOC等)实现相同/更好结果”的意义上,二是“强大”在“能够完成广泛任务”的意义上。
有些语言对于少量任务非常节省资源。其他语言则不那么节省资源,但可以应用于广泛的任务范围(例如,C语言通常用于操作系统开发、编译器和运行时库的创建以及与微控制器的工作)。
当使用“强大”这个术语时,其所指的是哪种含义取决于上下文(即使在这种情况下也不总是清晰的)。事实上,通常是两者兼备。

4
通常有两个不同的意义:
  • 表达性,意味着代码往往非常简短易懂
  • 低级别,意味着您对硬件具有非常精细的控制。
对于大多数语言而言,这两个定义是相反的:Python非常具有表现力但不太低级别;C非常低级别但不太具有表现力。根据您选择的定义,任何一种语言都可以是强大的或不强大的。

3

什么都没有,绝对什么都没有。

对于高级程序员来说,它可能意味着很多内置的可用数据类型。或者是易于创建或遵循设计模式的抽象。

Paul Graham 是一个非常高水平的人,他有以下观点:http://www.paulgraham.com/avg.html

Java 程序员可能会告诉你一些关于可移植性的东西,具有到达每个平台的能力。

C/UNIX 程序员可能会告诉您它的速度和效率,完全控制每寸内存。

VHDL/Verilog 程序员会告诉您完全控制每个时钟和门,以便不浪费任何电力或时间。

但在我看来,“强大的语言”支持完成任务所需的所有功能。文档可能很重要,或者它可能是可移植性,或者是进行图形处理的能力。它可以是任何东西,从汇编语言编写 GUI 就是愚蠢的,试图在 Flash 中设计嵌入式处理器也是如此。

选择完全适合您需求的语言总是会感觉有力量。


2

我认为这个术语只是一种营销手段,没有一个明确定义。

如果你考虑汇编语言、C语言和C ++语言。有时候需要从C++“降级”到C来进行特定的需求,然后再从C降级到汇编语言。因此,汇编语言成为最强大的语言,因为它是唯一能够做所有事情的语言。或者,换个角度,一行C++代码可以替换几行C语言(例如通过函数指针隐藏多态分派),一行C代码可以替换许多汇编语言。因此,C ++更强大,因为一行代码可以做“更多”的事情。

我认为这个术语在早期数据库和电子表格等产品中具有一定的流行度,因为一些内置语言受到了很大限制。因此,厂商会吹嘘他们的语言是“强大的”,因为它的限制较少。


2
它可以有几个意思。从基本意义上讲,它与可计算性有关。在这个意义上,最强大的语言是Turing Complete,它包括几乎所有通用编程语言(与大多数标记语言和特定领域语言不同,后者通常不是图灵完备的)。
在更实际的意义上,它通常指的是你能够以多么简洁(和易读)的方式完成某些任务。基本上,一种语言相对于另一种语言来说,完成某些任务有多容易。
哪种语言更强大(除了有点主观之外),很大程度上取决于你要做什么。如果你的要求是在只有64k内存的小设备上运行某些东西,你可能不会使用Java。很可能正确的语言是C或C++(或者如果你真的很硬核,则是汇编语言)。如果你需要在1天内完成一个非常简单的CRUD应用程序,也许像Ruby On Rails这样的东西就是正确的选择(我知道Rails是一个框架,而Ruby是一种语言,但现在可用的库和框架在选择一种语言时起着很大的作用)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接