编程语言上下100年——简述编程语言发展史

1. 编程语言发展

1.1 1940年之前

第一个编程语言比现代的计算机还早诞生。首先,这种语言是种编码。

于1804年发明的提花织布机(或称甲卡提花织布机),运用打孔卡上的坑洞来代表缝纫织布机的手臂动作,以便自动化产生装饰的图案。

爱达·勒芙蕾丝在1842年至1843年间花费了九个月,将意大利数学家Luigi Menabrea关于查尔斯·巴贝奇新发表机器分析机的回忆录翻译完成。她于那篇文章后面附加了一个用分析机计算伯努利数方法的细节,被部分历史学家认为是世界上第一个电脑程序。 [2]

Herman Hollerith在观察列车长对乘客票根在特定位置打洞的方式后,意识到他可以把信息编码记载到打孔卡上,随后根据这项发现使用打孔卡来编码并纪录1890年的人口统计资料。

最先出生的编程语言是机器语言

它非常简单。有多简单呢?简单到只用“1”和“0”两个数字就可以进行编程。

image

优势:计算机能够直接识别,执行速度快

劣势:学习难度大 编程效率低

1.2 1940年代

最早被确认的现代化、电力引导(electrically powered)的计算机约在1940年代被创造出来。程序员在有限的速度及存储器容量限制之下,撰写人工调整(hand tuned)过的汇编语言程序。而且很快就发现到使用汇编语言的这种撰写方式需要花费大量的脑力(intellectual effort)而且很容易出错(error-prone)。

image

所以直到现在,汇编语言仍能占有一席之地。只是,这一席被挤得越来越没有空间。

康拉德·楚泽于1948年发表了他所设计的Plankalkül编程语言的论文。但是在他有生之年却未能将该语言实现,而他原本的贡献也被其他的发展所孤立。

在这段期间被开发出来的重要语言包括有:

  • 1943 - Plankalkül (Konrad Zuse)
  • 1943 - ENIAC coding system
  • 1949 - C-10

优势:相比于机器语言难度有所降低
劣势:学习难度大 编程效率低

1.3 1950与1960年代

有三个现代编程语言于1950年代被设计出来,这三者所派生的语言直到今日仍旧广泛地被采用,

其中就有集万千宠爱于一身、引无数程序员竞头秃的高级编程语言诞生了。

  • Fortran (1955),名称取自"FORmula TRANslator"(公式翻译器),由约翰·巴科斯等人所发明;是世界上第一个被正式采用并流传至今的高级编程语言
  • LISP,名称取自"LISt Processor"(枚举处理器),由约翰·麦卡锡等人所发明;
  • COBOL,名称取自"COmmon Business Oriented Language"(通用商业导向语言),由被葛丽丝·霍普深刻影响的Short Range Committee所发明。

用人类能够读懂的字符与计算机沟通交流
优势:学习难度大大降低 编程效率大大提高
劣势:计算机无法直接识别 执行速度相对较慢

1.4 1967-1978:确立了基础范型

1960年代晚期至1970年代晚期的期间中,编程语言的发展也有了重大的成果。大多数现在所使用的主要语言范型都是在这段期间中发明的:

Simula,于1960年代晚期由奈加特与Dahl以Algol 60超集合的方式发展,同时也是第一个设计支持面向对象进行开发的编程语言。

  • C,于1969至1973年间由贝尔实验室的研究人员丹尼斯·里奇与肯·汤普逊所开发,是一种早期的系统程序设计语言。

  • Smalltalk,于1970年代中期所开发,是一个完全从零开始(ground-up)设计的面向对象编程语言。

  • Prolog,于1972年由Colmerauer、Roussel,以及Kowalski所设计,是第一个逻辑程序语言。

  • ML,于1973年由罗宾·米尔纳所发明,是一个基于Lisp所建构的多态(polymorphic)类型系统,同时也是静态类型函数编程语言的先驱。

    这些语言都各自演展出自己的家族分支,现今多数现代编程语言的祖先都可以追溯他们其中至少一个以上。

1.5 1980年代:增强、模块、性能

1980年代的编程语言与之前相较显得更为强大。C++合并了面向对象以及系统程序设计。美国政府标准化一种名为Ada的系统编程语言并提供给国防承包商使用。日本以及其他地方运用了大量的资金对采用逻辑编程语言结构的第五代语言进行研究。函数编程语言社区则把焦点转移到标准化ML及Lisp身上。这些活动都不是在开发新的范型,而是在将上个世代发明的构想进一步发扬光大。

然而,在语言设计上有个重大的新趋势,就是研究运用模块或大型组织化的程序单元来进行大型系统的开发

在这段期间被开发出来的重要语言包括有:

  • 1980 - Ada
  • 1983 - C++ (就像有类别的C)
  • 1984 - Common Lisp
  • 1985 - Eiffel
  • 1986 - Erlang
  • 1987 - Perl
  • 1988 - Tcl
  • 1989 - FL (Backus)
1.6 1990年代:互联网时代

1990年代未见到有什么重大的创新,大多都是以前构想的重组或变化。这段期间主要在推动的哲学是提升程序员的生产力。许多"快速应用程序开发" (RAD) 语言也应运而生,这些语言大多都有相应的集成开发环境、垃圾回收等机制,且大多是先前语言的派生语言。这类型的语言也大多是面向对象的编程语言,包含有Object Pascal、Visual Basic,以及C#。Java则是更加保守的语言,也具备垃圾回收机制。与其他类似语言相比,也受到更多的观注。

在这段期间被开发出来的重要语言包括有:

  • 1990 - Haskell
  • 1991 - Python
  • 1991 - Visual Basic
  • 1993 - Ruby
  • 1993 - Lua
  • 1994 - CLOS (part of ANSI Common Lisp)
  • 1995 - Java
  • 1995 - Delphi (Object Pascal)
  • 1995 - JavaScript
  • 1995 - PHP
  • 1997 - REBOL
  • 1999 - D
1.7 现今的趋势

编程语言持续在学术及企业两个层面中发展进化,目前的一些趋势包含有:

  • 在语言中增加安全性与可靠性验证机制:额外的堆栈检查、信息流(information flow)控制,以及静态线程安全。
  • 提供模块化的替代机制:混入、委派(en:delegates),以及观点导向。
  • 组件导向(component-oriented)软件开发
  • 元编程、反射或是访问抽象语法树
  • 更重视分布式及移动式的应用。
  • 与数据库的集成,包含XML及关系数据库。
  • 支持使用Unicode编写程序,所以源代码不会受到ASCII字符集的限制,而可以使用像是非拉丁语系的脚本或延伸标点符号。
  • 图形用户界面所使用的XML(XUL、XAML)。

在这段期间被开发出来的重要语言包括有:

  • 2001 - C#
  • 2001 - Visual Basic .NET
  • 2002 - F#
  • 2003 - Scala
  • 2003 - Factor
  • 2006 - Windows PowerShell
  • 2007 - Clojure
  • 2009 - Go
  • 2014 - Swift (编程语言)

2. 编程语言的分类

高级语言是大多数编程者的选择。高级语言主要是相对于汇编语言而言,它并不是特指某一种具体的语言,而是包括了很多编程语言,高级语言所编制的程序不能直接被计算机识别,必须经过转换才能被执行,按转换方式可将它们分为解释型和编译型。

  • 编译型

    编译性语言写的程序在被执行之前,需要一个专门的编译过程,把程序编译成为机器语言的文件,比如exe文件,以后要运行的话就不用重新翻译了,直接使用编译的结果就行了(exe文件),因为翻译只做了一次,运行时不需要翻译,所以编译型语言的程序执行效率高。

    类似于谷歌翻译 一次性翻译完成后可以多次使用

    常用编译型语言:C、C++、Golang

  • 解释型

    解释型语言的程序不需要编译,在运行程序的时候才翻译,每个语句都是执行的时候才翻译。这样解释性语言每执行一次就需要逐行翻译一次,效率比较低。

    类似于同声传译 说一句翻译一句

    常用解释型语言:python、perl、php、ruby

image

3. 总结

编译型语言和解释型语言的差异总结为下表:

类型原理优点缺点
编译型语言通过专门的编译器,将所有源代码一次性转换成特定平台(Windows、Linux 等)执行的机器码(以可执行文件的形式存在)。编译一次后,脱离了编译器也可以运行,并且运行效率高。可移植性差,不够灵活。
解释型语言由专门的解释器,根据需要将部分源代码临时转换成特定平台的机器码。跨平台性好,通过不同的解释器,将相同的源代码解释成不同平台下的机器码。一边执行一边转换,效率很低。
  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浪子小院

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值