Programming languages 编程语言复杂性

Programming languages 编程语言复杂性,programming-languages,complexity-theory,Programming Languages,Complexity Theory,在语法和语义方面,是否有一个客观的方法来衡量编程语言的复杂性,而不是语言的使用复杂程度 我读过很多主观的评论,但很少有严谨的分析。语言的复杂程度多少有点主观 另一方面,关于语言语义有多复杂的问题是可以回答的,但只有与其他语言进行比较时才能回答。然而,这些并不一定有用。例如,我会给SMALLATE语义复杂度为1和C++复杂度为9。然而,我敢打赌,你正在阅读的浏览器是书面的 C++中,SimalTalk。 < P>如果有这样一个客观的度量,它对于评估给定语言的效用或成本来说是非常无用的。它可以帮助您

在语法和语义方面,是否有一个客观的方法来衡量编程语言的复杂性,而不是语言的使用复杂程度


我读过很多主观的评论,但很少有严谨的分析。

语言的复杂程度多少有点主观

另一方面,关于语言语义有多复杂的问题是可以回答的,但只有与其他语言进行比较时才能回答。然而,这些并不一定有用。例如,我会给SMALLATE语义复杂度为1和C++复杂度为9。然而,我敢打赌,你正在阅读的浏览器是书面的
C++中,SimalTalk。

< P>如果有这样一个客观的度量,它对于评估给定语言的效用或成本来说是非常无用的。它可以帮助您排除空白或脑力操,但这也可以很容易地做到,而无需花费资源在这样一个客观的衡量标准上,主观地观察源代码,并意识到您永远不想认真地使用它


大多数语言都会有很多积极和消极的方面,你需要根据你试图达到的目标和需要满足的条件来权衡这些方面。

我所见过的语言的最佳衡量标准是随机字符串成为有效程序的概率。Perl是一种在这个级别上排名很高的语言,Ada的排名相当低


这个度量的含义完全是另一个问题。

我不清楚复杂性在应用于编程语言时是否是一个定义良好的术语

如果你所说的“客观”是指“定量”,你可以问这样的问题

  • 明确的语法有多大

  • 一个有效的yacc语法有多大

由于几乎没有一种语言具有形式语义,因此很难进行任何定量研究。但是你可以问

  • 与使用相同元语言(编写解释器的语言)的其他语言的解释器相比,该语言的最简单解释器有多大?这一指标在某种程度上与Kolmogorov复杂性有关

除了出于好奇,我不清楚这个问题是否值得问,很难想象有用的答案

作为一般规则,语法、语义或实现越是动态和抽象,语言就越复杂(不要像您所说的那样使用)

因此,Java语言比C语言更复杂,因为:

  • 与Java相对复杂的规则相比,C具有简单的范围规则
  • 类型更复杂,方法解析和重载
  • 诸如固有性、参数枚举和检查、方法重载等使编译过程更加复杂
  • 在此基础上,我认为Python比Java更简单,因为它的对象模型虽然复杂,但简化为更简单的形式。从时间和计算的角度来看,将给定语法翻译成更简单形式的难度也可能是一个角度

    另一方面,一些人会争辩说,像lisp这样的语言使用起来很复杂,但非常简单。哈斯克尔也是如此

    您可以通过以下方式之一来度量复杂性,但这些方法是不完整的:

  • 一个简单问题的关键字数、代码行数和语义复杂性(如标识符解析)。斐波那契计算可能就是其中之一。比较常见算法的令人满意的高效实现
  • 什么时候发生?名称是在运行时延迟绑定的,还是在编译时解析的
  • 当没有给出标识符、类型和外部代码的所有事实时,给定的代码片段可以以多种方式理解吗
  • 有很多方法。您可以测量给定语法的编译过程的计算复杂性

    并非所有这些例子都是正确的。有些对象模型非常复杂,但是速度很快,因为它们使用了快速的基础。Self可能就是一个例子。

    语言是一个粗略的衡量标准——只是为了品味:)

    举几个例子,


    我喜欢欧拉项目对这一点的评估。:)

    最简单的两件完全客观的事情是语言定义的符号和关键字/保留字的数量,以及BNF中的产品数量

    对于那些拥有它们的语言,您可以看到的另一件事是它们的标准文档的相对大小。有些人可能会争辩说,并非所有标准文档都是在同一级别编写的。

    看一看:

    指称语义学是一种通过构造数学对象(称为指称)来形式化编程语言含义的方法,该数学对象描述语言表达式的含义

    编程语言的操作语义描述了如何将有效程序解释为计算步骤序列。这些序列就是程序的意义。在功能程序的上下文中,终止序列的最后一步返回程序的值。(通常,单个程序可能有许多返回值,因为该程序可能是不确定的,甚至对于确定性程序,也可能有许多计算序列,因为语义可能无法精确指定到达该值的操作序列。)


    我认为,如果你看一下正确性证明领域,你会发现对语义复杂性的更详细分析。像CSP这样的系统(在较小程度上,还有Lambda演算)被设计成可以通过分析进行处理。一种语言越接近于表达美国文化