编程语言
目录
编程语言概要
编程语言是一种形式语言包括一组指令产生各种输出。编程语言用于计算机编程中以实现算法。
大多数编程语言包括指令的计算机。有些可编程机器使用一组特定的指令,而不是通用的编程语言。自1800年代初期以来,就一直使用程序来控制诸如提花织机,音乐盒和弹奏钢琴之类的机器的行为。这些机器的程序(例如,演奏者的钢琴卷轴)对于不同的输入或条件没有产生不同的行为。
已经创建了成千上万种不同的编程语言,并且每年都在创建更多的编程语言。许多编程语言是以命令式形式(即,作为要执行的一系列操作)编写的,而其他语言则使用声明式形式(即,指定了所需的结果,而不是如何实现)。

编程语言的描述通常分为语法(形式)和语义(含义)两个部分。某些语言由规范文档定义(例如,C编程语言由ISO标准指定),而其他语言(例如Perl)则具有占主导地位的实现,被视为参考。某些语言既具有标准定义的基本语言,又具有从主导实现中进行的扩展的通用性。
编程语言的定义
编程语言是编写程序的一种表示法,它是计算或算法的规范。一些作者将术语“编程语言”限制为可以表达所有可能算法的语言。通常被认为对构成编程语言很重要的特征包括:
-
编程语言的设计与实现
编程语言与与自然语言相关的属性与其作为通讯工具的目的有关,它们的语法形式与其语义分开,并显示出彼此分支的相关语言的语言族。但作为人工构造,它们在根本上也与通过用法演变的语言有所不同。一个重要的区别是,由于编程语言具有精确且有限的定义,因此可以对其进行完整地描述和研究。相反,自然语言在不同社区中的用户赋予其不断变化的含义。虽然人工语言 也是出于特定目的从头开始设计的人工语言,它们缺乏编程语言所具有的精确而完整的语义定义。
许多编程语言都是从头开始设计的,为了满足新的需求而进行了更改,并与其他语言结合使用。许多最终都被废弃了。尽管已经尝试设计一种可以满足所有目的的“通用”编程语言,但是所有这些语言都未能被普遍接受以填补这一角色。对多种编程语言的需求源于使用语言的上下文的多样性:
- 程序范围从单个业余爱好者编写的小脚本到数百个程序员编写的大型系统。
- 程序员的专业知识范围很广,从最需要简单的新手到可能会感到相当复杂的专家。
- 程序必须在从微控制器到超级计算机的系统上平衡速度,大小和简单性。
- 程序可以编写一次,并且不会代代改变,也可以进行不断的修改。
- 程序员的品味可能会有所不同:他们可能习惯于讨论问题并以特定语言表达问题。
编程语言发展的一个共同趋势是增加了使用更高层次的抽象来解决问题的能力。最早的编程语言与计算机的基础硬件紧密联系在一起。随着新的编程语言的发展,已添加了一些功能,这些功能使程序员可以表达从简单转换为底层硬件指令的想法。由于程序员与计算机的复杂性关系不大,因此他们的程序可以用较少的精力进行更多的计算。这使他们可以按时间单位编写更多功能。
已经提出了自然语言编程作为消除对编程专用语言的需要的一种方式。但是,这个目标仍然遥遥无期,其利益尚有待商debate。Edsger W. Dijkstra的立场是,使用正式语言对于防止引入无意义的结构是必不可少的,因此将自然语言编程视为“愚蠢的”。艾伦·佩里斯(Alan Perlis)同样不屑一顾。在结构化英语和SQL中采用了混合方法。
语言的设计者和用户必须构造许多工件,这些工件支配并支持编程实践。这些工件中最重要的是语言规范和实现。
规格
编程语言的规范是一种语言产物,用户和实现者可以使用该语言来约定源代码是否是该语言中的有效程序,如果是,则其行为应如何。
编程语言规范可以采取几种形式,包括以下几种:
- 语言的语法,静态语义和执行语义的明确定义。虽然通常使用形式语法来指定语法,但是可以使用自然语言(例如,如C语言)或形式化语义(例如,如Standard ML和Scheme 规范)来编写语义定义。
- 语言翻译器行为的描述(例如C ++和Fortran规范)。必须从该描述中推断出该语言的语法和语义,该描述可以用自然语言或形式语言编写。
- 甲参考或模型实现,有时被指定写入语言(例如,序言或ANSI REXX )。语言的语法和语义在参考实现的行为中是明确的。
实施
编程语言的实现提供了一种使用该语言编写程序并在一个或多个硬件和软件配置上执行它们的方法。广义上讲,有两种方法可以实现编程语言:编译和解释。通常可以使用任何一种技术来实现一种语言。
编译器的输出可以由硬件或称为解释器的程序执行。在一些使用解释器方法的实现中,在编译和解释之间没有明显的界限。例如,BASIC的某些实现会先编译然后在一行中执行源代码。
直接在硬件上执行的程序通常比在软件中解释的程序运行快得多。
改善解释程序性能的一种技术是即时编译。在这里,虚拟机在执行之前就转换了将用于机器码的字节码块,以便在硬件上直接执行。