6

pip 需求文件、ruby gemfile、node package.json 等的 lisp 等价物是什么?如果这些是正确使用的东西,我不完全确定 asdf 和 quicklisp 之间的关系。

4

4 回答 4

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.lisp并被dispatch.lisp加载。:serial t告诉它按顺序加载它。如果说取决于需要首先加载的某些内容,这很dispatch.lisp重要。package.lisppackage.lisp

使用 quicklisp 下载并安装:depends-on. 运行 (ql:quickload "my-system")

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

于 2013-11-02T07:16:32.097 回答
1

首先,pip'srequirements.txt与 ruby​​gem 或 node's 非常不同package.json:前者仅指定依赖项,而后者描述包,包括其依赖项。

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

rubygem 的一个非常直接的等价物是 ASDF形式 defsystem,通常放在一个文件中<system-name>.asd(“系统”是 Lisp 的术语,在其他语言中可能称为包、模块或库 - 请参阅此处以获得更详细的解释)。

两个主要区别是:

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

  • 与 gems 或 node 不同,ASDF 不提供下载和安装包的机制。这就是quicklisp进来的地方——它处理获取 ASDF 系统。但这ql不是唯一的方法:历史上还有其他安装 ASDF 库的方法,包括ASDF-Installand clbuild,未来可能会出现其他方法

于 2013-11-03T06:57:39.257 回答
1

Qlot

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

我想说的是,现在您可以使用与所指出的非常相似的通用 lisp 库,该库在quicklisp 和Qlot中可用。它用于指定项目本地依赖项。它与 ruby​​ 中的 bundle 和 gemfile 非常相似。

Quicklisp 捆绑包

在2015-04-28中还介绍了您可以使用quicklisp 包Quicklisp 库包是自包含的系统集,可以从 Quicklisp 导出并且可以在不涉及 Quicklisp 的情况下加载。

于 2016-11-24T07:10:10.500 回答
0

没有与上面提到的那些一一对应的。然而,ASDF + Quicklisp 的组合非常接近。

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

现在我不确定是否有版本控制之类的东西..

于 2013-11-01T04:20:43.057 回答