编程语言
编程语言(英语:),是用来定义计算机进程的形式语言。它是一种被标准化的交流技巧,用来向计算机发出指令,一种能够让进程员准确地定义计算机所需要使用数据的计算机语言,并精确地定义在不同情况下所应当采取的行动。
「编程语言」的各地常用名称 | |
---|---|
中国大陆 | |
台湾 | |
港澳 |

Hello World
最早的编程语言是在电脑发明之前产生的,当时是用来控制提花织布机及自动演奏钢琴的动作[1]。在电脑领域已发明了上千不同的编程语言,而且每年仍有新的编程语言诞生。很多编程语言需要用指令方式说明计算的进程,而有些编程语言则属于声明式编程,说明需要的结果,而不说明如何计算。
编程语言的描述一般可以分为语法及语义。语法是说明编程语言中,哪些符号或文本的组合方式是正确的,语义则是对于编程的解释[2]。有些语言是用规格文档定义,例如C语言的规格文档也是ISO标准中一部份,2011年后的版本为ISO/IEC 9899:2017,而其他语言(例如Ada或者Perl)有一份编程语言实现文档,视为参考实现。
概论
编程语言原本设计是专用于计算机,也用来定义算法或者数据结构。故而进程员试图使进程代码容易阅读。

编程语言往往使进程员能够比使用机器语言更准确地表达他们所想表达的目的。对那些从事计算机科学的人来说,懂得进程设计语言是十分重要的,因为在当今所有的计算都需要进程设计语言才能完成。
之所以有那么多种不同的编程语言存在的原因是,编写进程的初衷其实也各不相同;新手与老手之间技术的差距非常小,而且有许多语言对新手来说太容易学;还有,不同进程之间的运行成本()各不相同。
有许多用于特殊用途的语言,只在特殊情况下使用。例如,PHP专门用来显示网页;Perl适合文本处理;C语言被广泛用于操作系统和编译器的开发(所谓的系统编程)。[3]
高级语言的出现使得计算机进程设计语言不再过度地依赖某种特定的机器或环境。这是因为高级语言在不同的平台上会被编译成不同的机器语言,而不是直接被机器执行。最早出现的编程语言FORTRAN的一个主要目标,就是实现平台独立。
虽然大多数的语言既可被编译又可被解译,但大多数仅在一种情况下能够良好运行。在一些编程系统中,进程要经过几个阶段的编译,一般而言,后阶段的编译往往更接近机器语言。这种常用的使用技巧最早在1960年代末用于BCPL,编译进程先编译一个叫做“0代码”的转换进程(),然后再使用虚拟器转换到可以运行于机器上的真实代码。这种成功的技巧之后又用于Pascal和P-code,以及Smalltalk和二进制码,在很多时候,中间过渡的代码往往是解译,而不是编译的。
如果所使用的翻译的机制是将所要翻译的进程代码作为一个整体翻译,并之后运行内部格式,那么这个翻译过程就被称为编译。因此,一个编译器是一个将人可阅读的进程文本(叫做源代码)作为输入的数据,然后输出可执行文档()。所输出的可执行文档可以是机器语言,由计算机的中央处理器直接运行,或者是某种模拟器的二进制代码。
如果进程代码是在运行时才即时翻译,那么这种翻译机制就被称作直译。经直译的进程运行速度往往比编译的进程慢,但往往更具灵活性,因为它们能够与执行环境互相作用。
特点
每一种进程设计语言可以被看作是一套包含语法、词汇和含义的正式规范。
这些规范通常包括:
编程语言不成文规定:
- 标识符()命名常规
大多数被广泛使用或经久不衰的编程语言,拥有负责标准化的组织,经常会晤来创造及发布该编程语言的正式定义,并讨论扩展或贯彻现有的定义。
数据和数据结构
现代计算机内部的数据都只以二元方式储存,即开-关模式()。现实世界中代表信息的各种数据,例如名字、银行账号、度量以及同样低端的二元数据,都经由进程设计语言整理,成为高阶的概念。
一个进程中专门处理数据的那个系统被称为进程语言的类型系统();对类型系统的研究和设计被称为类型理论()。语言可以被分为静态类型系统(),例如C++和Java,和动态类型系统(),例如Lisp,JavaScript,Tcl和Prolog。前者可被进一步分为包含声明类型()的语言,即每一个变量和函数的类型都清楚地声明,或type-inferred语言(例如MUMPS,ML)。
大多数语言还能够在内置的类型基础上组合出复杂的数据结构类型(使用数组,列表,堆栈,文档等等)。面向对象语言(,又译作“对象导向语言”)允许进程员定义新的数据类型,即对象(),以及运行于该对象的函数()和方法()。
除了何时以及如何确定表达式和类型的联系,另外一个重要的问题就是语言到底定义了哪些类型,以及允许哪些类型作为表达式的值。诸如C编程语言之类的底层语言允许进程命名内存位置、内存区域以及编译时的常量;ANSI C甚至允许表达式返回结构值()。功能性的语言一般允许变量直接使用运行时计算出的值,而不是指出该值可能储存的内存地址。
常见的数据结构:
功能
编程语言可借助机械、电机、电子、电脑、手机完成人类需求的计算、功能与目的。
实体的传输链接
通过低级编程语言或高端编程语言,将实体间接达成传输链接或控制实体。
应用程序的发展
高阶编程语言可发展多功能的应用进程软件,例如工程计算、操作系统、文档处理、播放软件、网页设计、手机应用程序(App)等。
使用
编程语言已超过上千种,大部份用在计算领域[4]。编程语言和人类使用的自然语言在精确度和完整性上有很大的差异。
人们在用自然语言沟通时,内容可以不明确,甚至小的错误,而听的人仍然可能理解说的人想要说的内容。但电脑不同,电脑「只做被告知要做的事」,无法理解编程者想要写的程序。语言的定义、编程以及编程输入的组合需完整定义程序运行时的外部特性。另一方面,算法的概念可以表示为伪代码抑或者为编成码,是交织有自然语言和代码的编程语言,和其他人沟通时使用,此时就不一定要那么精确。
编程语言提供定义片段数据的结构化机制,以及在数据中需自动进行的运算或是转换。编程者利用编程语言提供的抽象化来表示计算的相关概念,这些概念则是由许多最简单元素(称为语言基元)的集合所组成[5]。进程设计就是指利用语言基元来撰写新的程序,或是将旧程序改写,配合新的应用或是新的环境。
电脑编程语言可能是以批处理任务的方式运行,中间不需和用户交互,也有可能是由用户在解释器中指定运行特定的的程序。若某一编程语言的是目的是在某一应用软件(如Unix shell)或其他命令行接口运行其他程序,此编程语言会称为脚本语言。
衡量各编程语言的使用量
很难去比较哪一种编程语言的使用量最大,而且「使用量」一词也很难定义。某一种编程语言可能需要较多的时间进行开发,另一种编程语言可能产生的代码较长,第三种编程语言可能在CPU中运行的时间较长。有些语言在特定的领域十分受欢迎,例如COBOL在公司的数据中心仍相当常用,多半是在大型计算机上运行[6][7],Fortran常用在科学及工程应用,C语言常用在嵌入式设备应用及操作系统,Perl常用于系统管理和文本处理,JavaScript用于网页等。
有许多不同的测量编程语言使用的程度的方法,不同的测量方式各有误差:
- 计算征才广告中提到各编程语言的次数[8]。
- 计算教授或描述各编程语言书籍卖出的数量[9]。
- 占计各编程语言目前仍在使用代码的长度,不过可能会低估一些公开搜索不容易找到的编程语言[10]。
- 利用搜索引擎计算找到不同编程语言的次数。
根据TIOBE指数在2022年3月,十大最受欢迎的语言如下:Python、Visual Basic .NET、C、C++、C#、Java、JavaScript、PHP、汇编语言及SQL.[11]。
历史
1940年代当计算机刚刚问世的时候,进程员必须手动控制计算机。当时的计算机十分昂贵,唯一想到利用进程设计语言来解决问题的人是德国工程师康拉德·楚泽。
几十年后,计算机的价格大幅度下跌,而计算机进程也越来越复杂。也就是说,开发时间已经远比运行时间宝贵。
于是,新的集成、可视的开发环境越来越流行。它们减少了所付出的时间、金钱(以及脑细胞)。只要轻敲几个键,一整段代码就可以使用了。这也得益于可以重用的进程代码库[12]。
参考文献
- Ettinger, James (2004) Jacquard's Web, Oxford University Press
- . .nuu.edu.tw. [2014-06-05]. (原始内容存档于2014-05-28).
- MXL
- . Australia: Murdoch University. [2009-06-01]. (原始内容存档于2011年2月20日).
This site lists 8512 languages.
- Abelson, Sussman, and Sussman. . [2009-03-03]. (原始内容存档于2009年2月26日).
- Georgina Swan. . computerworld.com.au. 2009-09-21 [2013-10-19]. (原始内容存档于2013-10-19).
- Ed Airey. . developer.com. 2012-05-03 [2013-10-19]. (原始内容存档于2013-10-19).
- Nicholas Enticknap. . Computerweekly.com. [2013-06-14]. (原始内容存档于2011-10-26).
- . Radar.oreilly.com. 2006-08-02 [2010-12-03]. (原始内容存档于2008年5月17日).
- Bieman, J.M.; Murdock, V., Finding code on the World Wide Web: a preliminary investigation, Proceedings First IEEE International Workshop on Source Code Analysis and Manipulation, 2001
- . TIOBE. 2022-03 [2022-04-07]. (原始内容存档于2018-02-25).
- Steven R. Fischer,. . Reaktion Books,. 2003,. ISBN 186189080X.
延伸阅读
- Abelson, Harold; Sussman, Gerald Jay. 2nd. MIT Press. 1996. (原始内容存档于2018年3月9日).
- Raphael Finkel: Advanced Programming Language Design, Addison Wesley 1995.
- Daniel P. Friedman, Mitchell Wand, Christopher T. Haynes: Essentials of Programming Languages, The MIT Press 2001.
- Maurizio Gabbrielli and Simone Martini: "Programming Languages: Principles and Paradigms", Springer, 2010.
- David Gelernter, Suresh Jagannathan: Programming Linguistics, The MIT Press 1990.
- Ellis Horowitz (ed.): Programming Languages, a Grand Tour (3rd ed.), 1987.
- Ellis Horowitz: Fundamentals of Programming Languages, 1989.
- Shriram Krishnamurthi: Programming Languages: Application and Interpretation, online publication (页面存档备份,存于).
- Bruce J. MacLennan: Principles of Programming Languages: Design, Evaluation, and Implementation, Oxford University Press 1999.
- John C. Mitchell: Concepts in Programming Languages, Cambridge University Press 2002.
- Benjamin C. Pierce: Types and Programming Languages, The MIT Press 2002.
- Terrence W. Pratt and Marvin V. Zelkowitz: Programming Languages: Design and Implementation (4th ed.), Prentice Hall 2000.
- Peter H. Salus. Handbook of Programming Languages (4 vols.). Macmillan 1998.
- Ravi Sethi: Programming Languages: Concepts and Constructs, 2nd ed., Addison-Wesley 1996.
- Michael L. Scott: Programming Language Pragmatics, Morgan Kaufmann Publishers 2005.
- Robert W. Sebesta: Concepts of Programming Languages, 9th ed., Addison Wesley 2009.
- Franklyn Turbak and David Gifford with Mark Sheldon: Design Concepts in Programming Languages, The MIT Press 2009.
- Peter Van Roy and Seif Haridi. Concepts, Techniques, and Models of Computer Programming, The MIT Press 2004.
- David A. Watt. Programming Language Concepts and Paradigms. Prentice Hall 1990.
- David A. Watt and Muffy Thomas. Programming Language Syntax and Semantics. Prentice Hall 1991.
- David A. Watt. Programming Language Processors. Prentice Hall 1993.
- David A. Watt. Programming Language Design Concepts. John Wiley & Sons 2004.
外部链接
- 开放式目录计划中和Computer Programming Languages相关的内容
- 开放式目录计划中和编程语言相关的内容
- Syntax Patterns for Various Languages (页面存档备份,存于)