Lisp通用样式:同一仓库中有多个软件包

时间:2018-08-01 17:13:38

标签: common-lisp packaging quicklisp

我可以为多个相关的Common Lisp软件包获得具有良好样式的推荐或指向具有代表性的代码存储库的链接吗?

例如,考虑一个带有随附的低级API的高级工作流库,每个库都在其自己的CL包中,但由于同步发布而具有相同的git repo。

每个系统(*.asd文件)都隔离测试,可以使用以下命令来调用:

(asdf:test-system foo :force t)

可以通过make构建单独的系统,这无疑有助于隔离SBCL代码覆盖率报告。

该库的某些用户可能只想加载较低级别的API。为了简化使用高级API的人员的依赖关系,最好将所有内容捆绑在一个存储库中。对一个库的任何修订都可能需要更新同一发行版的所有库。

我目前只有一个目录树,每个CL包都有一个子目录。库维护将使用的顶级Makefile加上每个子目录中的一个。顶层还包含指向相关子目录的.asd文件的符号链接。 (这是一个通过uiop-posix高度依赖POSIX调用的库,因此它仅适用于具有符号链接的OS。)

考虑到Quicklisp-docs [0]的第1个问题,这似乎是一个大问题。

在Google的CL风格指南[1],2015年普通Lisp生态系统状况[2],Edi的CL食谱[3]或Lisp-lang [4]中都没有找到相关的内容。浏览存储库似乎有多种样式。

要修复的仓库:https://gitlab.com/dpezely/cl-mmap
(提交2018年7月14日的a23bd88d;该版本在修复后将被标记)

2 个答案:

答案 0 :(得分:2)

您可以考虑使用asdf-inferred-package。这样,您可以拥有一个依赖于mmap/high软件包的mmap/low软件包。使用该设置,您实际上可以要求Quicklisp直接加载它们中的任何一个:

(ql:quickload "mmap/high")

(ql:quickload "mmap/low")

您可以在我的cl-bulk存储库中看到一个示例。

答案 1 :(得分:2)

试图接触可能在这里未曾看到此问题的特定受众,这是posted到Common Lisp Pro邮件列表。

各种回应的摘要-除了对各种可能的未来方向的深刻见解之外-没有用于解决多种因素组合的事实惯例,机制或风格:

  1. 相互关联的库/程序包/系统之间的依赖关系同步
  2. 可容纳每个人
  3. 可单独进行测试
  4. 分别容纳每个的代码覆盖率报告

在添加此答案时,最接近一致,具体的现有解决方案似乎与原始帖子中提到的软件包已经实施的解决方案相吻合-或足够接近。 (当然,如前面的答案所示,在设计和命名上存在细微的差别,但我认为这些变化是可比的。)

建议的软件包和系统要点:

  • CLIM(在McCLIM之前)的早期实现方式,用于将API与实现进行分离
  • 尽管常规使用ASDF系统和程序包,但探索ASDF本身内UIOP的结构
  • ASDF和LIL导入和重新导出 目录中的所有符号;参见Faré's full summary

未来的方向和建议的阅读内容包括:

  • 认为该交集是一个软件工程问题,并据此进行构建,因为“总之:这取决于!”
  • 球拍或Gerbil Scheme
  • 的模块
  • 也许对Google's CL style guide的内部更新添加了一些相关内容?

(非常感谢Pascal J. Bourguignon,Ken Tilton,Scott McKay,Faré,Svante诉Erichsen,Don Morrison和Pascal Costanza参与了电子邮件讨论。)