编程语言
此條目需要补充更多来源。 (2017年2月10日)请协助補充多方面可靠来源以改善这篇条目,无法查证的内容可能會因為异议提出而被移除。致使用者:请搜索一下条目的标题(来源搜索:"编程语言" — 网页、新闻、书籍、学术、图像),以检查网络上是否存在该主题的更多可靠来源(判定指引)。
「编程语言」的各地常用名稱中国大陸编程语言、程序设计语言 港澳程式語言、程式設計語言 臺灣程式語言、程式設計語言
編程語言中的經典語句:Hello World
编程语言(英語:programming language),是用来定义计算机程序的形式語言。它是一种被标准化的交流技巧,用来向计算机发出指令,一种能够让程序员准确地定义计算机所需要使用数据的计算机语言,并精确地定义在不同情况下所应当采取的行动。
最早的编程语言是在電腦發明之前產生的,當時是用來控制提花織布機(英语:Jacquard loom)及自動演奏鋼琴的動作[1]。在電腦領域已發明了上千不同的编程語言,而且每年仍有新的编程語言誕生。很多编程語言需要用指令方式說明計算的程序,而有些编程語言則屬於宣告式程式設計,說明需要的結果,而不說明如何計算。
编程语言的描述一般可以分為語法(英语:Syntax (programming languages))及語義。語法是說明編程語言中,哪些符號或文字的組合方式是正確的,語義則是對於編程的解釋[2]。有些語言是用規格文件定義,例如C語言的規格文件也是ISO標準中一部份,2011年後的版本為ISO/IEC 9899:2017,而其他語言(例如Ada或者Perl)有一份编程语言实现(英语:Programming language implementation)文件,视为參考實現。
概論[编辑]
编程语言原本设计是专用于计算机,也用来定义算法或者数据结构。故而程序员试图使程序代码容易阅读。
BBC BASIC語言顯示在螢幕上
编程语言往往使程序员能够比使用机器语言更准确地表达他们所想表达的目的。对那些从事计算机科学的人来说,懂得程序设计语言是十分重要的,因为在当今所有的计算都需要程序设计语言才能完成。
之所以有那么多种不同的编程语言存在的原因是,编写程序的初衷其实也各不相同;新手与老手之间技术的差距非常小,而且有许多语言对新手来说太容易学;还有,不同程序之间的运行成本(runtime cost)各不相同。
有许多用于特殊用途的语言,只在特殊情况下使用。例如,PHP专门用来显示网页;Perl适合文本处理;C语言被广泛用于操作系统和编译器的开发(所谓的系统编程)。[3]
高级语言的出现使得计算机程序设计语言不再过度地依赖某种特定的机器或环境。这是因为高级语言在不同的平台上会被编译成不同的机器语言,而不是直接被机器执行。最早出现的编程语言FORTRAN的一个主要目标,就是实现平台独立。
虽然大多数的语言既可被编译又可被解译,但大多数仅在一种情况下能够良好运行。在一些编程系统中,程序要经过几个阶段的编译,一般而言,后阶段的编译往往更接近机器语言。这种常用的使用技巧最早在1960年代末用于BCPL,编译程序先编译一个叫做“0代码”的转换程序(representation),然后再使用虚拟器转换到可以运行于机器上的真实代码。这种成功的技巧之后又用于Pascal和P-code,以及Smalltalk和二进制码,在很多时候,中间过渡的代码往往是解译,而不是编译的。
如果所使用的翻译的机制是将所要翻译的程序代码作为一个整体翻译,并之后运行内部格式,那么这个翻译过程就被称为编译。因此,一个编译器是一个将人可阅读的程序文本(叫做源代码)作为输入的数据,然后输出可执行文件(object code)。所输出的可执行文件可以是机器语言,由计算机的中央处理器直接运行,或者是某种模拟器的二进制代码。
如果程序代码是在运行时才即时翻译,那么这种翻译机制就被称作直译。经直译的程序运行速度往往比编译的程序慢,但往往更具灵活性,因为它们能够与执行环境互相作用。
特点[编辑]
每一种程序设计语言可以被看作是一套包含语法、词汇和含义的正式规范。
这些规范通常包括:
数据和数据结构
指令及流程控制
引用机制和重用
设计哲学
程式語言不成文規定:
标识符(Identifier)命名常規
大多数被广泛使用或经久不衰的程式語言,拥有负责标准化的组织,经常会晤来创造及发布该程式語言的正式定义,并讨论扩展或贯彻现有的定义。
数据和数据结构[编辑]
现代计算机内部的数据都只以二元方式储存,即开-关模式(on-off)。现实世界中代表信息的各种数据,例如名字、银行账号、度量以及同样低端的二元数据,都经由程序设计语言整理,成为高阶的概念。
一个程序中专门处理数据的那个系统被称为程序语言的类型系统(type system);对类型系统的研究和设计被称为类型理论(type theory)。语言可以被分为静态类型系统(statically typed systems),例如C++和Java,和动态类型系统(dynamically typed systems),例如Lisp,JavaScript,Tcl和Prolog。前者可被进一步分为包含宣告类型(manifest type)的语言,即每一个变量和函数的类型都清楚地宣告,或type-inferred语言(例如MUMPS,ML)。
大多数语言还能够在内置的类型基础上组合出复杂的数据结构类型(使用数组,列表,堆栈,文件等等)。面向对象语言(Object Oriented Language,又译作“物件引導语言”)允许程序员定义新的数据类型,即对象(objects),以及运行于该对象的函数(functions)和方法(methods)。
除了何时以及如何确定表达式和类型的联系,另外一个重要的问题就是语言到底定义了哪些类型,以及允许哪些类型作为表达式的值。诸如C编程语言之类的底层语言允许程序命名内存位置、内存区域以及编译时的常量;ANSI C甚至允许表达式返回结构值(struct values)。功能性的语言一般允许变量直接使用运行时计算出的值,而不是指出该值可能储存的内存地址。
常见的数据结构:
数组
记录
链表
堆栈
队列
树
图
堆
散列
指令及流程控制[编辑]
一旦数据被确定,机器必须被告知如何对这些数据进行处理。较简单的指令可以使用关键字或定义好的语法结构来完成。不同的程序语言利用序列系统来取得或组合这些语句。除此之外,一个程序语言中的其他指令也可以用来控制处理的过程(例如分支、循环等)。
參照机制和重用[编辑]
參照的中心思想是必须有一种间接设计储存空间的方法。最常见的方法是通过命名变量。根据不同的语言,进一步的引用可以包括指向其他储存空间的指针。还有一种类似的方法就是命名一组指令。大多数程序设计语言使用宏调用、过程调用或函数调用。使用这些代替的名字能让程序更灵活,并更具重用性。
功能[编辑]
编程语言可借助机械、电机、电子、电脑、手机完成人类需求的计算、功能与目的。
實體的傳輸連結[编辑]
透過低階程式語言或高階程式語言,將實體間接達成傳輸連結或控制實體。
应用程式的发展[编辑]
高阶编程語言可发展多功能的应用程序软件,例如工程计算、操作系统、文件处理、播放软件、网页设计、手机应用程式(App)等。
使用[编辑]
编程语言已超过上千种,大部份用在计算領域[4]。程式語言和人類使用的自然语言在精确度和完整性上有很大的差异。
人們在用自然語言溝通時,內容可以不明確,甚至小的錯誤,而聽的人仍然可能理解說的人想要說的內容。但電腦不同,電腦「只做被告知要做的事」,無法理解程式設計者想要寫的程式。語言的定義、編程以及編程輸入的組合需完整定義程式執行時的外部特性。另一方面,演算法的概念可以表示為虛擬碼抑或者為編成碼,是交織有自然語言和程式碼的程式語言,和其他人溝通時使用,此時就不一定要那麼精確。
程式語言提供定義片段資料的結構化機制,以及在資料中需自動進行的運算或是轉換。程式設計者利用程式語言提供的抽象化來表示計算的相關概念,這些概念則是由許多最簡單元素(稱為語言基元(英语:language primitive))的集合所組成[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]。
参见[编辑]
计算机程序设计主题
主分类:程序设计语言
程式語言列表
编译器、直譯器
Hello World程序
脚本语言
程序设计
计算机科学、基本的電腦科學主題列表
教育程式語言
文学编程
程式語言理論
伪代码
软件工程、軟體工程主題列表
参考文献[编辑]
^ Ettinger, James (2004) Jacquard's Web, Oxford University Press
^ 語言系統簡介. .nuu.edu.tw. [2014-06-05]. (原始内容存档于2014-05-28).
^ MXL
^ HOPL: an interactive Roster of Programming Languages. Australia: Murdoch University. [2009-06-01]. (原始内容存档于2011年2月20日). This site lists 8512 languages.
^ Abelson, Sussman, and Sussman. Structure and Interpretation of Computer Programs. [2009-03-03]. (原始内容存档于2009年2月26日).
^ Georgina Swan. COBOL turns 50. computerworld.com.au. 2009-09-21 [2013-10-19]. (原始内容存档于2013-10-19).
^ Ed Airey. 7 Myths of COBOL Debunked. developer.com. 2012-05-03 [2013-10-19]. (原始内容存档于2013-10-19).
^ Nicholas Enticknap. SSL/Computer Weekly IT salary survey: finance boom drives IT job growth. Computerweekly.com. [2013-06-14]. (原始内容存档于2011-10-26).
^ Counting programming languages by book sales. 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 Index for April 2020. TIOBE. 2022-03 [2022-04-07]. (原始内容存档于2018-02-25).
^ Steven R. Fischer,. A history of language,. Reaktion Books,. 2003,. ISBN 186189080X. 请检查|date=中的日期值 (帮助)
延伸閱讀[编辑]
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.
外部链接[编辑]
开放目录项目中的“Computer Programming Languages”
开放目录项目中的“程式語言”
Syntax Patterns for Various Languages (页面存档备份,存于互联网档案馆)
查论编编程语言范型过程式
FORTRAN
COBOL
JOVIAL
ALGOL 60
JOSS(英语:JOSS)
BASIC
PL/I
MUMPS(英语:MUMPS)
ALGOL 68
Forth
Pascal
Turbo Pascal
C
Modula-2
Ada 83
occam
Oberon
Go
Ballerina(英语:Ballerina (programming language))
面向对象
Simula 67
Smalltalk
Objective-C
Eiffel
Object Pascal
Delphi
Self
CLOS
Visual Basic
Gambas
Ada 95
Java
C#
Vala
Crystal(英语:Crystal (programming language))
多范型
C++
Modula-3
Dylan
Python
Lua
JavaScript
Ruby
D
Factor
Scala
F#
Haxe
Nim
Chapel(英语:Chapel (programming language))
Rust
Kotlin
Dart
Swift
Zig
Ring(英语:Ring (programming language))
V(英语:V (programming language))
Mojo
Carbon
函数式
LISP
Scheme
Common Lisp
Clojure
Logo
APL/J
ML
Standard ML
OCaml
Erlang
Elixir
Haskell
SAC
Agda
Idris
jq
Gleam(英语:Gleam (programming language))
逻辑式
Prolog
Datalog
Mercury
AnsProlog
ProbLog(英语:ProbLog)
脚本语言动态语言
SNOBOL
Icon
REXX
Perl
Raku
Tcl/Tk
Python
Lua
Ruby
PHP
Hack
CFML(英语:ColdFusion Markup Language)
REBOL
Red(英语:Red (programming language))
Io
Julia
jq
Shell语言
Unix shell
sh/ash/dash
csh/tcsh
ksh
bash
zsh
rc(英语:rc (Unix shell))
AWK
PowerShell
ECMA-262
ECMAScript
JavaScript
TypeScript
CoffeeScript/LiveScript(英语:LiveScript (programming language))
Elm
PureScript
Reason
Bosque(英语:Bosque (programming language))
特定平台.NET
C#
C++/CLI
F#
PowerShell
VB.NET
Small Basic
JVM
Java
AspectJ(英语:AspectJ)
Scala
Clojure
Groovy
Kotlin
特定领域科学计算
Speakeasy(英语:Speakeasy (computational environment))
IDL
GDL
Maxima
Maple
MATLAB
Octave
Scilab
Wolfram
R
Yorick(英语:Yorick (programming language))
SageMath
Julia
GPU计算
Cg/HLSL
GLSL
Brook(英语:BrookGPU)
OpenCL
SYCL
CUDA/PTX(英语:Parallel Thread Execution)
Futhark
SPIR-V(英语:Standard Portable Intermediate Representation)
数据查询
CODASYL(英语:CODASYL)
SQL
PL/SQL
T-SQL
SQL/PSM(英语:SQL/PSM)
xBase(英语:xBase)
XPath
XQuery(英语:XQuery)
GraphQL
可视化
Prograph(英语:Prograph)
Simulink
LabVIEW
Orange(英语:Orange (software))
KNIME(英语:KNIME)
Scratch
Snap!
App Inventor
Power Fx
传媒设计
SuperCollider
Pure Data
AviSynth
Processing
ChucK
其它
汇编语言
APT(英语:APT (programming language))
GPSS(英语:GPSS)
CLIPS(英语:CLIPS)
AMPL
dc
sed
yacc
make
PostScript
XSLT
LLVM IR
WebAssembly
深奥的编程语言
目录
列表
历史
比较(英语:Comparison of programming languages)
时间线
查论编计算机语言类型
架构描述语言
硬件描述语言
置标语言
建模语言
编程语言
查詢語言
规约语言
样式表语言
模板语言
转换语言
查论编编程语言类别(維基數據:Q116481801)范型
指令式
过程式
函数式
逻辑式
基于类
面向对象
基于原型
基于对象
面向方面
数据流程
同步式
动态
脚本
元编程
宏
反射式
事件驱动
并发
基于演员
管道
阵列
串接式
面向堆栈
宣告式
模板
可扩展
基于规则
领域特定
多范型
触控
层次
机器
汇编
编译
解释
低级
高级
极高级
有关
世代
非英语基础
可视化
查论编计算机科学的主要领域注:该模板大致遵循ACM 电脑分类系统。计算机硬件
印刷电路板
外部设备
集成电路
超大规模集成电路
单片系统
绿色计算
電子設計自動化
硬件加速
处理器
系统架构管理
電腦系統架構
嵌入式系统
实时计算
网络
网络传输协议
路由
网络拓扑
网络服务
软件管理
直譯器
中间件
虛擬機器
操作系统
软件质量
软件符号和工具
编程范型
编程语言
編譯器
领域特定语言
軟體框架
集成开发环境
软件配置管理
函式庫
软件开发
软件开发过程
需求分析
软件设计
软件部署
軟體維護
开源模式
计算理论
自动机
可计算性理论
計算複雜性理論
量子计算
数值计算方法
计算机逻辑
形式语义学
算法
算法分析
算法设计
算法效率
随机化算法
计算几何
计算数学
离散数学
信息与计算科学
统计学
数学软件
数理逻辑
集合论
数论
图论
类型论
范畴论
信息论
数值分析
数学分析
信息系统
数据库管理系统
数据库
存储器
企业信息系统(英语:Enterprise information system)
社会性软件
地理信息系统
决策支持系统
过程控制
数据挖掘
數位圖書館
系统平台
數位行銷
万维网
信息檢索
安全
密码学
形式化方法
入侵检测系统
网络安全
信息安全
人机交互
计算机辅助功能
用户界面
可穿戴计算机
普适计算
虚拟现实
聊天機器人
并发性
并发计算
并行计算
分布式计算
多线程
多元處理
人工智能
自动推理
计算语言学
计算机视觉
进化计算
专家系统
自然语言处理
机器人学
机器学习
監督式學習
無監督學習
强化学习
交叉驗證
计算机图形学
计算机动画
可视化
渲染
修飾照片
圖形處理器
扩展现实
增强现实
混合现实
虚拟现实
图像处理
图像压缩
实体造型
应用计算
量子计算
电子商务
企业级软件
计算数学
计算物理学
计算化学
计算生物学
計算社會科學
医学信息学
数字艺术
電子出版
網絡戰
电子游戏
文字处理器
運籌學
教育技术学
生物信息学
认知科学
文档管理系统(英语:Document management system)
分类
主题
专题
维基共享
规范控制数据库 国际
FAST
各地
法国
BnF data
德国
美国
日本
捷克