本页使用了标题或全文手工转换

编程语言

维基百科,自由的百科全书
跳到导航 跳到搜索
“编程语言”的各地常用别名
中国大陆 程序设计语言、编程语言
台湾 程式设计语言、程式语言
港澳 程式设计语言、程式语言
编程语言中的经典语句:
Hello World

编程语言(英语:programming language),是用来定义计算机程序形式语言。它是一种被标准化的交流技巧,用来向计算机发出指令。一种计算机语言让程序员能够准确地定义计算机所需要使用的数据,并精确地定义在不同情况下所应当采取的行动。

最早的编程语言是在电脑发明之前产生的,当时是用来控制提花织布机英语Jacquard loom自动演奏钢琴的动作[1]。在电脑领域已发明了上千不同的编程语言,而且每年仍有新的编程语言诞生。很多编程语言需要用指令方式说明计算的程序,而有些编程语言则属于宣告式程式设计,说明需要的结果,而不说明如何计算。

编程语言的描述一般可以分为语法英语Syntax (programming languages)语义。语法是说明编程语言中,哪些符号或文字的组合方式是正确的,语义则是对于编程的解释[2]。有些语言是用规格文件定义,例如C语言的规格文件也是ISO标准中一部份,2011年后的版本为ISO/IEC 9899:2017,而其他55语言(像Perl)有一份主要的编程语言实现英语Programming language implementation文件,视为是参考实现英语reference implementation

概论[编辑]

编程语言原本是被设计成专门使用在计算机上的,但它们也可以用来定义算法或者数据结构。正是因为如此,程序员才会试图使程序代码更容易阅读

BBC BASIC语言显示在萤幕上

编程语言往往使程序员能够比使用机器语言更准确地表达他们所想表达的目的。对那些从事计算机科学的人来说,懂得程序设计语言是十分重要的,因为在当今所有的计算都需要程序设计语言才能完成。

目前发明了许多的编程语言,编程语言本身可能修改以符合新需求,或是和其他的编程语言结合使用,尽管人们多次试图创造可以符合所有需求的通用程式语言,但以“符合所有需求”的标准来看,这些尝试都失败了[来源请求]。之所以有那么多种不同的编程语言存在的原因是,编写程序的初衷其实也各不相同;新手与老手之间技术的差距非常小,而且有许多语言对新手来说太容易学;还有,不同程序之间的运行成本(runtime cost)各不相同。

有许多用于特殊用途的语言,只在特殊情况下使用。例如,PHP专门用来显示网页Perl更适合文本处理;C语言被广泛用于操作系统编译器的开发(所谓的系统编程)。[3]

高级语言的出现使得计算机程序设计语言不再过度地依赖某种特定的机器或环境。这是因为高级语言在不同的平台上会被编译成不同的机器语言,而不是直接被机器执行。最早出现的编程语言FORTRAN的一个主要目标,就是实现平台独立。

虽然大多数的语言既可被编译又可被解译,但大多数仅在一种情况下能够良好运行。在一些编程系统中,程序要经过几个阶段的编译,一般而言,后阶段的编译往往更接近机器语言。这种常用的使用技巧最早在1960年代末用于BCPL,编译程序先编译一个叫做“0代码”的转换程序(representation),然后再使用虚拟器转换到可以运行于机器上的真实代码。这种成功的技巧之后又用于Pascal和P-code,以及Smalltalk和二进制码,在很多时候,中间过渡的代码往往是解译,而不是编译的。

如果所使用的翻译的机制是将所要翻译的程序代码作为一个整体翻译,并之后运行内部格式,那么这个翻译过程就被称为编译。因此,一个编译器是一个将人可阅读的程序文本(叫做源代码)作为输入的数据,然后输出可执行文件(object code)。所输出的可执行文件可以是机器语言,由计算机的中央处理器直接运行,或者是某种模拟器的二进制代码。

如果程序代码是在运行时才即时翻译,那么这种翻译机制就被称作直译。经直译的程序运行速度往往比编译的程序慢,但往往更具灵活性,因为它们能够与执行环境互相作用。

特点[编辑]

每一种程序设计语言可以被看作是一套包含语法词汇含义的正式规范。

这些规范通常包括:

程式语言不成文规定:

大多数被广泛使用或经久不衰的程式语言,拥有负责标准化的组织,经常会晤来创造及发布该程式语言的正式定义,并讨论扩展或贯彻现有的定义。

数据和数据结构[编辑]

现代计算机内部的数据都只以二元方式储存,即开-关模式(on-off)。现实世界中代表信息的各种数据,例如名字、银行账号、度量以及同样低端的二元数据,都经由程序设计语言整理,成为高阶的概念。

一个程序中专门处理数据的那个系统被称为程序语言型态系统type system);对型态系统的研究和设计被称为型态理论(type theory)。语言可以被分为静态型态系统(statically typed systems),例如C++Java,和动态型态系统(dynamically typed systems),例如LispJavaScriptTclProlog。前者可被进一步分为包含宣告型态(manifest type)的语言,即每一个变量和函数的型态都清楚地宣告,或type-inferred语言(例如MUMPS,ML)。

大多数语言还能够在内置的型态基础上组合出复杂的数据结构型态(使用数组,列表,堆栈,文件等等)。面向对象语言Object Oriented Language,又译作“物件导向语言”)允许程序员定义新的数据型态,即对象objects),以及运行于该对象的函数functions)和方法methods)。

除了何时以及如何确定表达式和型态的联系,另外一个重要的问题就是语言到底定义了哪些型态,以及允许哪些型态作为表达式的值。诸如C编程语言之类的低端语言允许程序命名内存位置、内存区域以及编译时的常量;ANSI C甚至允许表达式返回结构值(struct values)。功能性的语言一般允许变量直接使用运行时计算出的值,而不是指出该值可能储存的内存地址

常见的数据结构

指令及流程控制[编辑]

一旦数据被确定,机器必须被告知如何对这些数据进行处理。较简单的指令可以使用关键字或定义好的语法结构来完成。不同的程序语言利用序列系统来取得或组合这些语句。除此之外,一个程序语言中的其他指令也可以用来控制处理的过程(例如分支、循环等)。

参照机制和重用[编辑]

参照的中心思想是必须有一种间接设计储存空间的方法。最常见的方法是通过命名变量。根据不同的语言,进一步的引用可以包括指向其他储存空间的指针。还有一种类似的方法就是命名一组指令。大多数程序设计语言使用调用、过程调用或函数调用。使用这些代替的名字能让程序更灵活,并更具重用性。

功能[编辑]

程式语言可透过机械、电脑来达成与完成人类需求的演算、功能与目的。

实体的传输连结[编辑]

透过低阶程式语言或高阶程式语言,将实体间接达成传输连结或控制实体。

应用程式的发展[编辑]

高阶程式语言可发展多功能的应用程式软体,如:作业系统、工程计算机软体、转档软体、烧录软体、播放软体、网页设计…等。

使用[编辑]

程式语言已超过上千种,大部份用在计算领域[4]。 程式语言和其他人类使用的语言在精准度和完整性上有很大的差异。

人们在用自然语言沟通时,内容可以不明确,甚至小的错误,而听的人仍然可能理解说的人想要说的内容。但电脑不同,电脑“只做被告知要做的事”,无法理解程式设计者想要写的程式。语言的定义、编程以及编程输入的组合需完整定义程式执行时的外部特性。另一方面,演算法的概念可以表示为虚拟码,是交织有自然语言和程式码的程式语言,和其他人沟通时使用,此时就不一定要那么精确。

程式语言提供定义片段资料的结构化机制,以及在资料中需自动进行的运算或是转换。程式设计者利用程式语言提供的抽象化来表示计算的相关概念,这些概念则是由许多最简单元素(称为语言基元英语language primitive)的集合所组成[5]程序设计就是指利用语言基元来撰写新的程式,或是将旧程式改写,配合新的应用或是新的环境。

电脑程式语言可能是以批处理任务的方式执行,中间不需和使用者互动,也有可能是由用户在直译器中指定执行特定的的程式。若某一程式语言的是目的是在某一应用软体(如Unix shell)或其他命令列介面执行其他程式,此程式语言会称为脚本语言

量测各程式语言的使用量[编辑]

很难去比较哪一种程式语言的使用量最大,而且“使用量”一词也很难定义。某一种程式语言可能需要较多的时间进行开发,另一种程式语言可能产生的程式码较长,第三种程式语言可能在CPU中执行的时间较长。有些语言在特定的领域仍十分受欢迎,例如COBOL在公司的资料中心仍相当常用,多半是在大型计算机上执行[6][7]Fortran常用在科学及工程应用,C语言常用在嵌入式应用及作业系统中等。

有许多不同的量测方式不同程式语言使用的程度,不同的量测方式也有其各自的误差:

  • 计算征才广告中提到各程式语言的次数[8]
  • 计算教授或描述各程式语言书籍卖出的数量[9]
  • 占计各程式语言目前仍在使用程式码的长度,不过可能会低估一些公开搜寻不容易找到的程式语言[10]
  • 利用搜寻引擎计算找到不同程式语言的次数。

根据TIOBE指数在2018年9月,十大最受欢迎的语言如下:JavaCPythonC++Visual Basic .NETC#PHPJavaScriptSQLObjective-C.[11]

历史[编辑]

1940年代当计算机刚刚问世的时候,程序员必须手动控制计算机。当时的计算机十分昂贵,唯一想到利用程序设计语言来解决问题的人是德国工程师康拉德·楚泽

几十年后,计算机的价格大幅度下跌,而计算机程序也越来越复杂。也就是说,开发时间已经远比运行时间宝贵。

于是,新的集成、可视的开发环境越来越流行。它们减少了所付出的时间、金钱(以及脑细胞)。只要轻敲几个键,一整段代码就可以使用了。这也得益于可以重用的程序代码库[12]

参见[编辑]

参考文献[编辑]

  1. ^ Ettinger, James (2004) Jacquard's Web, Oxford University Press
  2. ^ 语言系统简介. .nuu.edu.tw. [2014-06-05]. (原始内容存档于2014-05-28). 
  3. ^ MXL
  4. ^ HOPL: an interactive Roster of Programming Languages. Australia: Murdoch University. [1 June 2009]. (原始内容存档于2011年2月20日). This site lists 8512 languages. 
  5. ^ Abelson, Sussman, and Sussman. Structure and Interpretation of Computer Programs. [3 March 2009]. (原始内容存档于2009年2月26日). 
  6. ^ Georgina Swan. COBOL turns 50. computerworld.com.au. 2009-09-21 [2013-10-19]. 
  7. ^ Ed Airey. 7 Myths of COBOL Debunked. developer.com. 2012-05-03 [2013-10-19]. 
  8. ^ Nicholas Enticknap. SSL/Computer Weekly IT salary survey: finance boom drives IT job growth. Computerweekly.com. [2013-06-14]. 
  9. ^ Counting programming languages by book sales. Radar.oreilly.com. 2 August 2006 [3 December 2010]. (原始内容存档于2008年5月17日). 
  10. ^ 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
  11. ^ TIOBE Index for March 2018. TIOBE. 2018-03 [2018-03-13]. 
  12. ^ Steven R. Fischer,. A history of language,. Reaktion Books,. 2003,. ISBN 186189080X. 

延伸阅读[编辑]

  • Abelson, Harold; Sussman, Gerald Jay. Structure and Interpretation of Computer Programs 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.

外部链接[编辑]