Lisp项目构建和包管理工具

如果用Common Lisp(以下简称CL)编写大型程序的话,肯定会遇到如下两个问题:
1,多个源文件如何组织,编译和依赖。
2,如何引入其他的Lisp软件包。
这就不得不引入ASDF和Quicklisp两个工具了。

项目构建工具-ASDF
ASDF是Another System Definition Facility的缩写。这个名字够个性(程序员都知道为什么)。ASDF用来描述Lisp源文件之间的相互依赖关系,进而保证程序的各个部分能够按照正确的顺序进行编译、加载、测试等等。可以近似地把ASDF看作编写C语言程序时所用到的GNU Make工具和Java的Ant工具。ASDF最新已经发布了ASDF 2,ASDF 2指的是2.000及以后的发布版本;1.656到1.728之间的发布版本是ASDF 2的开发版;ASDF 1指的是1.369之前的版本。

许多Lisp实现都包含了ASDF,可以使用Common Lisp的require函数加载ASDF模块:(require :asdf)或(require 'asdf)(我所使用的SBCL 1.0.40和Clisp 2.48在启动的时候都会自动加载ASDF模块,因此无需手工加载)。可以使用(asdf:asdf-version)函数查看ASDF是否加载成功,如果此函数引发一个异常,那么要么ASDF没有加载成功,要么正在使用的是ASDF 1的较旧的版本。如果Lisp实现中没有包含ASDF,可以使用(load "/path/to/asdf.lisp")手动加载ASDF。
具体的使用方法 参考2 有介绍。不多说了。
另一个工具是MK-DEFSYSTEM(http://www.cliki.net/mk-defsystem),不过使用没有asdf流行。 有些Common Lisp实现也有它们自己的系统构建支持。

Lisp依赖包管理工具-Quicklisp

Quicklisp是Common Lisp的库管理工具。按照其官方介绍:Quicklisp支持数十种主流的CL实现,并且提供超过700个包(库)的下载,安装,管理和加载。个人认为Quickliap类似于ubuntu的apt工具或者java的maven工具。实现(库)包的依赖管理。

安装quicklisp
开启一个lisp shell,并包含此文件。
$ sbcl --load quicklisp.lisp
然后安装quicklisp
* (quicklisp-quickstart:install)
然后你需要在每次启动sbcl或者clisp的时候自动加载quicklisp
* (ql:add-to-init-file)
搜索软件包,类似于apt-cache search。例如搜索带有vector的lisp库,注意字符串两旁的双引号。
* (ql:system-apropos "vector")
安装软件包
* (ql:quickload "lib-name")
升级所有安装了的lisp库
* (ql:update-all-dists)
升级quicklisp本身
* (ql:update-client)
quicklisp系统概览
安装之后,quicklisp会在系统的home目录下新建一个quicklisp目录,所有的文件和库都放在这个地方。

存在的问题:

(ql:system-apropos "socket")

The interpreter showed an error which was,

No address associated with hostname (error #-5) during socket creation or nameserver operation in gethostbyname
[Condition of type CCL:SOCKET-CREATION-ERROR]

这个问题浪费了我半天的时间,最后才发现beta.quicklisp.org无法访问的原因,试用了代理直接访问,发现网站是没有问题了。不用说,肯定是伟大的GFW在作怪吧。

quicklisp和asdf的关系
How is Quicklisp related to ASDF?
Quicklisp has an archive of project files and metadata about project relationships. It can download a project and its dependencies. ASDF is used to actually compile and load the project and its dependencies.
ASDF is a little like make and Quicklisp is a little like a Linux package manager.
quicklisp使用了asdf处理库文件之间的依赖关系。但是用户并不需要直接使用asdf本身,因为quicklisp类似于ubuntu的apt,而asdf类似于makefile。Quicklisp记录工程文件存档和工程之间的关系。Asdf编译工程和加载工程的依赖。
总结

关于asdf使用的具体介绍就等下篇文章了。



参考:
[1] 用 sbcl, asdf 和 cl-launch 编写可分发的 lisp 程序 -冰河伞哥 http://tianchunbinghe.blog.163.com/blog/static/7001200692314249376/
[2] ASDF Manual ---http://common-lisp.net/project/asdf/asdf.html#Loading-ASDF
[3] http://basiccoder.com/constructing-common-lisp-package-by-asdf.html
【4】Quicklisp web sites http://www.quicklisp.org/beta/index.html
【5】http://www.cnblogs.com/unionx/articles/quicklisp-intro.html
【6】https://news.ycombinator.com/item?id=3809098
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
LISP语言的开发实例有很多,以下是其中一些例子: 1. Emacs:Emacs是一个非常流行的文本编辑器,它是用LISP语言编写的。Emacs提供了丰富的功能和扩展性,使得它成为程序员和开发人员的首选工具之一。 2. AutoCAD:AutoCAD是一款用于计算机辅助设计和绘图的软件,它的核心部分也是用LISP语言编写的。LISP语言在AutoCAD中被用于自定义命令和功能,使得用户可以根据自己的需求进行定制和扩展。 3. Common Music:Common Music是一个用于音乐创作和演奏的软件,它使用LISP语言作为其编程语言。通过Common Music,用户可以使用LISP语言来编写音乐算法和创作音乐作品。 4. Maxima:Maxima是一个用于数学计算和符号计算的软件,它也是用LISP语言编写的。Maxima提供了丰富的数学函数和算法,可以用于解方程、求导、积分等各种数学计算。 这些都是LISP语言在不同领域中的应用实例,展示了LISP语言的灵活性和强大的功能。无论是文本编辑、计算机辅助设计、音乐创作还是数学计算,LISP语言都能够提供强大的支持和扩展性。 #### 引用[.reference_title] - *1* *2* *3* [Common Lisp编程初步---环境搭建和外部lisp代码运行](https://blog.csdn.net/RobertChenGuangzhi/article/details/51170591)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值