编程语言概要
编辑编程语言是一种形式语言包括一组指令产生各种输出。编程语言用于计算机编程中以实现算法。
大多数编程语言包括指令的计算机。有些可编程机器使用一组特定的指令,而不是通用的编程语言。自1800年代初期以来,就一直使用程序来控制诸如提花织机,音乐盒和弹奏钢琴之类的机器的行为。这些机器的程序(例如,演奏者的钢琴卷轴)对于不同的输入或条件没有产生不同的行为。
已经创建了成千上万种不同的编程语言,并且每年都在创建更多的编程语言。许多编程语言是以命令式形式(即,作为要执行的一系列操作)编写的,而其他语言则使用声明式形式(即,指定了所需的结果,而不是如何实现)。
编程语言的描述通常分为语法(形式)和语义(含义)两个部分。某些语言由规范文档定义(例如,C编程语言由ISO标准指定),而其他语言(例如Perl)则具有占主导地位的实现,被视为参考。某些语言既具有标准定义的基本语言,又具有从主导实现中进行的扩展的通用性。
编程语言的定义
编辑编程语言是编写程序的一种表示法,它是计算或算法的规范。一些作者将术语“编程语言”限制为可以表达所有可能算法的语言。通常被认为对构成编程语言很重要的特征包括:
-
功能和目标
- 计算机编程语言是一种语言用于写的计算机程序,其涉及一个计算机执行某种计算或算法和可能的控制外部设备,如打印机、磁盘驱动器、机器人等。例如,PostScript程序通常由另一个程序创建以控制计算机打印机或显示器。更一般地,编程语言可以描述某些可能是抽象的机器上的计算。公认的是,一种编程语言的完整规范包括对该语言的机器或处理器的描述(可能是理想的)。在大多数实际情况下,编程语言涉及计算机。因此,通常以这种方式定义和研究编程语言。编程语言与自然语言的不同之处在于,自然语言仅用于人与人之间的交互,而编程语言还允许人类将指令传达给机器。
抽象化
- 编程语言通常包含用于定义和操作数据结构或控制执行流程的抽象。抽象原理表示了一种编程语言支持足够抽象的实际必要性。有时将此原则表述为对程序员的建议,以正确使用此类抽象。
表现力
- 在计算理论通过他们能够表达的计算分类语言。所有图灵完备的语言都可以实现相同的算法集。ANSI / ISO SQL-92和Charity是图灵不完整的语言示例,但通常被称为编程语言。
诸如XML、HTML或troff之类的标记语言定义了结构化数据,通常不被视为编程语言。但是,如果定义了计算语义,则编程语言可以与标记语言共享语法。例如,XSLT是完全使用XML语法的图灵完整语言。此外,主要用于结构化文档的LaTeX还包含一个图灵完整子集。
术语“计算机语言”有时可以与编程语言互换使用。但是,这两个术语的用法在作者之间有所不同,包括每个术语的确切范围。一种用法将编程语言描述为计算机语言的子集。类似地,在计算中使用的语言与表达计算机程序的目标不同的语言是通用指定的计算机语言。例如,标记语言有时被称为计算机语言,以强调它们并非旨在用于编程。
另一种用法是将编程语言视为用于对抽象机进行编程的理论构造,而将计算机语言视为在具有有限硬件资源的物理计算机上运行的子集。约翰·C·雷诺兹(John C. Reynolds)强调,形式规范语言与旨在执行的语言一样,都是编程语言。他还认为,影响计算机行为的文本甚至图形输入格式都是编程语言,尽管事实上它们通常不是图灵完备的,并且指出对编程语言概念的无知是输入格式存在许多缺陷的原因。
编程语言的设计与实现
编辑编程语言与与自然语言相关的属性与其作为通讯工具的目的有关,它们的语法形式与其语义分开,并显示出彼此分支的相关语言的语言族。但作为人工构造,它们在根本上也与通过用法演变的语言有所不同。一个重要的区别是,由于编程语言具有精确且有限的定义,因此可以对其进行完整地描述和研究。相反,自然语言在不同社区中的用户赋予其不断变化的含义。虽然人工语言 也是出于特定目的从头开始设计的人工语言,它们缺乏编程语言所具有的精确而完整的语义定义。
许多编程语言都是从头开始设计的,为了满足新的需求而进行了更改,并与其他语言结合使用。许多最终都被废弃了。尽管已经尝试设计一种可以满足所有目的的“通用”编程语言,但是所有这些语言都未能被普遍接受以填补这一角色。对多种编程语言的需求源于使用语言的上下文的多样性:
- 程序范围从单个业余爱好者编写的小脚本到数百个程序员编写的大型系统。
- 程序员的专业知识范围很广,从最需要简单的新手到可能会感到相当复杂的专家。
- 程序必须在从微控制器到超级计算机的系统上平衡速度,大小和简单性。
- 程序可以编写一次,并且不会代代改变,也可以进行不断的修改。
- 程序员的品味可能会有所不同:他们可能习惯于讨论问题并以特定语言表达问题。
编程语言发展的一个共同趋势是增加了使用更高层次的抽象来解决问题的能力。最早的编程语言与计算机的基础硬件紧密联系在一起。随着新的编程语言的发展,已添加了一些功能,这些功能使程序员可以表达从简单转换为底层硬件指令的想法。由于程序员与计算机的复杂性关系不大,因此他们的程序可以用较少的精力进行更多的计算。这使他们可以按时间单位编写更多功能。
已经提出了自然语言编程作为消除对编程专用语言的需要的一种方式。但是,这个目标仍然遥遥无期,其利益尚有待商debate。Edsger W. Dijkstra的立场是,使用正式语言对于防止引入无意义的结构是必不可少的,因此将自然语言编程视为“愚蠢的”。艾伦·佩里斯(Alan Perlis)同样不屑一顾。在结构化英语和SQL中采用了混合方法。
语言的设计者和用户必须构造许多工件,这些工件支配并支持编程实践。这些工件中最重要的是语言规范和实现。
规格
编程语言的规范是一种语言产物,用户和实现者可以使用该语言来约定源代码是否是该语言中的有效程序,如果是,则其行为应如何。
编程语言规范可以采取几种形式,包括以下几种:
- 语言的语法,静态语义和执行语义的明确定义。虽然通常使用形式语法来指定语法,但是可以使用自然语言(例如,如C语言)或形式化语义(例如,如Standard ML和Scheme 规范)来编写语义定义。
- 语言翻译器行为的描述(例如C ++和Fortran规范)。必须从该描述中推断出该语言的语法和语义,该描述可以用自然语言或形式语言编写。
- 甲参考或模型实现,有时被指定写入语言(例如,序言或ANSI REXX )。语言的语法和语义在参考实现的行为中是明确的。
实施
编程语言的实现提供了一种使用该语言编写程序并在一个或多个硬件和软件配置上执行它们的方法。广义上讲,有两种方法可以实现编程语言:编译和解释。通常可以使用任何一种技术来实现一种语言。
编译器的输出可以由硬件或称为解释器的程序执行。在一些使用解释器方法的实现中,在编译和解释之间没有明显的界限。例如,BASIC的某些实现会先编译然后在一行中执行源代码。
直接在硬件上执行的程序通常比在软件中解释的程序运行快得多。
改善解释程序性能的一种技术是即时编译。在这里,虚拟机在执行之前就转换了将用于机器码的字节码块,以便在硬件上直接执行。
内容由匿名用户提供,本内容不代表vibaike.com立场,内容投诉举报请联系vibaike.com客服。如若转载,请注明出处:https://vibaike.com/120384/