编程语言
概论
编程语言原本是被设计成专门使用在计算机上的,但它们也可以用来定义算法或者数据结构。正是因为如此,程序员才会试图使程序代码更容易阅读。
编程语言往往使程序员能够比使用机器语言更准确地表达他们所想表达的目的。对那些从事计算机科学的人来说,懂得程序设计语言是十分重要的,因为在当今所有的计算都需要程序设计语言才能完成。
目前发明了许多的编程语言,编程语言本身可能修改以匹配新需求,或是和其他的编程语言结合使用,尽管人们多次试图创造可以匹配所有需求的通用编程语言,但以“匹配所有需求”的标准来看,这些尝试都失败了 。之所以有那么多种不同的编程语言存在的原因是,编写程序的初衷其实也各不相同;新手与老手之间技术的差距非常大,而且有许多语言对新手来说太难学;还有,不同程序之间的运行成本( runtime cost )各不相同。
有许多用于特殊用途的语言,只在特殊情况下使用。例如,PHP专门用来显示网页;Perl更适合文本处理;C语言被广泛用于操作系统和编译器的开发(所谓的系统编程)。
高级语言的出现使得计算机程序设计语言不再过度地依赖某种特定的机器或环境。这是因为高级语言在不同的平台上会被编译成不同的机器语言,而不是直接被机器执行。最早出现的编程语言之一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 )。功能性的语言一般允许变量直接使用运行时计算出的值,而不是指出该值可能储存的内存地址。
常见的数据结构:
数组
记录
链表
堆栈
队列
树
图
堆
散列
指令及流程控制
一旦数据被确定,机器必须被告知如何对这些数据进行处理。较简单的指令可以使用关键字或定义好的语法结构来完成。不同的语言利用序列系统来获取或组合这些语句。除此之外,一个语言中的其他指令也可以用来控制处理的过程(例如分支、循环等)。
引用机制和重用
引用的中心思想是必须有一种间接设计储存空间的方法。最常见的方法是通过命名变量。根据不同的语言,进一步的引用可以包括指向其他储存空间的指针。还有一种类似的方法就是命名一组指令。大多数程序设计语言使用宏调用、过程调用或函数调用。使用这些代替的名字能让程序更灵活,并更具重用性。
功能
编程语言可通过机械、电脑来达成与完成人类需求的演算、功能与目的。
实体的传输链接
通过低级编程语言或高级编程语言,将实体间接达成传输链接或控制实体。
应用程序的发展
高级编程语言可发展多功能的应用程序软件,如:操作系统、工程计算机软件、转换软件、刻录软件、播放软件、网页设计…等。
使用
编程语言已超过上千种,大部分用在计算领域 。 编程语言和其他人类使用的语言在精准度和完整性上有很大的差异。
人们在用自然语言沟通时,内容可以不明确,甚至小的错误,而听的人仍然可能理解说的人想要说的内容。但电脑不同,电脑“只做被告知要做的事”,无法理解程序设计者想要写的程序。语言的定义、编程以及编程输入的组合需完整定义程序运行时的外部特性。另一方面,算法的概念可以表示为伪代码,是交织有自然语言和代码的编程语言,和其他人沟通时使用,此时就不一定要那么精确。
编程语言提供定义片段数据的结构化机制,以及在数据中需自动进行的运算或是转换。程序设计者利用编程语言提供的抽象化来表示计算的相关概念,这些概念则是由许多最简单元素(称为 语言基元 ( 英语 : language primitive ) )的集合所组成 。程序设计就是指利用语言基元来撰写新的程序,或是将旧程序改写,配合新的应用或是新的环境。
计算机程序语言可能是以批处理任务的方式运行,中间不需和用户交互,也有可能是由用户在解释器中指定运行特定的的程序。若某一编程语言的是目的是在某一应用软件(如Unix shell)或其他命令行接口运行其他程序,此编程语言会称为脚本语言。
量测各编程语言的使用量
很难去比较哪一种编程语言的使用量最大,而且“使用量”一词也很难定义。某一种编程语言可能需要较多的时间进行开发,另一种编程语言可能产生的代码较长,第三种编程语言可能在CPU中运行的时间较长。有些语言在特定的领域仍十分受欢迎,例如COBOL在公司的数据中心仍相当常用,多半是在大型计算机上运行 ,Fortran常用在科学及工程应用,C语言常用在嵌入式应用及操作系统中等。
有许多不同的量测方式不同编程语言使用的程度,不同的量测方式也有其各自的误差:
计算征才广告中提到各编程语言的次数 。
计算教授或描述各编程语言书籍卖出的数量 。
占计各编程语言目前仍在使用代码的长度,不过可能会低估一些公开搜索不容易找到的编程语言 。
利用搜索引擎计算找到不同编程语言的次数。
langpop.com在2013年整理了不同网站的数据,提出十大最受欢迎的语言如下:C语言、Java、PHP、JavaScript、C++、Python、Shell脚本、Ruby、Objective-C及C♯. 。
历史
1940年代当计算机刚刚问世的时候,程序员必须手动控制计算机。当时的计算机十分昂贵,唯一想到利用程序设计语言来解决问题的人是德国工程师康拉德·楚泽。
几十年后,计算机的价格大幅度下跌,而计算机程序也越来越复杂。也就是说,开发时间已经远比运行时间宝贵。
于是,新的集成、可视的开发环境越来越流行。它们减少了所付出的时间、金钱(以及脑细胞)。只要轻敲几个键,一整段代码就可以使用了。这也得益于可以重用的程序代码库 。
参见
程序设计语言列表
编译器、解释器
Hello World程序
脚本语言
程序设计
计算机科学、基本的计算机科学主题列表
教育编程语言
文学编程
编程语言理论
伪代码
软件工程、软件工程主题列表
延伸阅读
Abelson, Harold; Sussman, Gerald Jay.Structure and Interpretation of Computer Programs2nd. MIT Press. 1996.
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.
免责声明:以上内容版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。感谢每一位辛勤著写的作者,感谢每一位的分享。
- 有价值
- 一般般
- 没价值