在编程语言的讨论/比较中,“power” 这个术语是指什么?
它是否有一个明确定义的含义?即使是不太明确的含义?
如果有人说“语言 X 比语言 Y 更强大”或者问同样的问题,他们的意思是什么 - 或者说他们想了解什么信息?
在编程语言的讨论/比较中,“power” 这个术语是指什么?
它是否有一个明确定义的含义?即使是不太明确的含义?
如果有人说“语言 X 比语言 Y 更强大”或者问同样的问题,他们的意思是什么 - 或者说他们想了解什么信息?
它没有明确定义。在这类讨论中,“语言X比语言Y更强大”通常只意味着“我喜欢语言X胜过语言Y”。另一方面,人们通常会说出任何图灵完备的语言都可以完成与其他图灵完备的语言相同的任务,因此两者并没有严格的优劣之分。
我认为一个好的解释是表达能力。当一个语言表达能力强时,表明在表达概念时需要的代码更少。对我来说,这不仅意味着你写的代码更少,以完成相同的任务,而且也意味着代码更容易被人理解。当然,通常情况下(到一定程度),读的代码越少,阅读和理解的难度就越小。
在这里,“强大”的标准库也起到了同样的作用。如果一个语言配备有全面、完整的库,那么该语言的惯用代码将能够从现有的库代码中获益,并且不必在应用代码中重复或重新发明公共功能。最终结果是,完成相同的任务需要编写和阅读更少的代码。
我一直在说“通常”和“到一定程度”,因为一旦一种语言变得太简洁,就会更难为人类解密。我想在这个极端情况下,一种语言可能仍然被认为是“更强大”的(甚至是“过于强大”)。因此,我的个人解释“强大”包括了一些“有用”和“可读性”的方面。
C是强大的,因为它是低级的并且可以让你访问硬件。Python是强大的因为你可以快速地原型化。Lisp是强大的因为它的REPL给了你很棒的调试机会。SQL是强大的因为你只需要说出你想要的内容,数据库管理系统就会找出最好的方法来完成它。Haskell是强大的因为每个函数都可以被独立测试。C++是强大的因为它有十倍于任何一个人所需或使用的语法结构。APL是强大的,因为它可以把一个10屏幕的程序压缩到10个字符中。甚至COBOL也是强大的,因为... 难道所有的银行都在使用它没有其他的理由了吗?:)
在编程语言中,描述“能力”的唯一有意义的方式是“用最少的资源完成我所需的任务”,其中“资源”被定义为“我不想付出的任何成本”,因此可以包括开发时间、CPU时间、内存空间、金钱等。
所以基本上,“能力”的定义是完全主观的,在任何客观讨论中都失去了意义。
什么都没有,绝对什么都没有。
对于高级程序员来说,它可能意味着很多内置的可用数据类型。或者是易于创建或遵循设计模式的抽象。
Paul Graham 是一个非常高水平的人,他有以下观点:http://www.paulgraham.com/avg.html
Java 程序员可能会告诉你一些关于可移植性的东西,具有到达每个平台的能力。
C/UNIX 程序员可能会告诉您它的速度和效率,完全控制每寸内存。
VHDL/Verilog 程序员会告诉您完全控制每个时钟和门,以便不浪费任何电力或时间。
但在我看来,“强大的语言”支持完成任务所需的所有功能。文档可能很重要,或者它可能是可移植性,或者是进行图形处理的能力。它可以是任何东西,从汇编语言编写 GUI 就是愚蠢的,试图在 Flash 中设计嵌入式处理器也是如此。
选择完全适合您需求的语言总是会感觉有力量。
我认为这个术语只是一种营销手段,没有一个明确定义。
如果你考虑汇编语言、C语言和C ++语言。有时候需要从C++“降级”到C来进行特定的需求,然后再从C降级到汇编语言。因此,汇编语言成为最强大的语言,因为它是唯一能够做所有事情的语言。或者,换个角度,一行C++代码可以替换几行C语言(例如通过函数指针隐藏多态分派),一行C代码可以替换许多汇编语言。因此,C ++更强大,因为一行代码可以做“更多”的事情。
我认为这个术语在早期数据库和电子表格等产品中具有一定的流行度,因为一些内置语言受到了很大限制。因此,厂商会吹嘘他们的语言是“强大的”,因为它的限制较少。