首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在我的来源中,应该去哪里?哪里都没有?

在我的来源中,应该去哪里?哪里都没有?
EN

Stack Overflow用户
提问于 2012-03-23 00:06:37
回答 4查看 4.2K关注 0票数 9

假设我在net.aservebordeaux-threads之上构建了一个应用程序。我的包声明可能如下所示:

代码语言:javascript
复制
(defpackage :my-package
  (:use :cl :net.aserve :bordeaux-threads)
  (:export …))

我使用Quicklisp,所以在编译我的包之前,我会用SLIME运行(ql:quickload "aserve") (ql:quickload "bordeaux-threads"),一切都很好。

当然,明天我又重新启动了黏液,在编译之前我必须记住发出QUICKLOAD,否则我就麻烦了。

我可以把一些东西

代码语言:javascript
复制
(eval-when (:compile-toplevel)
  (ql:quickload "aserve")
  (ql:quickload "bordeaux-threads"))

在我的软件包顶部--这是我为开发所做的--但我有一种感觉,将包管理器强加于用户并不是一个好主意。

还有更好的选择吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-03-23 01:26:26

在asd文件中,您应该将“依赖”表示定义为:“”

代码语言:javascript
复制
(asdf:defsystem #:aserve
 :serial t
 :depends-on (#:hunchentoot :hunchentoot-cgi
           #::bordeaux-threads
           #:parenscript)
 ...)

之后,您只需要(ql:quickload :aserve)。

票数 15
EN

Stack Overflow用户

发布于 2012-03-23 06:45:07

使用速成工程 (通过(ql:quickload :quickproject)访问)为应用程序创建系统。正如z_axis所描述的那样,您可以在defsystem声明中填充依赖项列表(如果在调用quickproject:make-project时遗漏了任何依赖项)。

如果在Quicklisp安装的local-projects路径中创建新项目,也可以快速加载项目(即使它还不是Quicklisp发行版的一部分)。当然,Quickloading项目将下载依赖项(如果它们是Quicklisp发行版的一部分),然后加载它们。

票数 11
EN

Stack Overflow用户

发布于 2013-05-29 18:56:10

如果您根本不想在已部署的源代码中包含一个quicklisp调用,请将quickproject定义文件与其他源代码分开。

在源代码的顶部,就在defpackage调用之前,为您的包依赖项添加必要的(require ...)。这可以保证在继续之前加载这些lisp包,但没有指定如何加载这些包。可以通过运行ql:quickload :my-package调用(使用快速项目)来加载它们,该调用首先加载依赖项,然后在加载源时运行需求调用。或者,用户可以直接加载源(而不调用ql:quickload),如果在*module-search-path*上可以找到这些依赖项,则依赖项将在请求调用期间加载。正如您所说,这种技术将允许最终用户使用他/她想要加载您的源代码的任何构建工具。

在对此进行了几分钟的实验之后,它似乎将快速lisp锁存到require函数调用中,因此如果安装了quicklisp,并且调用了(require :bordeaux-threads),lisp将使用quicklisp下载并安装该依赖项。这是一个非常好的特性(IMO),因为它允许Common标准require函数充当接口层,并抽象用于满足依赖关系的特定构建工具。Quicklisp可以锁定需求,也可以锁定它(IIRC)等等。

因此,要回答您的问题,在部署的源代码中不应该使用quicklisp调用,应该使用requires来确保在计算包定义文件之前加载依赖项。如果有人在加载包定义文件之前安装了quicklisp,那么通过使用quicklisp下载和安装依赖项就可以满足这些需求。如果有人安装了asdf,这些依赖项将满足于该构建工具。如果某个人已经安装了依赖项(使用其他技术),那么需求将被简单地传递。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9832378

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档