我经常看到人们为自己喜欢的语言比其他语言更“强大”而争论不休。在描述一种编程语言时,我可以理解什么是面向对象的语言或什么是动态语言,但是我仍然无法弄清楚到底什么是“强大”的语言。你怎么看?
我经常看到人们为自己喜欢的语言比其他语言更“强大”而争论不休。在描述一种编程语言时,我可以理解什么是面向对象的语言或什么是动态语言,但是我仍然无法弄清楚到底什么是“强大”的语言。你怎么看?
Answers:
如果不先定义“强大”一词,就无法定义什么是“强大”语言。
功率的字面定义将是“效能”,我想我们都可以同意,绝大多数编译器-甚至许多图灵不完整的解释器-在使处理器执行其指令方面也表现出色。因此,就字面定义而言,问题的答案将是“几乎所有语言”。
实际上,我们真的应该到此为止。定义“强大的语言”有点像定义“好人”或“优质产品”。这些词绝对没有客观的定义可以让所有人甚至大多数专家都同意,而大多数定义最终只是在乞求这个问题。根据与您交谈的人的不同,权力可能来自以下任何一种:
大家都看到这里发生了什么吗?实际上,每个项目要点特征都可以解释为“力量”的标志,因此也可以完全相反!
某个地方的某人显然认为变量是一个了不起的主意,它将使该语言变得非常强大。我不会判断;我不是一个PHP家伙。
我建议我们都使用以下“真正简单的定义”来代替所有这些神圣的废话:
最强大的语言是使您能够在最短的时间内以最低的成本交付最高质量的产品的语言。
模糊?完全正确。这就是为什么任何想称呼自己为专业人员的人都必须了解编程概念和项目领域的知识。这是唯一能够决定什么对您“强大”的方法。
否则,您可能只是带着一把大刀进行枪战。
我可能有偏见,因为我是一名系统程序员。我认为一种用于所有内核,系统,服务器和应用程序编程的编程语言,或者支持多种编程范例,或者两者都可以称为“强大”。
C,C ++,D功能强大,但这显然只是我的拙见。
除图灵完整性外,还有一些关于功率的定义。马克引用了我倾向于认为的“保罗·格雷厄姆定义”。这是一个很好的定义,但有一个严重缺陷:这是错误的。从理论上讲,这是对语言能力的很好定义,但您知道他们对理论与实践之间的区别所说的话...
如果每个人都能够始终如一地编写完美的代码,不仅完全没有错误,而且完全能够面向未来,那么Paul Graham的定义将是正确的。但这显然不是事实。在现实世界中,投入软件工程的大部分时间和精力不是最初创建产品所花费的,而是随后的维护。根据您所听的统计信息(项目之间的差异可能很大),维护可占计划总工作量的60%至90%。
维护通常是由最初编写代码的人以外的人员执行的,并且通常在最初编写代码后的几个月甚至几年内执行维护工作,这意味着即使对于原始编码人员而言,维护也可能是“其他人的代码”点。如果要在维护过程中提高工作效率,则需要能够通过阅读来快速确定代码的原始意图。
因此,一种更强大的语言是使代码更易于快速阅读的语言,而不是使代码更易于快速编写的语言。两者之间往往有相当多的重叠,但是这些概念也常常是互用的,因为简洁的语法通常会忽略细节,即编译器/解释器比维护程序员更容易推断出细节。
编辑:在描述语言的力量时,还有一个重要的要点:您能够表达的概念范围以及如何轻松地达到目标的两端。保罗·格雷厄姆(Paul Graham)喜欢评估您可以达到的抽象水平的高低,但这只是其中的一半。任何施加抽象下限的语言都会被削弱,因为在某种程度上您无法在必要时使用它,因为被抽象掉的细节是有原因的。这就是易读的玩具语言(如COBOL)和易读的强大语言之间的区别:COBOL没有指针,也无法访问内联汇编,在其中您可以表达任何计算,甚至是COBOL不适合的计算。
COBOL也不擅长达到抽象范围的高端。根据Wikipedia的说法,它“没有用户定义的类型,也没有用户定义的功能”,这使得创建算法和数据结构非常困难。
对此进行了长时间的反复辩论(例如,在comp.lang.lisp上已多次讨论)。我认为没有人会提出“正确”的答案,但是很多人都提出了使我感到明显错误的答案。
在这里看到的答案中,让我选择梅森·惠勒的答案。一方面,他所涵盖的问题很重要-但另一方面,我完全无法想象将其称为“权力”。这有点像他在说他的本田微型厢式货车比顶级燃料的Dragster更强大,因为它更安全,更安静,操控性更好,乘客空间更大,乘坐舒适性更高。所有这些都是绝对正确的,而且非常重要。这些因素(除其他因素外)使小型货车对大多数人来说更加实用和合理-但它们并没有改变小型货车的发动机仅产生约250马力而大型货车的发动机约产生8000马力的事实。
当然,问题在于车辆对“动力”的构成有一个明确的定义。对于编程语言,在我看来,讨论最终等同于将操纵性,舒适性,速度,载货量和巡航范围视为“动力”的一部分。结果往往是螺纹不断延伸,产生的热量比光大得多。出现的大多数问题基本上都取决于您对完全不相关且正交的功能的重视程度,例如,使用汇编语言对MMU进行编程的能力比创建更高级别功能的能力“或多或少”“强大”在Haskell?至少IMO,没有比较有意义的方法来比较两者,也没有有意义的答案是“
因此,我讨厌我不得不说的是,在这种情况下,唯一有意义的答案基本上是相对论的-一种强大的语言是您发现可以帮助您完成想要的事情的一种语言。人民目标的差异使大多数“绝对”的权力衡量充其量是毫无意义的。
简洁与灵活的完美平衡。
好问题。鉴于许多语言都在“完善”中,因此我们可以在理论上将它们置于平等的基础上。但是我们不这样做,因为语言显然彼此不同。有什么区别?
区别在于能够用很少的钱说出很多不同的事情的能力。如果我们可以跳到最极端,那么我可以选择一种语言,它是仅使用一个字符'c'自动初始化内容管理系统的最佳语言。但是那是什么意思呢?当然,从简短的角度来说,它很强大,但并不灵活。您想要的是一种语言,它可以让您说出许多不同的复杂事物而不会太冗长。无需像组装一样,能够在阳光下进行所有操作,具有无限的灵活性,但极其冗长。
强大的语言是一种允许您以尽可能短的长度说出许多不同的东西的语言。
一旦您选择了图灵完备语言(一种语言很容易做到),那么“力量”就没有多大意义,因为您可以用一种图灵完备语言说的任何东西都可以用另一种语言讲。马克·坎拉斯(Mark Canlas)的回答很明确:简洁和灵活性与众不同。
话虽如此,马蒂亚斯·费莱森(Matthias Felleisen)的论文《编程语言的表现力》令人感兴趣。在其中,他试图形式化语言中的表现力概念。
在什么构成语言能力方面似乎存在很多分歧。是简洁,易读,适应性强,还是仅仅是图灵的完整?我认为所有这些因素都可以发挥作用,因此最好的观察方法是统计数据。是的,我在这里说的是纸和纸RPG。
这个想法是,每种语言都有(大约)相同数量的“点”,可以在多个类别中任意分布。为了讨论的目的,说的唯一因素是简洁,易读和灵活。这样一门语言可能会非常简洁和灵活,但因此很难阅读。或清晰易读,但非常冗长。
(可以说,一种语言必须分配的点数是由设计者和实现者的技能定义的,但让我们假设所有语言设计者都同样擅长于他们的工作。)
当语言设计师决定增加一种类别的语言强度时,他们在逻辑上会从其他类别中夺走一部分潜在强度。这就是为什么经常说编程语言设计是权衡取舍的原因。从这个角度来看,语言的整体功能仍然不确定,我们必须恢复到基于语言的相对优势对语言进行分类的可靠方法。不满意吗?太糟糕了。
您可以用两种方法争论:一种功能强大的语言是一种具有相对均匀的点分布(所有交易的插孔,没有主宰的语言),或者在一个区域中具有尽可能多的点而没有其他人无人值守的语言(专家)。没有“文艺复兴时期的人”这样的语言,在许多领域都具有完美的掌握。如果那是您对最强大的语言的定义,那么您就很走运了。
如要进一步了解,这篇文章(巧合的是也是由保罗·格雷厄姆,谁似乎有不同的意见)触及的想法是,尽管有困难可能是要确定如何,编程语言的力量的确有所不同。他颇具说服力地指出,很容易看到一种语言不如您所喜欢的语言强大的功能-它缺少功能X-但很难看到一种实际上更强大的语言实际上-基本上等同于语言X,但是还有很多其他东西。我给你引述那篇论文的话:
通过归纳法,唯一能够看到各种语言之间功能差异的程序员就是那些理解能力最强的程序员。(这可能就是Eric Raymond所说的Lisp,使您成为一个更好的程序员的意思。)由于Blub悖论,您不能相信其他人的意见:他们对碰巧使用的任何语言都很满意,因为它决定了语言的正确性。他们对程序的思考方式。
编程语言是工具-仅此而已。一些工具非常专业,非常适合特定目的。其他的则被概括和简化到几乎无用的地步。
我认为最“强大”的语言是一种使您以最少的时间,精力和其他精力投入实现目标的语言。即提供最大投资回报率的语言。在某些情况下,它可能是C。在其他方面,Java;还有其他人,Haskell。
最好的办法是使自己熟悉各种语言以及它们的用处。然后,当需要开始一个新项目时,您可以就哪个最合适做出明智的决定。
关于编程语言的讨论-IMHO-就像一些Linux新闻组中有关邮件客户端的讨论一样:它们往往是一场烈火战。我记得VB6流行的时代。甚至有人争论说这根本不是编程语言,而其他人则用它创造了令人惊叹的应用程序。
我认为编程语言在概念上已经有所不同,因为创建者在创建/设计语言时会想到不同的东西。因此,适合一个目的的语言(在这种情况下功能强大)可能不适合另一个目的。因此,将语言命名为功能强大与否,纯粹是主观的。就是说,我认为没有可以应用的指标。
最强大的编程语言是解决以下线性编程问题的语言:
最大化
受制于
(是的,我知道,我已经发布了一个完全矛盾的答案。这是因为我是辩证人。)
这是针对自然语言编写的,但我认为它也适用于编程语言:
人们普遍认为某些语言在本质上要优于其他语言,但这在语言事实上没有依据。当然,在特定的历史时期,某些语言比其他语言更有用或更有声望,但这是由于当时的讲者占主导地位,而不是由于任何固有的语言特征。
-戴维·克里斯特(David Crystal)。剑桥语言百科全书2 / e(1997)。第7页
“权力”根本不属于一种语言,而是另一种语言。说“汉语比朝鲜语更强大”是很愚蠢的。同样,说“ APL比COBOL更强大”是很愚蠢的。
已经进行了几次尝试,以某种客观的方法来等同于语言能力。我相信这些尝试都会失败:
我的观点是,“一种语言对另一种语言的力量”的讨论是说话者相对于其他群体的优越感的蒙蔽表达。简而言之,它的偏见和成见。当然,那些确实有偏见的人真的非常相信自己的刻板印象,而且不太可能说服他们改变主意。