快速业务通道

探索JVM上的LISP - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-20

探索JVM上的LISP

时间:2011-01-27 infoq 译:张凯峰

当前Java领域最激动人心的事情莫过于可允许其它编程语言运行于Java虚拟机上。围绕JRuby、Groovy、Scala还有 Rhino(JavaScript引擎)的讨论已经甚嚣尘上。可为什么要墨守陈规呢?如果你真的想跳出主流,投身于一种与Java截然不同的的语言,Lisp就不失为一种很好的选择。现在已有几种可运行于JVM上的Lisp程序设计语言的开源实现,准备好开始我们的探索之旅吧!

Lisp有什么值得研究呢?首先,作为已有50年历史的语言,它促成许多被我们今日视为理所当然的观念。if-then-else结构、早期的面向对象和带垃圾回收的自动内存管理的尝试都来源于此。目前Java程序员的热点话题——词汇闭包(Lexical Closure),最初的探索也是七十年代在Lisp中展开的。除此以外,Lisp还具备其它许多语言至今都未采用的特性,这些出色的思想必将在未来引起复兴潮流。

本文的目标读者是有意了解Lisp的Java开发人员。我们将在接下来的内容中讨论当前可以用在JVM上的不同Lisp方言(dialect),令你快速了解Lisp程序设计工作机理和其独特之处,文章的最后会演示如何将Lisp代码与Java系统进行整合。

目前存在许多可用于不同平台的Lisp系统,有免费的也有商业的。对于想要开始探索Lisp的Java用户,不离开JVM是首选,这样的话起步很容易,还可以很方便的使用所有自己熟悉的Java库和相关工具。

Common Lisp和Scheme

Lisp有两种主要方言(dialect):Common Lisp和Scheme。虽然设计理念大体相似,但是它们的差别仍然足够引起孰优孰劣的激烈争论。

Common Lisp是1991年完成的ANSI标准。统一了几种早期Lisp的理念,是可用于多种应用开发的大型环境,其最为著名的应用是人工智能。而Scheme 产生于学术界,特意进行了精简化设计,经验证是一种很好的语言,既可用于计算机科学教学,又可以作为嵌入式脚本语言。你还可能会遇到其它一些比较有名的 Lisp:小型的特定于应用的DSLs,如Emacs Lisp或AutoCAD的AutoLISP。

上面提到的两种主要方言(dialect)在JVM上都有相应的实现,相较而言Schemes的实现要成熟一些。Armed Bear Common Lisp(www.armedbear.org/abcl.html)非常彻底的实现了Common Lisp标准,但它存在一个问题,如果你没有安装别的Common List系统,就不能构建分发版本,这对新手可能是个困难。

在Scheme方面,两个主要的产品是Kawa(www.gnu.org/software/kawa)和SISC(www.sisc-scheme.org——the Second Interpreter of Scheme Code)。在这篇文章的例子当中,我们会用到Kawa,它实际上是个框架,能创造可编译成Java字节码的新语言。Scheme只是它的实现之一。顺便说一句,Kawa的创建者Per Bothner目前就职于Sun,主要从事JavaFX项目的编译器方面的工作。

另外一个值得一提的竟争对手是Clojure(clojure.sourceforge.net)。这是一种新的语言,其Lisp方言(dialect)介于Scheme和Common Lisp之间。它是直接为JVM量身打造的,因此在上面提到的所有Lisp当中,有着最为清晰Java整合方案。它还具有其它一些激动人心的特性,例如内建的支持并发和事务内存。Clojure目前仍然处于探索测试阶段,因此在它基础上构建程序还有些为时尚早,但它绝对是一个值得关注的项目。

读取—求值—打印—循环

我们先来安装Kawa。它的分发版是一个单独的Jar文件,可以直接通过链接ftp://ftp.gnu.org/pub/gnu/kawa/kawa-1.9.1.jar下载。得到该Jar包后,就把它加进你的类路径上,这样你就可以通过运行如下命令启动REPL了:

java kawa.repl   #|kawa:1|#

该命令启动了Kawa,并显示一个提示符。这其中究竟有何奥妙呢?REPL(READ-EVAL-PRINT-LOOP)意思是读取—求值—打印&

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号