Racket 的诞生与发展
Lisp语言的历史很久,几乎与史上第一个高级语言Fortran一样长。1957年计算机科学家首先发明了针对数字计算的Fortran语言,后来针对符号计算,由MIT的John McCarthy于1958年开发了Lisp (List processing)语言。
1958年,人工智能之父John McCarthy 发明了一种以 Lambda 演算为基础的符号处理语言,1960年 McCarthy 发表著名论文《Recursive Functions of Symbolic Expressions and Their Computation by Machine》(符号表达式的递归函数及其机器计算), 从此这种语言被命名为 LISP (List Processor)。其语法被命名为:符号表达式(S-Expression)。LISP构建在7个函数 [atom car cdr cond cons eq quote] 和2个特型 [lambda label] 之上。
Lisp诞生之初是为了纯粹的科学研究,代码执行像数学公式一样,以人的大脑来演算。直到麦卡锡的学生斯蒂芬·罗素将eval函数在IBM 704机器上实现后,才开启了Lisp作为一种计算机语言的历史。1962年,第一个完整的Lisp编译器在MIT诞生,从此之后Lisp以MIT为中心向全世界传播。之后十多年,出现了各种Lisp方言。
具体说来,LISP有以下几个主要特点:
1.计算用的是符号表达式而不是数;
2.具有表处理能力,即用链表形式表示所有的数据;
3.控制结构基于函数的复合,以形成更复杂的函数;
4.用递归作为描述问题和过程的方法;
5.用LISP语言书写的EVAL函数既可作为LISP语言的解释程序,又可以作为语言本身的形式定义;
6.程序本身也同所有其他数据一样用表结构形式表示。
已经证明:LISP的这些特点是解决人工智能核心问题的关键。它和后来由英国伦敦大学的青年学生柯瓦提出、由法国马赛大学的考尔麦劳厄(Alain Colmerauer)所领导的研究小组于1973年首先实现的逻辑式语言PROLOG并称为人工智能的两大语言,对人工智能的发展起了十分深远的影响。
1975年,Scheme诞生。Scheme同样诞生与MIT,它的设计哲学是最小极简主义,它只提供必须的少数几个原语,所有其它的实用功能都由库来实现。在极简主义的设计思想下,Scheme趋于极致的优雅,并作为计算机教学语言在教育界广泛使用。
1984年,Common Lisp诞生。在二十世纪七八十年代,由于Lisp方言过多,社区分裂,不利于lisp整体的发展。从1981年开始,在一个Lisp黑客组织的运作下,经过三年的努力整合后,于1984年推出了Common Lisp。由于Scheme的设计理念和其它Lisp版本不同,所以尽管Common Lisp借鉴了Scheme的一些特点,但没有把Scheme整合进来。此后Lisp仅剩下两支方言: Common Lisp 和 Scheme。
从二十世纪九十年代开始,由于C++、Java、C#的兴起,Lisp逐渐没落。直到2005年后,随着科学计算的升温,动态语言JavaScript、Python、Ruby的流行,Lisp又渐渐的回到人们的视线。不过在Lisp的传统阵地教育界,Python作为强有力的挑战者对Scheme发起冲锋;在2008年,MIT放弃了使用Scheme作为教学语言的SICP(《计算机程序的构造和解释》)课程,而启用Python进行基础教学。
同时美国东北大学另立炉灶,其主导的科学计算系统PLT Scheme开始迅猛发展,成为著名的专家型语言PLT Scheme,同时又是Lisp语言的一个分支。2010年,PLT Scheme改名为Racket。它适用于从脚本Script到应用程序开发的任务执行工具,包括图形用户界面,Web服务器等。支持编译器的虚拟机,创建独立的可执行程序的工具,Racket Web服务器,具有丰富而全面的功能库,适用于初学者和专家编程。近几年,The Racket Language连续成为年度最活跃语言网站,并驾齐驱的还有haskell网站。
历程
|
Lisp语言系列
|
贡献者
|
备注
|
1950s
|
IPL语言
|
美国Carnegie-Mellon大学
的Newell、Shaw、Simon
|
首创“表结构”
|
1958
|
Lisp诞生
|
John McCarthy于美国MIT
|
仅比Fortran晚一年
|
1975
|
Scheme
|
由MIT的Gerald J. Sussman
和Guy L. Steele Jr.完成
|
与其他lisp不同的是scheme
可以编译成机器码的
|
1983
|
xlisp
|
David Betz
|
具备面向对象功能,是AutoLisp之源
|
1984
|
Common Lisp
|
Guy L. Steele
|
实现标准化
|
1990
|
IEEE Scheme
|
IEEE
|
IEEE standard, 1178–1990 (R1995)
|
1994
|
ANSI Common Lisp
|
ANSI
|
ANSI X3.226-1994
|
2005
|
Practicle Common Lisp
|
Peter Seibel
|
Open Source (free online)
|
2007
|
Scheme Standard
|
R6RS
| |
2010-6
|
更名为Racket
|
Matthias Felleison
|
同时将DrScheme更名为DrRacket
|
* racket——系统核心部分,主要包括编译器、解释器和运行库程序;
* DrRacket——原为DrScheme,是一个基于Racket的开源、跨平台系统的IDE集成编程环境,更加适用于初学者的GUI图形化用户编程界面;
* raco——基于字符界面的命令行执行工具,用于执行Racket命令集,如安装系统组件功能包,创建函数库等。
Racket的特点是具有全面而丰富的库,可用于实现xml, web-server, web-framework, multiple-threads, pattern match, latex, slides, posix, GUI等,其实用性不比Common Lisp差。另外其与众不同的特点在于macro和continuation,并引入了syntax object和compilable macro的概念。