【发布时间】:2010-06-12 05:23:34
【问题描述】:
在编程语言讨论/比较的上下文中,“权力”一词是什么意思?
它有明确定义的含义吗?甚至是定义不清的意思?
说如果有人说“语言 X 比语言 Y 更强大”或提出相同的问题,他们的意思是什么 - 或者他们试图找出什么信息?
【问题讨论】:
在编程语言讨论/比较的上下文中,“权力”一词是什么意思?
它有明确定义的含义吗?甚至是定义不清的意思?
说如果有人说“语言 X 比语言 Y 更强大”或提出相同的问题,他们的意思是什么 - 或者他们试图找出什么信息?
【问题讨论】:
它没有明确的含义。在这些类型的讨论中,“语言 X 比语言 Y 更强大”通常意味着“我喜欢 X 语言胜过 Y 语言”。在光谱的另一端,你通常也会有人插话,说任何图灵完备的语言可以完成与任何其他图灵完备的语言相同的任务,因此严格来说两者都没有比另一种更强大。
我认为它的一个好含义是表现力。当一种语言具有高度表达性时,这意味着表达概念所需的代码更少。对我来说,这不仅意味着您必须编写更少的代码来完成相同的任务,而且还意味着代码易于人类阅读。当然,一般来说(在一定程度上),要阅读的代码行数更少,人类阅读和理解的任务就会变得更容易。
拥有一个“强大”的标准库也同样如此。如果一种语言配备了彻底、完整的库,那么该语言的惯用代码将能够从现有的库代码中受益,而不必在应用程序代码中重复或重新发明通用功能。最终的结果是,同样的任务需要编写和读取更少的代码。
我一直在说“一般”和“一定程度上”,因为一旦一种语言变得过于简洁,人类就更难破译了。我想在这个极端情况下,一种语言可能仍然被认为“更强大”(甚至“太强大”)。所以我想我是说我个人对“强大”的解释也包括“有用”和“可读”的某些方面。
【讨论】:
C 是强大的,因为它是低级的并且可以让您访问硬件。 Python 很强大,因为您可以快速原型化。 Lisp 功能强大,因为它的 REPL 为您提供了绝佳的调试机会。 SQL 很强大,因为你说出你想要的,DMBS 会为你找出最好的方法。 Haskell 很强大,因为每个函数都可以单独测试。 C++ 之所以强大,是因为它的语法结构数量是任何人需要或使用的十倍。 APL 非常强大,因为它可以将一个十屏幕的程序压缩成十个字符。见鬼,COBOL 很强大,因为……为什么所有银行都在使用它? :)
【讨论】:
“强大”没有真正的技术意义,但很多人提出了建议。
几个更有趣的:
如果您可以用更少的代码行编写相同的程序(或其他一些理智、合理的程序大小衡量标准),Paul Graham 想称一种语言“更强大”。
Matthias Felleisen 写了一篇非常严肃的理论研究,名为 On the Expressive Power of Programming Language。
作为一个了解并使用多种编程语言的人,我相信语言之间存在真正的差异,并且“力量”可以作为一种方便的简写方式来描述一种语言可能优于另一种语言的方式。然而,每当我听到讨论或声称一种语言比另一种更强大时,我倾向于将一只手牢牢放在钱包上。
【讨论】:
在编程语言中描述“权力”的唯一有意义的方式是“可以用最少的资源做我需要的事情”,其中“资源”被定义为“我宁愿不支付的任何成本”并且可以,因此,是开发时间、CPU 时间、内存空间、金钱等。
所以基本上“权力”的定义纯粹是主观的,在任何客观的讨论中都变得毫无意义。
【讨论】:
强大的意思是“权力大”。 “力量”是增加你做事能力的东西。 “事物”在形状、大小和其他方面各不相同。因此,粗略地说,当应用于编程语言时,“强大”意味着它可以帮助您快速有效地执行任务。
这使得“强大”在某种程度上得到了很好的定义,但在各个域中并不恒定。在一个领域强大的语言可能会在另一个领域中瘫痪,例如。如果您想进行系统级编程,C 语言非常强大,因为它可以让您直接访问机器、硬件和结构,让您的编码速度比汇编代码快得多。 C 编译器还可以生成运行速度快的紧凑代码。但是,一旦您转向 Web 应用程序,C 语言可能会变得非常“无能”和严重,因为要启动和运行某些东西需要付出很大的努力,而且您必须担心很多无关的细节,例如内存等。
有时,语言在多个领域都“强大”。这给了他们一个通用的“强大”标签(或徽章,因为这里是 SO)。 PG 声称,对于 LISP,情况就是如此。这可能是真的,也可能不是。
归根结底,“强大”是一个沉重的词,因此您应该评估谁在说它,他为什么这么说以及它对您的工作意味着什么。
【讨论】:
人们担心的其实只有两个意思:
“强大”的意思是“花费更少的资源(时间、金钱、程序员、LOC 等)来实现相同/更好的结果”,而“强大”的意思是“能够做广泛的事情”任务范围”。
对于小范围的任务,某些语言的资源效率极高。其他的资源效率不高,但可以应用于广泛的任务(例如 C,通常用于操作系统开发、编译器和运行时库的创建以及与微控制器一起使用)。
人们在使用“强大”一词时想到的这两种含义中的哪一种取决于上下文(即使这样也并不总是很清楚)。确实经常两者兼而有之。
【讨论】:
通常有两种不同的含义:
对于大多数语言来说,这两个定义处于光谱的两端:Python 非常有表现力,但不是非常低级; C 非常低级,但表达力不强。根据您选择的定义,两种语言强大或不强大。
【讨论】:
什么都没有。
对于高级程序员来说,这可能意味着内置了许多可用的数据类型。或者可能是为了轻松创建或遵循设计模式而进行的抽象。
保罗格雷厄姆是一个非常高水平的人,这是他必须说的: http://www.paulgraham.com/avg.html
Java 专家可能会告诉您一些关于可移植性、覆盖所有平台的能力。
C/UNIX 程序员可能会告诉你,它的速度和效率,完全控制每一寸内存。
VHDL/Verilog 程序员会告诉你它对每个时钟和门的完全控制,以免浪费任何电力或时间。
但在我看来,“强大的语言”支持您完成任务的所有功能。文档可能很重要,或者它可能是可移植性的,或者是做图形的能力。可以是任何东西,从 Assembly 编写 gui 只是愚蠢的,因此尝试在闪存中设计嵌入式处理器也是如此。
选择一种完全适合您需求的语言总是让人感觉很强大。
【讨论】:
我认为这个词是营销浮夸,没有一个明确的含义。
如果你考虑一下汇编程序、C 和 C++。有时,出于特殊需要,会从 C++“下”到 C,然后从 C 下到汇编程序。这使得汇编程序变得最强大,因为它是唯一可以做任何事情的语言。或者,换一种说法,一行 C++ 代码可以替换几个 C(例如通过函数指针隐藏多态调度),一行 C 替换许多汇编程序。所以 C++ 更强大,因为一行“更多”。
我认为当早期的数据库和电子表格等产品具有内置语言时,该术语具有一定的流通性,其中一些语言非常受限。所以供应商会吹嘘他们的语言“强大”,因为它不受限制。
【讨论】:
它可以有多种含义。从最基本的意义上说,只要是可计算的,就有力量。从这个意义上说,最强大的语言是Turing Complete,它几乎包括所有通用编程语言(与大多数标记语言和通常不是图灵完备的领域特定语言相反)。
在更实用的意义上,它通常指的是您可以如何简洁(和易读)做某些事情。基本上,与另一种语言相比,用一种语言完成某些任务有多容易。
哪种语言更强大(除了有些主观)在很大程度上取决于您要做什么。如果您的要求是在具有 64k 内存的小型设备上运行某些东西,那么您可能不会使用 Java。最有可能正确的语言是 C 或 C++(或者如果你真的是硬核汇编)。如果您需要在 1 天内完成一个非常简单的 CRUD 应用程序,也许像 Ruby On Rails 之类的东西会是您的最佳选择(我知道 Rails 是一个框架,而 Ruby 是语言,但是这些天可用的库和框架是一个很大的因素选择一种语言)
【讨论】:
我认为,也许巧合的是,physics definition of power 与此处相关:“执行工作的速率。”
当然,烤面包机不会很快完成灭火工作。同样,编程语言的力量不是通用的,而是特定于它所应用的领域或任务。 C 是用于编写设备驱动程序或高级语言实现的强大语言; Python 是用于编写通用应用程序的强大语言; XPath 是一种用于在结构化数据集上编写查询的强大语言。
因此,给定一个问题域,一种语言的能力可以说是一个称职的程序员能够使用它来解决该域中的问题的速度。
【讨论】:
可以通过不假设定义“强大”(在语言环境中)的元素来自如此多的维度来尝试获得精确的答案。
看看有多少,还有很多会丢失:
这些和更多的参数共同描绘了“用某种语言编程”在 X 级别上的样子。这只是定义,唯一真正的知识来自使用语言的实际实践,但我离题了。
问题归结为哪个参数将代表语言的内在品质。如果你提到一种语言本身,它的最终、内在目的是“表达事物”,因此最具代表性的参数理所当然地是表达性,当有人谈论一种语言有多强大时,它也经常引起共鸣。
在您尝试扩大问题/答案以涵盖“作为一种语言,作为一种语言”的语言表达能力之外,您更多的是在谈论不同种类的“环境”、社会环境、发展环境、商业环境等。
根据要定义的环境的复杂性,您将不得不混合来自多个、巨大、重叠甚至有时相互矛盾的维度的更多参数,最终将失去获得定义的意义或问题将有缩小范围。
这种近似仍然无法回答“什么是表达性语言”,但同样,一个共同的理解是 Vineet 在其回答中很好地指出的定义,以及 Forest 在 cmets 中的评论。我同意,对我来说,“表达”就是“传达意义”。
【讨论】:
我记得大学里的许多教师都称他们教授的任何语言都“强大”。
让我思考:
强大 = 相对术语比较最新的编码方式与原始或以前的方式。
【讨论】:
我发现在讨论任何与软件相关的事情时使用“强大”这个词是没有用的。每次我的大学教授介绍一个新概念,例如多态性,他都会说“所以这是一个非常强大的功能”。过了一会我就生气了。如果一切都是强大的,那么什么都不是。这都一样。你可以编写代码来做任何事情。需要多少代码来做这件事真的很重要吗?你可以说它很短或很高效,但强大是没用的。核能很强大。代码就是文字。
【讨论】:
我认为功率通常是指它处理数据的速度,例如,我发现在 python 中,只要列表的长度超过大约。 2000 它变得慢得令人难以忍受,而在 C++ 中,一个列表可以轻松包含 20,000 个条目而无需这样做。
【讨论】: