Linux.中国 - 开源社区

 找回密码
 骑士注册

QQ登录

微博登录


编程语言简史

ALGOL 60

ALGOL60(算法语言1960,ALGOrithmic Language 1960)是1960年在专业协会推动下所诞生的非常优秀且影响巨大的一门编程语言。

它从未流行过但是它引入了许多重要的概念,包括取消GOTO语句。

像BASIC这样的语言里会需要用到行间跳转,这样使得程序的可读性很差,写出来的程序也很容易出错。

ALGOL 60引入了结构体与块的概念:它使用BEGIN和END(当时还没有花括号呢),多亏了ALGOL 60才开始有了块的概念,而不用再使用GOTO语句了。

ALGOL的目标是通用性更强一些,以便科学计算和业务开发都能使用。

ALGOL程序是这样的:

procedure Absmax(a) Size:(n, m) Result:(y) Subscripts:(i, k);
    value n, m; array a; integer n, m, i, k; real y;
comment The absolute greatest element of the matrix a, of size n by m
is transferred to y, and the subscripts of this element to i and k;
begin integer p, q;
    y := 0; i := k := 1;
    for p:=1 step 1 until n do
    for q:=1 step 1 until m do
        if abs(a[p, q]) > y then
            begin y := abs(a[p, q]);
            i := p; k := q
            end
end Absmax

Pascal

Pascal由Niklaus Wirth于1968到1969年间进行设计并于1970年公诸于世,它也受到了ALGOL语言的影响。

它一度非常流行,尽管最初仅是设计为一个教学工具,但很长一段时间内有不少人都用它来进行通用性的编程。

然而,它的模块化有所欠缺并有一些设计上的问题,使得这门语言编程起来比较困难。

上段代码吧:

while a <> b do  WriteLn('Waiting');
 
if a > b then WriteLn('Condition met')   {no semicolon allowed!}
           else WriteLn('Condition not met');
 
for i := 1 to 10 do  {no semicolon for single statements allowed!}
  WriteLn('Iteration: ', i);
 
repeat
  a := a + 1
until a = 10;
 
case i of
  0 : Write('zero');
  1 : Write('one');
  2 : Write('two');
  3,4,5,6,7,8,9,10: Write('?')
end;

(我仍记得14岁的时候在学校用Pascal编程的情形,简直酷毙了)。

B

B语言由贝尔实验室于1969年所发明。它的设计受到了Fortran和BCPL的影响。

B语言实际上就是去除了Thompson所认为的无用组件的BCPL系统,以便使得它能适合当时微机的内存容量。 [http://en.wikipedia.org/wiki/B_(programming_language) ](http://en.wikipedia.org/wiki/B_(programming_language))

B引入了+=操作符(尽管应该念成=+),以及自增/自减操作符(++和--)

printn(n,b) {
        extrn putchar;
        auto a;
 
        if (a=n/b) /* assignment, not test for equality */
                printn(a, b); /* recursive */
        putchar(n%b + '0');
}

C

C语言就是是B语言加上了Pascal里面的一些好的特性所组成的。它由Dennis Ritchie于1969年到1973年间在贝尔实验室所发明。

C语言应该是最重要的一门语言了。它获得了前所未有的成功。

除此之外,许多语言都是在C的基础上进行设计的,包括:

  • C++(1976)
  • Objective-C(1986)
  • Perl(1988)
  • Java(1991)
  • Python(1991)
  • JavaScript(1995)
  • PHP(1995)
  • C#(1999)
  • Go(2007)
  • 等等

Simula

挪威的仿真语言Simula I和Simula 67——从语法上来讲——是ALGOL 60的完整的超集。

它的影响非常深远。Simula以ALGOL 60为基础,并添加了对象的概念,因此它也被认为是第一门面向对象的编程语言。

Simula 67(于1967年发布)引入了对象,类,继承和子类的概念,同时还有虚函数,协程,以及离散事件模拟。

这还不止,它还引入了垃圾回收的特性。

它的程序是这样的:

Begin
   Class Glyph;
      Virtual: Procedure print Is Procedure print;
   Begin
   End;

   Glyph Class Char (c);
      Character c;
   Begin
      Procedure print;
        OutChar(c);
   End;

   Glyph Class Line (elements);
      Ref (Glyph) Array elements;
   Begin
      Procedure print;
      Begin
         Integer i;
         For i:= 1 Step 1 Until UpperBound (elements, 1) Do
            elements (i).print;
         OutImage;
      End;
   End;

   Ref (Glyph) rg;
   Ref (Glyph) Array rgs (1 : 4);

   ! Main program;
   rgs (1):- New Char ('A');
   rgs (2):- New Char ('b');
   rgs (3):- New Char ('b');
   rgs (4):- New Char ('a');
   rg:- New Line (rgs);
   rg.print;
End;

Smalltalk

Simula对Alan Kay的影响极大——他曾经就职于Xerox PARC,并于1972年开始研发Smalltalk。

Smalltalk最初是设计给小孩用的。它在真实环境下做了充分的测试,并进行了数次重构。它历经了多次改版在首次发布8年后才最终面世。

Smalltalk是一门伟大的语言,它是第一个真正的现代面向对象编程语言。

由于它的语法很难掌握,因此它一直也没能流行起来。然而,它几乎对所有的现代编程语言都产生了影响。Objective-C, C++, Java, C#, Eiffel, 和Ruby基本上都是C和Smalltalk的混合体。

下面这个例子演示了Smalltalk版的控制结构:

result := a > b
    ifTrue:[ 'greater' ]
    ifFalse:[ 'less or equal' ]
   

Self

这是Smalltalk所影响的又一门语言——它也是在Xerox PARC中研发的——它就是Self)。

Self的设计目标是为了提升性能。它以Smalltalk为原型,并去掉了其中类的概念,以便运行速度能更快。

它没有使用类的概念,而是用到了原型:Self允许对象可以不通过类而直接继承自其它对象。

你可能也猜到了,JavaScript正是受它所影响的语言之一。

查看其它分页:

发表评论


最新评论

我也要发表评论

来自 - 上海 的 Firefox/Windows 用户 2014-12-3 09:58
大赞,谢谢作者分享!
回复
锻炼体身2014 2014-11-11 12:33  新浪微博网友评论
这个朋友够无聊
回复
狗语者 2014-11-11 10:33  新浪微博网友评论
谢谢分享。非常好的文章[握手]
回复
返回顶部

分享到微信朋友圈

打开微信,点击底部的“发现”,
使用“扫一扫”将网页分享至朋友圈。