在讨论编程语言时,“强大”意味着什么?

时间:2010-06-12 05:23:34

标签: programming-languages

在编程语言讨论/比较的背景下,术语“权力”是什么意思?

它有明确的含义吗?即使定义不明确?

如果有人说“语言X比语言Y更强大”或者问一个问题,他们是什么意思 - 或者他们试图找出什么信息?

14 个答案:

答案 0 :(得分:29)

它没有明确的含义。在这些类型的讨论中,“语言X比语言Y更强大”通常意味着“我喜欢语言X而不是语言Y”。另一方面,你也常常会有人知道任何图灵完整语言如何完成与任何其他图灵完整语言相同的任务,因此两者都不会比另一种更强大。

我认为它的好处是表现力。当语言具有高度表达力时,意味着表达概念所需的代码更少。对我而言,这并不仅仅意味着你必须编写更少的代码来完成相同的任务,而且代码很容易被人类阅读。当然,通常(到某一点),只需要更少的代码行就可以让人类更轻松地阅读和理解任务。

有一个“强大的”标准库在这里沿着相同的路线发挥作用。如果一种语言配备了完整,完整的库,那么该语言的惯用代码将能够从现有的库代码中受益,而不必重复或重新发明应用程序代码中的常见功能。最终结果是,必须编写和读取更少的代码才能完成相同的任务。

我一直在说“一般”和“到一定程度”,因为一旦语言过于简洁,人类就难以破译。我认为在这种极端情况下,语言可能仍被视为“更强大”(甚至“太强大”)。所以我想我说我对“强大”的个人解释也包含了“有用”和“可读”的一些方面。

答案 1 :(得分:22)

C功能强大,因为它级别较低,可让您访问硬件。 Python功能强大,因为您可以快速创建原型。 Lisp非常强大,因为它的REPL为您提供了极好的调试机会。 SQL很强大,因为你说出你想要的东西,而DMBS会找出最适合你的方法。 Haskell功能强大,因为每个函数都可以单独测试。 C ++非常强大,因为它的语法结构数量是任何一个人需要或使用的语法结构的十倍。 APL非常强大,因为它可以将十屏幕程序压缩成十个字符。地狱,COBOL很强大,因为......为什么所有银行都会使用它呢? :)

答案 2 :(得分:11)

“强大”没有真正的技术含义,但很多人提出了建议。

一些更有趣的:

  • 如果你能用更少的代码行编写相同的程序(或者其他一些理智的,合理的程序大小),Paul Graham想要称一种语言“更强大”。

  • Matthias Felleisen撰写了一篇名为On the Expressive Power of Programming Language的非常认真的理论研究。

作为知道并使用许多编程语言的人,我相信语言之间存在真正的差异,而“权力”可以方便地描述一种语言可能比另一种语言更好的方式。然而,每当我听到一种语言比另一种语言更强大的讨论或主张时,我倾向于将一只手牢牢地放在我的钱包上。

答案 3 :(得分:8)

在编程语言中描述“权力”的唯一有意义的方法是“可以用最少量的资源做我需要的”,其中“资源”被定义为“我不愿付出的任何成本”,并且可以,因此,是开发时间,CPU时间,内存空间,金钱等。

所以基本上“权力”的定义纯粹是主观的,在任何客观的讨论中都没有意义。

答案 4 :(得分:6)

强大意味着“高效率”。 “力量”可以提高你做事的能力。 “事物”的形状,大小和其他方面各不相同。因此,松散地说,当应用于编程语言时,“强大”意味着它可以帮助您快速有效地执行任务。

这使得“强大”在某种程度上得到了很好的定义,但并不是跨域的不变在一个域中强大的语言可能在另一个域中瘫痪,例如。如果你想进行系统级编程,C非常强大,因为它可以让你直接访问机器,硬件和结构,让你的编码速度比组装时快得多。 C编译器还生成运行速度快的代码。但是,一旦你转向Web应用程序,C就会变得非常“无能为力”而且会瘫痪,因为它需要付出很大的努力来完成并运行,你必须担心内存等很多无关的细节。

有时,语言在多个域中“强大”。这给了他们一个通用的“强大”标签(或徽章,因为这里是SO)。 PG的说法就是LISP就是这种情况。这可能是真的,也可能不是。

在一天结束时,“强大”是一个负载词,所以你应该评估谁在说,为什么他说这个以及它对你的工作意味着什么。

答案 5 :(得分:4)

人们担心的确只有两个含义:

“强大”意味着“需要更少的资源(时间,金钱,程序员,LOC等)来实现相同/更好的结果”,而“强大”的意思是“能够做得更广泛”任务范围“。

对于少量任务,某些语言极为资源有效。其他的不是那么资源有效,但可以应用于广泛的任务(例如,C,经常用于OS开发,编译器和运行时库的创建,以及与微控制器一起工作)。

当他们使用“强大”一词时,有人想到的这两个含义中的哪一个取决于上下文(即使那时并不总是清楚)。的确经常是两者兼而有之。

答案 6 :(得分:4)

通常有两个不同的含义:

  • 富有表现力,意味着代码往往非常简短易懂
  • 低级别,这意味着您可以非常精细地控制硬件。

对于大多数语言而言,这两个定义位于相反的两端: Python 非常具有表现力,但不是很低级别; C 级别很低但不太富有表现力。根据您选择的定义,语言功能强大功能强大

答案 7 :(得分:2)

它可以有多种含义。在非常基本的意义上,就可计算的东西而言,它具有强大的力量。从这个意义上说,最强大的语言是Turing Complete,其中包括几乎所有通用编程语言(与大多数标记语言和域特定语言相反,而这些语言通常不是图灵完整的。)

在更实际的意义上,它通常指的是你可以如何简洁(和可读)地做某些事情。基本上,用一种语言比另一种语言完成某些任务是多么容易。

哪种语言更强大(除了有点主观)在很大程度上取决于你想要做什么。如果您的要求是在具有64k内存的小型设备上运行某些东西,那么您可能不会使用Java。很可能正确的语言是C或C ++(或者如果你真的很难核心组装)。如果您需要在1天内完成一个非常简单的CRUD应用程序,可能会有类似Ruby On Rails的方法(我知道Rails是一个框架而Ruby是语言,但是现在库和框架可用的因素很大选择一种语言)

答案 8 :(得分:2)

什么都没有。

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

保罗·格雷厄姆是一个非常高级别的人,他必须说: http://www.paulgraham.com/avg.html

Java人员可能会告诉您一些关于可移植性的信息,以及到达每个平台的能力。

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

VHDL / Verilog程序员会告诉你它对每个时钟和门的完全控制,以免浪费任何电力或时间。

但在我看来,“强大的语言”支持您完成任务的所有功能。文档可能很重要,或者可能是可移植性,或者是执行图形的能力。它可能是任何东西,从大会写一个gui只是愚蠢的,所以试图在flash中设计一个嵌入式处理器。

选择一种完全符合您需求的语言总会感觉像是一种力量。

答案 9 :(得分:2)

我认为,或许巧合的是,physics definition of power与此相关:“执行工作的速度。”

当然,烤面包机不能很快完成灭火工作。类似地,编程语言的强大功能不是通用的,而是特定于应用它的域或任务。 C是用于编写设备驱动程序或更高级语言实现的强大语言; Python是一种用于编写通用应用程序的强大语言; XPath是一种用于在结构化数据集上编写查询的强大语言。

所以给定一个问题域,语言的力量可以说是一个有能力的程序员能够用它来解决该域中的问题的速度

答案 10 :(得分:1)

我认为这个术语是营销上的毛茸茸,没有一个定义明确的含义。

如果您考虑使用汇编程序,C和C ++。有时会有一个从C ++“下降”到C以满足特定需求,然后从C下降到汇编程序。因此,汇编程序最强大,因为它是唯一可以完成所有任务的语言。或者,换句话说,单行C ++代码可以替换几个C(例如通过函数指针隐藏多态分派),并且单行C替换许多汇编程序。所以C ++更强大,因为一行更“强”。

我认为,当早期数据库和电子表格等产品具有内置语言时,该术语会有一些货币,有些则相当受限制。所以供应商会说他们的语言“强大”,因为它受到的限制较少。

答案 11 :(得分:1)

通过不假设定义“强大”的元素(在语言的上下文中)来自如此多的维度,可以尝试达到精确的答案。

看看有多少可能会丢失很多东西:

  • 运行速度
  • 代码大小
  • 表现
  • 支持的范例
  • 开发/调试时间
  • 域名专业化
  • 标准库
  • 代码库
  • 工具链生态系统
  • 可移植性
  • 社区
  • 支持/文档​​
  • 普及
  • (在此处添加更多内容)

这些和更多参数汇总了X图像,“在某种语言中编程”将如何在X级别。但这只是定义,唯一真正的知识来自使用语言的实际做法,但我离题了。

问题归结为哪个参数代表语言的内在质量。如果您自己引用语言,其最终的内在目的是“表达事物”,因此最具代表性的参数是正确的 表现力< / em> ,当有人谈论语言的强大程度时,也会引起共鸣。

目前,你试图扩大问题/答案,而不仅仅是语言“作为一种语言,作为一种语言”的表达能力,你更多地谈论不同类型的“环境”,社会环境,发展环境,商业环境等。

根据要定义的环境的复杂性,您必须混合来自多个,大量,重叠且有时相互矛盾的维度的更多参数,并最终获得定义的点将丢失或问题将具有缩小。

这种近似仍然不会回答“什么是表达语言”,但同样,一个共同的理解是Vineet在其答案中指出的定义,以及评论中的Forest评论。我同意,对我而言,“表达”是“传达意义”。

答案 12 :(得分:0)

我记得很多大学教练都在说他们所教的语言“强大”。

让我思考:

强大=一个相对术语,比较最新的代码方式与原始方式或之前的方式。

答案 13 :(得分:-1)

我认为权力通常指的是处理数据的速度有多快,例如我发现只要列表超过大约的长度就会在python中发现。 2000年它变得难以忍受地缓慢,而在C ++中,列表很容易包含20,000个条目而没有这样做。