编程语言简史

2016-10-20

  我从14年就开始构思这篇文章。当时,我还在业余时间学习编译原理,现在,投入到这方面的时间更少了。没有在工作岗位上做相关的工作,只能买编译器方面的书读一读而已。我一直认为,对于编程语言、编译器的学习,是程序员的基本功,是无论工作了多少年,都需要不断深入下去的。关于研究历史的重要性,相信这是不言而喻的。以史为镜,可以知兴替。如果我们想要预见数学的将来,适当的途径是研究这门科学的历史和现状 --庞加莱。知技术的兴替与未来,可是了不起的才能。在这里,我只想简单的总结一下,对我们刚学习编程的同学有点参考作用。这个话题可以做的很大,希望有专业研究者来做详尽深入的剖析。

  50年代,出现。最早的电子计算设备出现于二战,那时候的机器计算能力实在有限,而且专注于做数学计算,所以,人们直接写机器码或者汇编,但是,这样非常容易出错。50年代开始,计算机语言开始了革命性的发展,从汇编到 高级语言,发生了质变。Fortran(1955),LISP(1958,注意,是全大写),COBOL(1959),三个语言的出现,对先进的语言有着极大的影响。其中,Fortran的设计者和实现者约翰·巴科斯,提出了BNF,是一种描述高级语言表达方式的方法,是一种描述”上下文无关文法“的语言。现今的大多数语言多采用其衍生的版本 EBNF来描述,计算机语言便如同数学一样准确无歧义。不得不提到一个和计算机学科无关的人,诺姆·乔姆斯基,是一位自然语言学家,他于1956年提出了著名了语言分级理论,正好被计算机语言研究的人用上了。
  60年代,ALGOL 60,是一门具有里程碑式意义的编程语言,是第一个清晰定义的语言,其语法是用严格公式化的方法说明的,引进了很多新的概念,如:局部性概念,动态,递归,BNF等,给后续的编程语言带来了很大的影响,它标志这程序语言设计成为一门独立的学科。它的第一个编译器是艾兹赫尔·戴克斯特拉实现的,对,就是是操作系统大神,计算机科学家,图灵奖获得者。

70年代,是快速发展的时代。最早的计算机只是用来做计算的,到后来,就更多的被用来处理通用事务。由于不同类型事务需要不同特点的语言来写程序,比如,操作系统不能再由汇编来写了,也不能用太高级的语言,需要在性能和工程上做出平衡,所以,C是一个不错的选择;做更大的系统,需要面向对象的概念;做逻辑学研究,需要Prolog;做结构化查询,需要SQL。在这时,便逐渐兴起了编程范式的概念:函数式,结构化编程,面向过程,面向对象,逻辑式等等,像反射式/自省,面向切面等由于硬件开销很大,出现的时间就晚了。这十年,出现了C,Pascal,Prolog,SQL,Smalltalk,Simula,ML等语言。
面向切面并不是Java独有或者提出的,这个概念最早出现于LISP语言,在90年代初为LISP添加面向对象特性--CLOS提出的。所以,因此而崇拜Java的同学可以哭一秒了。

  80年代,编程语言被增强。这10年,基本上没有出现新的编程范式,大家都对上个10年出现的开创性语言做功能增强。对编译器的研究开始红火。在那个年代,不只是机器硬件的价格惊人,编译器的价格也惊人。非大公司、研究机构,也没谁买得起了。

  90年代,互联网时代。新兴的语言有:PHP,Java,JavaScript,Ruby,VB,Python,Delphi,HTML,Lua,Haskell等。这些语言中不少都和万维网的兴起有关。这非常具有时代的特点。这是,机器的性能也有了长足的发展,面向对象这样大开销的特征也慢慢被接受了,垃圾回收在Web系统中也能容忍。相关的语言设计、算法都有了发展。

  21世纪,在工业和学术界,编程语言研究都还是取得了进步的。语言的可靠性与安全性被注重,元编程、反射这样的高一个数量级计算量的特征也被容忍了,分布式计算、异构编程等新研究领域也有发展。新的语言有:C#,F#,Scala,Go,Swift等,但是,可以看到,他们并没有引起巨大的影响,多是对传统语言的改善而已。所以,大家不必盲目追求学习新的语言。

  SICP中提到,所谓的计算机科学,CS(Computer Science)既无关计算机,也无关科学。想想也有点道理。我们大多数程序员,既不做CPU体系研究,也不做编程语言理论的研究,只是用一下语言而已。

  有人说,编程语言理论方面的研究,在上世纪90年代就基本结束了,已经没有什么好研究的了,该研究的都已经研究了,没有搞出来的,我们现在的智力也不太够了,等着以后吧。

“Visualizing Influence Relations of Programming Languages”这个项目是非常有意思的,大家可以看看[10],项目作者以可视化的方式呈现了历史上各种编程语言的影响力。这个项目还是挺受推崇的,也有一定的可信度,虽然不知作者的的评判标准。大家看看就行,大概有个概念就行,也不可尽信这个图画。

 

ref

  1. http://en.wikipedia.org/wiki/History_of_programming_languages     
  2. http://www.youtube.com/watch?v=tzUbxALPcyw                     
  3. http://www.smashingmagazine.com/2010/06/06/designing-the-world-of-programming-infographic/
  4. http://www.soimort.org/posts/160/
  5. http://www.zcom.com/articlew/70198/
  6. http://www.cnblogs.com/rush/archive/2011/06/03/2072204.html
  7. http://www.i-programmer.info/news/98-languages/5778-a-brief-history-of-programming-languages.html
  8. http://foorious.com/articles/brief-history-of-programming-languages/
  9. https://en.wikipedia.org/wiki/Programming_language
  10. https://exploringdata.github.io/vis/programming-languages-influence-network/   

 

如果有任何意见,欢迎留言讨论。


[ 主页 ]
COMMENTS
POST A COMMENT

(optional)



(optional)