前言:本文根据网上各方材料整理总结而成。本人过去几年使用过的编程语言包括:C、C++、C#、Java、Pascal、Python、JavaScript、PHP、Perl等,先整理一下各编程语言的渊源,成此文。今后有空再总结一下各语言在语法和应用层面的异同点。
编程语言五大家族
早期的编程语言分为:FORTRAN、 COBOL、 LISP、 BASIC、 和ALGOL 家族。这些语言为不同的社会群体而设计。
- FORTRAN:为科学家和工程师设计的,他们在计算机上编程的目的是是为了解决问题。
- COBOL: 为商业设计的,最好的体现在于让商人们可以利用电脑时代。
- LISP: 为计算机科学研究设计的,最突出的体现在计算机基本原理研究.。
- BASIC: 为初学者设计的。
- ALGOL: 语言是有计算机程序员修改,演变成其他流行的语言,如C,Pascal和Java的一个庞大的家族。
上面提到的某些语言已经不像当初那么流行了。
首先是COBOL, 很不幸,它以面向商业人员的很好的可读性就是它的失败点。商业人员发现,他们可以雇佣程序员去管理他们的系统。程序员自然会偏向于为他们设计的语言,而不是他们的老板。所以随着时间推移,越来越多的商业功能都使用例如VB, C, C++ 和Java实现了。现在,只有很少一部分软件仍通过COBOL语言编写。
BASIC却有不同的命运。他是为入门人员设计的。那些在微机上学习编程,他们会使用内置的BASIC语言作为起点。随着时间推移,微机被运行微软操作系统的个人电脑,或者MacOS的苹果电脑所代替。这种语言逐渐被VB所取代。虽然他是面向初级程序员,它有一段时间代替了COBOL。为什么要耗费这么多的资源在昂贵的编译器上,而便宜的解释器在我们的电脑上已经存在?最近,微软以迁移到.NET框架上,让VB跟在后面。C#逐渐成为它的替代者。
这些年FORTRAN的使用起起伏伏。在某一阶段,差不多所有科学方面的代码是用它来写的。它的优点是这门语言中没有指针,并且不允许存在递归。这意味着所有数据的引用位置都可以在编译时确定。FORTRAN编译器利用这些额外的信息使程序运行格外地迅速。不幸的是,随着时间的推移,固定大小的数组这种数据结构变得过时了。现在,科学要处理任意形状的风格,甚至表述更为复杂的真实世界。这需要在语言中额外地加入指针。这些情况发生的时间段里,FORTRAN逐渐走向没落。现在,它被转移到高性能计算工作,其中新的并行矩阵和矢量运算最近添加到这门语言中,仍然使它拥有性能优势。
LISP站在计算机科学研究的前沿,特别是人工智能的研究方面。现在,它很少被用到。有些人认为是语法的错。Lisp因为它的括号而臭名昭著。许多用户说良好的格式可以让他们跟上这些括号。同时,Lisp语言被发明不久后,有一个叫“super-bracket”的语法可以让人快速表示出任意数量的回括号”)”。这个特性在今天已经很少有人使用了。最后,优秀的编辑器解决了大多数的语法问题。另一些人经常抱怨Lisp是一门函数式语言。
ALGOL语言家族取得了成功。其原因是,这些语言是由程序员为程序员写的。随着时间的推移,这些与系统和应用相关的语言成为了现在最常用的语言。它的优点是越多地程序员使用,这门语言就能得到更多地改进,并且越来越多地程序是用它们来写就的。这提供了一个良性循环,更多的程序员们又被聘请在己编写的程序上工作。这是一个网络效应的例子。一个系统的“价值”是它的用户数目的平方,在于以此速率增长的用户之间的交互作用。
当今流行编程语言简介
C家族简介
C语言
C语言原型为ALGOL 60语言(也称为A语言)。1967年,剑桥大学的Matin Richards对CPL语言进行了简化,于是产生了BCPL语言。1970年,美国贝尔实验室的KenThompson将BCPL进行了修改,并为它起了一个有趣的名字“B语言”。并且他用B语言写了第一个UNIX操作系统。
1973年,美国贝尔实验室的D.M.RITCHIE在B语言的基础上最终设计出了一种新的语言,他取了BCPL的第二个字母作为这种语言的名字,这就是C语言。1980年以后,贝尔实验室使得C变得更为广泛的流行,使得C一度成为了操作系统和应用程序编程的首选。甚至到今天,它仍被广泛用于编写操作系统以及作为广泛的计算机教育的语言。
八十年代出现了许多C语言版本,为了使C语言统一规范,美国国家标准研究所(ANSI)为C语言制定了一套ANSI标准, 成为现行的C语言标准。1999年1月,ISO和国际电工委员会(IEC)发布了C语言的新标准,名叫ISO/IEC9899:1999 - Programming languages -- C,简称C99标准。这是C语言的第二个官方标准。2011年12月8日,ISO和IEC再次发布了C语言的新标准,名叫ISO/IEC9899:2011 - Information technology -- Programming languages -- C,简称C11标准,原名C1X。这是C语言的第三个官方标准,也是C语言的最新标准。
C++
1967 年,Simula 语言中第一次出现了面向对象(OO) 的概念,但由于当时软件规模还不大,技术也还不太成熟,面向对象的优势并未发挥出来。1980 年,Smalltalk-80 出现后,面向对象技术才开始发挥魅力。
1979 年,Bjarne Stroustrup 借鉴 Simula 中 "Class"的概念,开始研究增强 C 语言,使其支持面向对象的特性。 B.Stroustrup 写了一个转换程序 "Cfront" 把 C++ 代码转换为普通的 C 代码,使它在各种各样的平台上立即投入使用。 1983 年,这种语言被命名为 C++.刚开始叫C with class,这是把它当作一种C语言的有效扩充。由于当时C语言在编程界居于老大的地位,要想发展一种新的语言,最强大的竞争对手就是C语言,所以当时有两个问题最受关注:C++要在运行时间、代码紧凑性和数据紧凑性方面能够与C语言相媲美,但是还要尽量避免在语言应用领域的限制。在此情况下,Bjarne博士为了避免受到C语言的局限性,一个很自然的想法就是让C++从C语言继承过来,但同时参考了很多的其它语言,例如:从Simula继承了类的概念,从Algol68继承了运算符重载、引用以及在任何地方声明变量的能力,从BCPL获得了//注释,从Ada得到了模板、名字空间,从Ada、Clu和ML取来了异常。
1986 年,B.Stroustrup 出版了 《The C++ ProgrammingLanguage》第一版,这时 C++ 已经开始受到关注, B.Stroustrup 被称为 C++之父(Creator of C++)。1990 年, Template(模板) 和 Exception(异常) 加入到了 C++ 中, 使 C++ 具备了泛型编程(GenericProgramming)和更好的运行期错误处理方式。
1994 年, C++ 标准草案出台。B.Stroustrup 出版了《The Design and Evolution of C++》(简称 D&E)。1998 年,ANSI 和 ISO 终于先后批准 C++ 语言成为美国国家标准和国际标准。
C#
1998年12月,微软启动了一个全新的语言项目——COOL,这是一款专门为CLR设计的纯面向对象的语言,也正是C#的前身。2000年2月份,微软才正式将COOL语言更名为C#。2000年9月,国际信息和通信系统标准化组织为C#语言定义了一个Microsoft公司建议的标准。最终C#语言在2001年得以正式发布。
Java
Sun公司为了抢占市场先机,在1991年成立了一个称为Green的项目小组,工程师们一起组成的工作小组在加利福尼亚州门洛帕克市沙丘路的一个小工作室里面研究开发新技术,专攻计算机在家电产品上的嵌入式应用。
Green小组孤独地在荒野上不断的探索。他们寻求一种可用于嵌入式设备的面向对象语言,他们一开始在C++的基础上修改,但是C++的庞大使之无法满足他们的需要,于是他们在C++的基础上创建了一门新的语言Oak----这个命名仅仅因为James Gosling看到了相窗外的一颗橡树(Oak)。开发队伍仔细审视了这门语言,认为它相当的好。
也是在那个时代,美国巨型计算机应用中心开发出了Mosaic,这为我们带来了令人兴奋的WWW。随后Bill Joy试图公开Oak的源代码,使Oak能使用于网页浏览。Sun审视了这个想法,觉得不错,但Oak这个商标已经被人占用,所以Sun把这门新语言称为Java,并发布了《the Java programming Language》。这又一次使人们激动,从此又有了一个真正与开发平台无关的语言。
Objective-C
1980年代初布莱德·考克斯(Brad Cox)在其公司Stepstone发明Objective-C。他对软件设计和编程里的真实可用度问题十分关心。Objective-C最主要的描述是他1986年出版的书 Object Oriented Programming: An Evolutionary Approach.
Pascal家族简介
Pascal
Pascal基于ALGOL编程语言,由瑞士苏黎世联邦工业大学的Niklaus Wirth教授于六十年代末设计并创立。1971年,以电脑先驱帕斯卡Pascal的名字为之命名。Pascal语言语法严谨,一出世就受到广泛欢迎,迅速地从欧洲传到美国。Pascal是最早出现的结构化编程语言,具有丰富的数据类型和简洁灵活的操作语句。相对于C语言,缺乏一定的灵活性。但是正是其严谨的语法,很多Pascal程序员倾心于其“诗篇一样的结构”,曾经一直是大专院校计算机专业必学的语言。它的改进版本Object Pascal和Delphi都超过了它。Turbo Pascal是Pascal的早期编译器及IDE,之后被Free Pascal替代。
Object Pascal与Delphi
Object Pascal是改进版的Pascal,它是面向对象的Pascal,是Delphi语言的核心。Delphi是Borland公司的旗舰产品,Object Pascal的集成开发环境,具有强大的数据库功能、高效的编译速度和方便快捷的开发,使得很多公司选用Delphi作为首选开发语言。Delphi是一个集成开发环境(IDE),以图形用户界面为开发环境,透过IDE、VCL工具与编译器,配合连结数据库的功能,构成一个以面向对象程序设计为中心的应用程序开发工具。严谨地说,Delphi是开发工具而不是语言,但是很多人习惯叫Object Pascal为Delphi语言,可以认为两者等价。
Basic家族
Basic
微软公司上个世纪八十年代推出的计算机语言,当时造成了计算机软件开发世界的强烈震动,它的出现将很多程序员由枯燥的编码中解放出来,而有更多的精力来进行程序结构的开发。但是,Basic同C、Pascal语言一样,是结构化语言,在对待大型开发中会觉得逐渐力不从心,程序员需要关注的内容实在太多了。其实现在来说,学习Basic已经没有什么意义了。因为它的改进版本Visual Basic和Visual Basic.NET无论是在功能上还是在实用性上都大大地超过了他们的祖先。
Visual Basic与Visual Basic.NET
它们都是由basic改进而来。其中VB是解释型语言,编译速度快,可以实时调试,但它并不是完全的面向对象,多线程开发比较困难。但其最大的优点是简单!VisualBasic.NET是基于微软.net平台的新的语言,(注意它和VisualBasic是完全不同的语言)面向对象,可以进行嵌入式开发。与ASP.NET结合紧密。并且在性能上大大提高。可以说也很有发展前途。
JavaScript
JavaScript是在1995年时,由Netscape公司的Brendan Eich,在网景导航者浏览器上首次设计实现而成。因为Netscape与Sun合作,Netscape管理层希望它外观看起来像Java,因此取名为JavaScript。JavaScript是甲骨文公司的注册商标。Ecma国际以JavaScript为基础制定了ECMAScript标准。JavaScript也可以用于其他场合,如服务器端编程。完整的JavaScript实现包含三个部分:ECMAScript,文档对象模型,浏览器对象模型。
Netscape在最初将其脚本语言命名为LiveScript,后来Netscape在与Sun合作之后将其改名为JavaScript。JavaScript最初受Java启发而开始设计的,目的之一就是“看上去像Java”,因此语法上有类似之处,一些名称和命名规范也借自Java。但JavaScript的主要设计原则源自Self和Scheme。JavaScript与Java名称上的近似,是当时Netscape为了营销考虑与Sun微系统达成协议的结果。
Perl
Perl最初的设计者为拉里·沃尔(Larry Wall),于1987年12月18日发表。Perl借取了C、sed、awk、shell 脚本语言以及很多其他程序语言的特性,其中最重要的特性是它内部集成了正则表达式的功能,以及巨大的第三方代码库CPAN。简而言之,Perl像C一样强大,像awk、sed等脚本描述语言一样方便,被Perl语言爱好者称之为“一种拥有各种语言功能的梦幻脚本语言”、“Unix 中的王牌工具”。
Perl 一般被称为“实用报表提取语言”(Practical Extraction and Report Language),你也可能看到“perl”,所有的字母都是小写的。一般,“Perl”,有大写的 P,是指语言本身,而“perl”,小写的 p,是指程序运行的解释器。
PHP
PHP 继承自一个老的工程,名叫 PHP/FI。PHP/FI 在 1995 年由 Rasmus Lerdorf 创建,最初只是一套简单的 Perl 脚本,用来跟踪访问他主页的人们的信息。它给这一套脚本取名为“Personal Home Page Tools”。随着更多功能需求的增加,Rasmus 写了一个更大的 C 语言的实现,它可以访问数据库,可以让用户开发简单的动态 Web 程序。PHP原始为Personal Home Page的缩写,已经正式更名为 "PHP: Hypertext Preprocessor",是一种递归缩写的形式。
PHP 独特的语法混合了C、Java、Perl以及PHP自创的语法。它可以比CGI或者Perl更快速地执行动态网页。用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML(标准通用标记语言下的一个应用)文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快。
Python
Python的创始人为Guido van Rossum。1989年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,作为ABC 语言的一种继承。之所以选中Python(大蟒蛇的意思)作为该编程语言的名字,是因为他是一个叫Monty Python的喜剧团体的爱好者。
Python是纯粹的自由软件, 源代码和解释器CPython遵循 GPL(GNU General Public License)协议。Python语法简洁清晰,特色之一是强制用空白符(white space)作为语句缩进。Python具有丰富和强大的库。它常被昵称为胶水语言,能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起。常见的一种应用情形是,使用Python快速生成程序的原型(有时甚至是程序的最终界面),然后对其中有特别要求的部分,用更合适的语言改写,比如3D游戏中的图形渲染模块,性能要求特别高,就可以用C/C++重写,而后封装为Python可以调用的扩展类库。需要注意的是在您使用扩展类库时可能需要考虑平台问题,某些可能不提供跨平台的实现。7月20日,IEEE发布2017年编程语言排行榜:Python高居首位
Ruby
Ruby是20世纪90年代由日本人松本行弘(Yukihiro Matsumoto)开发,遵守GPL协议和Ruby License。它的灵感与特性来自于 Perl、Smalltalk、Eiffel、Ada以及 Lisp 语言。Ruby归根结底源于Perl和Lisp两类语言,与C,C++,C#,java是不同大类。是一种通用的、解释的编程语言,是一种真正的面向对象编程语言,是类似于 Python 和 Perl 的服务器端脚本语言。
ASP与ASP.NET
由于Web程序开发十分复杂,以至于要制作一个简单的动态页面也需要编写大量的C代码才能完成。于是Microsoft公司于1996年推出一种Web应用开发技术ASP,用于取代对Web服务器进行可编程扩展的CGI标准。ASP即Active Server Pages,是MicroSoft公司开发的服务器端脚本环境,可用来创建动态交互式网页并建立强大的web应用程序。当服务器收到对ASP文件的请求时,它会处理包含在用于构建发送给浏览器的HTML网页文件中的服务器端脚本代码。除服务器端脚本代码外,ASP文件也可以包含文本、HTML和com组件调用。
2000年6月,微软公司宣布了自己的.NET框架。.NET框架的基本思想是:把原有的重点从连接到互联网的单一网站或设备转移到计算机、设备和服务群组上,而将互联网本身作为新一代操作系统的基础。这样,用户将能够控制信息的传送方式、时间和内容,从而得到更多的服务。
2001年,ASP.NET浮出水面。它最初的名字为ASP+,后来改为ASP.NET。ASP.NET是微软公司开发的一种建立在.NET之上的Web运行环境,它不是ASP的简单升级,而是新一代的Active Server Pages。ASP.NET是微软公司新体系结构Microsoft.NET的一部分,其中全新的技术架构使编程变得更加简单。借助于ASP.NET,可以创造出内容丰富的、动态的、个性化的Web站点。ASP.NET简单易学、功能强大、应用灵活、扩展性好,可以使用任何.NET兼容语言。
Swift
Swift,苹果于2014年WWDC(苹果开发者大会)发布的新开发语言,可与Objective-C*共同运行于Mac OS和iOS平台,用于搭建基于苹果平台的应用程序。Swift是一款易学易用的编程语言,而且它还是第一套具有与脚本语言同样的表现力和趣味性的系统编程语言。Swift的设计以安全为出发点,以避免各种常见的编程错误类别。
Golang
Go语言于2009年11月正式宣布推出,成为开放源代码项目,并在Linux及Mac OS X平台上进行了实现,后追加Windows系统下的实现。Go语言专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程。Go是一种新的语言,一种并发的、带垃圾回收的、快速编译的语言。它具有以下特点:
它可以在一台计算机上用几秒钟的时间编译一个大型的Go程序。Go为软件构造提供了一种模型,它使依赖分析更加容易,且避免了大部分C风格include文件与库的开头。Go是静态类型的语言,它的类型系统没有层级。因此用户不需要在定义类型之间的关系上花费时间,这样感觉起来比典型的面向对象语言更轻量级。Go完全是垃圾回收型的语言,并为并发执行与通信提供了基本的支持。按照其设计,Go打算为多核机器上系统软件的构造提供一种方法。
Go是一种编译型语言,它结合了解释型语言的游刃有余,动态类型语言的开发效率,以及静态类型的安全性。它也打算成为现代的,支持网络与多核计算的语言。要满足这些目标,需要解决一些语言上的问题:一个富有表达能力但轻量级的类型系统,并发与垃圾回收机制,严格的依赖规范等等。这些无法通过库或工具解决好,因此Go也就应运而生了。
R语言
R 是统计领域广泛使用的诞生于1980年左右的 S 语言的一个分支。R是S语言的一种实现。S语言是由 AT&T贝尔实验室开发的一种用来进行数据探索、统计分析、作图的解释型语言。最初S语言的实现版本主要是S-PLUS。S-PLUS是一个商业软件,它基于S语言,并由MathSoft公司的统计科学部进一步完善。后来Auckland大学的Robert Gentleman 和 Ross Ihaka 及其他志愿人员开发了一个R系统。R是用于统计分析、绘图的语言和操作环境。R是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具。
MATLAB
MATLAB 是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。
MATLAB是matrix&laboratory两个词的组合,意为矩阵工厂(矩阵实验室)。是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。
MATLAB和Mathematica、Maple并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。
MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且MATLAB也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。在新的版本中也加入了对C,FORTRAN,C++,JAVA的支持。
其他
FORTRAN和LISP语言见第一部分所述,Erlang和Kotlin等可参见相关资料。
编程语言排行榜
最权威的是TIOBE排行榜。比如根据2018年1月的情况来看,排在前5的依次是:Java、C、C++、Python、C#。其他进入前十的有:JavaScript、VB.NET、R、PHP、Perl等。
此外IEEE也有排行榜,比如根据2017年的情况来看,排在前5的与TIOBE类似,只是顺序不同:Python、C、Java、C++、C#。JavaScript、PHP和R仍然排在前十,剩下的是Go和Swift也进入前十。
编程语言对比
网上有许多资料,比如:九种编程语言大对比 等等,此处不再赘述。