如何管理常见的lisp依赖项?

时间:2013-10-31 22:56:16

标签: dependencies lisp common-lisp quicklisp asdf

什么是pip需求文件,ruby gemfile,node package.json等的lisp等价物?我不完全确定asdf和quicklisp是如何关联的,如果这些是适当的使用方法。

4 个答案:

答案 0 :(得分:4)

.asd文件是需求文件。使用quicklisp安装需求。

使用ASDF定义“系统”。创建my-system.asd文件。

(asdf:defsystem #:my-system
  :serial t
  :description "Describe my-system here"
  :author "My Name <my.name@example.com>"
  :license "Specify license here"
  :depends-on (#:hunchentoot
               #:cl-who)
  :components ((:file "package")
               (:file "dispatch")))

这将创建名为#:my-system的系统。我真的不确定#表示什么,因为我在源代码中没有看过系统定义。只需要第一行。 :depends-on告诉ASDF在处理此新系统定义之前加载其他系统。在这种情况下,它会加载#:hunchentoot#:cl-who:components加载特定文件。已加载package.lispdispatch.lisp:serial t告诉它按顺序加载它。如果dispatch.lisp取决于package.lisp中的某些内容,则需要首先加载package.lisp,这一点非常重要。

使用quicklisp在:depends-on下载和安装依赖项。跑 (ql:quickload "my-system")

我没有看到任何版本控制的迹象。

答案 1 :(得分:1)

首先,pip的requirements.txt与rubygem或节点的package.json非常不同:前者仅指定依赖关系,而后者则描述包,包括其依赖关系。

Python的pip实际上也依赖于类似的包描述格式,称为“eggs”。

与rubygem直接相当的是ASDF defsystem形式,通常放在文件<system-name>.asd中(“系统”是Lisp的术语,可称为包,模块或其他语言的图书馆 - 有关更详细的说明,请参阅here

两个主要区别是:

  • ASDF还允许指定如何构建(以及加载,测试等)系统(有点等同于makefile) - AFAIK,在rubygems或节点中没有这样的概念

  • 与gems或节点不同,ASDF不提供下载和安装软件包的机制。这是quicklisp的用武之地 - 它涉及获取ASDF系统。但ql不是唯一的方法:历史上还有其他方法可以安装ASDF库,包括ASDF-Installclbuild,其他方法可能会在未来出现

答案 2 :(得分:1)

Qlot

对于与ASDF和Quicklisp的关系,其他答案给出了一个很好的方法。

我想说的是,现在你可以使用一个非常类似于尖头的常见lisp库,可以在quicklisp上找到,Qlot。它用于指定项目本地依赖项。它与ruby中的bundle和gemfile非常相似。

Quicklisp捆绑

2015-04-28中也可以使用quicklisp bundles Quicklisp库包是从Quicklisp导出并可加载而不涉及Quicklisp的自包含系统集。

答案 3 :(得分:0)

没有与上述相同的一对一。然而,ASDF + Quicklisp组合非常接近。

使用ASDF,您可以定义系统(模块,如果您愿意) - 以一致的方式打包您的lisp文件,并声明您的依赖项。 Quicklisp是这些系统的源的在线存储库。当您使用Quicklisp加载系统时,它将下载这些依赖项并为您加载它们。

现在我不确定是否存在版本控制......