Common Lisp 的宝藏地图:探索开源宝库 ️

你是否厌倦了重复造轮子?你是否渴望一站式解决 Common Lisp 开发中的各种问题?你是否梦想着用 Lisp 构建出令人惊叹的应用程序?

别担心,你不是一个人!为了帮助你踏上 Lisp 的奇妙旅程,我们精心绘制了一份 Common Lisp 的宝藏地图,它将指引你找到各种珍贵的开源宝藏,从人工智能到游戏开发,从网络编程到图形界面,应有尽有!

准备好开始你的探险了吗?Let's think dot by dot!

🧠 人工智能 (AI, LLMs) 🤖

人工智能领域近年来发展迅猛,而 Common Lisp 也在这场浪潮中扮演着重要的角色。

🌌 OpenAI API 的星辰大海 🌠

OpenAI API 为开发者提供了强大的语言模型能力,而 Common Lisp 也提供了多个优秀的库来访问它:

  • openai-openapi-client: 这是一个根据官方 OpenAPI 规范自动生成的客户端库,它会定期更新以保持与 OpenAI API 的同步。它采用 AGPL-3 许可证,并可在 Ultralisp 上获取。
  • cl-completions: 这个库让你轻松地在 Common Lisp 中创建 GPT 函数,并支持 Ollama。
  • cl-embeddings: 这个库用于获取 LLM 嵌入。
  • cl-chroma: 这个库提供了向量数据库接口。

此外,还有两个演示项目可以帮助你快速上手:

  • cl-rag-example: 这是一个基于检索增强生成 (RAG) 的示例项目。
  • cl-chat: 这是一个 LLM 聊天库,并提供了一个 Web 用户界面。

📚 从经典著作中汲取智慧 📖

如果你想深入学习人工智能的理论和算法,以下两本经典著作的 Common Lisp 实现可以为你提供宝贵的参考:

  • PAIP-lisp: 这是 Peter Norvig 的著作《人工智能编程范式》(Paradigms of Artificial Intelligence Programming) 中代码的 Lisp 实现。
  • AIMA-lisp: 这是 Stuart Russell 和 Peter Norvig 的著作《人工智能:一种现代方法》(Artificial Intelligence: A Modern Approach) 中算法的 Common Lisp 实现。

🎶 音频处理:用 Lisp 谱写美妙旋律 🎼

Common Lisp 在音乐创作和音频处理领域也有着丰富的宝藏,让我们一起探索吧!

🎹 音乐创作:让代码变成音符 🎵

  • OpenMusic: 这是一个由法国 IRCAM 开发的视觉化编程/计算机辅助作曲环境,采用 GPL3 许可证。

  • OM7: 这是 OpenMusic 的新实现,在图形界面、计算模式和与外部软件库的连接方面都有改进,也采用 GPL3 许可证。

    • rq: 这是一个用于在 OpenMusic (6.10 及更高版本) 中进行节奏转录的库,有演示视频,采用 GPL3 许可证。
  • Incudine: 这是一个用于 Common Lisp 的音乐/DSP 编程环境,可用于从头设计软件合成器或声音插件。它也是一个作曲工具,允许生成高质量的声音,并在样本级别进行控制,动态定义和重新定义数字信号处理器和音乐结构。

  • CLM: Common Lisp Music 是 Music V 家族中的一个音乐合成和信号处理包。它提供了与 Stk、Csound、SuperCollider、PD、CMix、cmusic 和 Arctic 类似的功能——一组创建和操作声音的函数,主要面向作曲家 (至少在 CLM 的情况下是这样)。

    • common-tones: 这是 CLM5 的一个分支,使用了现代 Lisp (ASDF、cFFI…),采用 BSD_3Clause 许可证。
  • Slippery Chicken: 这是一个算法作曲库,可以输出 Midi、通用音乐符号,并通过 Lilypond 输出 pdf 乐谱,通过 Common Lisp Music 输出声音,采用 GPL3 许可证。

  • Common Music: 这是一个古老版本的 Common Music (2.12.0) 的存储库,可能是最后一个在 Common Lisp 上运行的版本,大约在 2007-09 年,之后 Common Music 的工作转移到了 (基于 scheme 的) cm3。

    • 注意:这是一个旧项目,但仍然可以工作。
    • cm-incudine: 它扩展了 Common Music 2 的实时功能,采用 GPL2 许可证。
  • cl-patterns: 这是一个通过 Lisp 代码创作音乐的系统,深受 SuperCollider 模式系统的启发,目标是实现其中的大部分功能,但以更健壮、更具表现力、更一致、更具反射性和更 Lisp 的方式实现。音频通过 SuperCollider 输出,初步支持 Incudine,MIDI 通过 ALSA 输出。

  • Music: 这是一个用于在 Lisp 中进行音乐表达的框架,重点是音乐理论 (从头构建,与 Common Music 无关)。

🎧 解码器和声音处理:让声音更动听 🎤

  • Harmony: 这是一个实时声音处理和播放系统,采用 zlib 许可证。

    • "它为你提供音频处理工具以及音频服务器来播放音乐、音效等等。"
    • 使用 cl-mixed 作为混音和声音处理库。
  • easy-audio: 这是一个音频解码器和元数据读取器的集合。

🎼 其他音频工具:让音乐创作更便捷 🎻

  • scheduler: 这是一个基于时间的音乐事件调度器,用于 Common Lisp,采用 Apache2.0 许可证。
  • Common Music Notation: Common Music Notation (CMN) 提供了一组函数来分层描述乐谱,属于公共领域。
  • osc: 这是一个 Open Sound Protocol 的实现,采用 LGPL2.1 许可证。

🔌 绑定和客户端:与其他软件和库的桥梁 🎧

  • cl-mpg123cl-opus (OGG/Opus)、cl-vorbis (OGG/Vorbis)、cl-SoLoudcl-out123 (libout123)、cl-flac
  • csound: 这是一个声音和音乐计算系统,包括用于 Common Lisp 的 CFFI 和 FFI 接口。
  • cl-collider: 这是一个用于 CommonLisp 的 SuperCollider 客户端,带有一个教程和实时编码演示,属于公共领域。
  • cl-openal: 这是 OpenAL 音频库的绑定,属于公共领域。

你可以在 awesome-cl-software#audio 上找到更多面向音乐家的音频软件 (Opus Modus、OpenMusic…)。

🔨 构建系统:让项目井然有序 🧰

一个好的构建系统可以帮助你管理项目的依赖关系、编译代码、运行测试等等,让你的开发过程更加高效。

  • ASDF: Another System Definition Facility,这是一个用于 Common Lisp 的构建系统,采用 Expat 许可证。Quicklisp (参见库管理器) 在底层使用了 ASDF。

    • 已知的 ASDF 扩展: 例如 asdf-system-connections​,它允许你指定在加载两个其他系统时自动加载的系统,以连接它们。
  • asdf-linguist: 这是 ASDF 的扩展,采用 Expat 许可证。

  • asdf-viz: 这是一个用于可视化 ASDF 系统的库依赖关系、函数调用图和类继承关系的工具,采用 LLGPL 许可证。

其他相关的库:

  • modularize: 这是一个用于 Common Lisp 的模块化框架,采用 zlib 许可证。

    • 它提供了一个通用的接口来隔离主要的应用程序组件。
    • 例如,通过添加模块定义选项,你可以引入机制来将模块在功能上联系在一起,相互挂钩等等。
    • 它充当 defpackage​ 的包装器,并集成到 ASDF 中。

⚙️ 编译器和代码生成器:让 Lisp 更强大 💪

Common Lisp 的宏系统赋予了它强大的元编程能力,而编译器和代码生成器则可以将 Lisp 代码转换成其他语言,扩展其应用范围。

🅰️ APL: 用一行代码解决复杂的计算问题 🧮

  • April: 这是一个将 APL 编程语言 (其子集) 编译成 Common Lisp 的库。用一行 APL 代码替换数百行数字运算代码,采用 Apache2 许可证。

🇨++ C/C++: 与主流语言的桥梁 🌉

  • cmacro: 这是用于 C 的 Lisp 宏,采用 MIT 许可证。
  • C-mera: 这是一个源到源编译器,它利用 Lisp 的宏系统对类 C 语言进行元编程,采用 GPL3 许可证。
  • lispc: 这是一个强大的 "lispsy" C 宏语言,采用 MIT 许可证。
  • with-c-syntax: 这是一个有趣的包,它将 C 语言语法引入 Common Lisp。(是的,我认为这个包不适合实际编码。) 采用 WTFPL 许可证。
  • ecrepl: 这是一个用于 C 语言的交互式 REPL,采用 BSD_2Clause 许可证。
  • Software-Evolution-Library: SEL 允许对软件进行编程修改和评估 (使用 Clang 支持 C/C++,编译汇编程序和链接 ELF 二进制文件),采用 GPL3 许可证。
  • vacietis: 这是一个 C 到 Common Lisp 的编译器,采用 LGPL3 许可证。

🔐 密码学:保护你的数据安全 🛡️

在信息时代,数据安全至关重要,而密码学则是保护数据安全的利器。

  • Ironclad: 这是一个用于 Common Lisp 的加密函数库。它不被认为是安全的,但对于消息摘要函数仍然有用,采用 Expat 许可证。

  • crypto-shortcuts: 这是一个常用加密快捷方式的集合,采用 zlib 许可证。

  • trivial-ssh: 这是一个 SSH 客户端库,采用 Expat 许可证。

  • cl-ssh-keys: 这是一个用于生成和解析 OpenSSH 密钥的 Common Lisp 系统,采用 BSD_3Clause 许可证。

  • cl-bcrypt: 这是一个用于解析和生成 bcrypt 密码哈希的 Common Lisp 系统,采用 BSD_3Clause 许可证。

    • 参见 cl-pass,它使用 pbkdf2。
  • gpgme (GnuPG Made Easy) 是一个标准库,用于从编程语言访问 GnuPG 函数。它提供了一个官方的 Common Lisp 系统。

    • gpgme lisp 源代码 (不在 Quicklisp 中),采用 GPL2 许可证。
  • cl-frugal-uuid: 这是一个零依赖的 Common Lisp UUID 库,采用 MIT 许可证。

🪙 加密货币:探索区块链的奥秘 ⛓️

加密货币和区块链技术近年来备受关注,而 Common Lisp 也在这方面有所贡献。

  • bitcoin-core-rpc: 这是一个 (希望是) 完整的 Bitcoin Core RPC 客户端,采用 AGPL-3.0+ 许可证。
  • bp: 这是用 Common Lisp 编写的 Bitcoin 协议组件,采用 MIT 许可证。
  • cl-monero-tools: 这是一个用于处理 Monero 加密货币的 Common Lisp 工具箱,采用 GPL3 许可证,不在 Quicklisp 中。
  • peercoin-blockchain-parser: 它可以解析文件中包含的区块链,并将其部分数据导出到文本文件、SQL 脚本或数据库。它还可以使用 Peercoin 守护进程的 RPC 作为数据源而不是区块链文件来创建数据库,采用 LGPL3 许可证,不在 Quicklisp 中。
  • peercoin-calculator: 这个程序可以计算出在 10 分钟、24 小时、31 天、90 天和 1 年内生成 POS 或 POW 区块的概率,以及可以预期的奖励。GUI 使用 Qt,采用 GPL3 许可证,不在 Quicklisp 中。
  • peercoin-vote: 这是一个基于区块链数据 (地址和余额) 的投票系统,采用 GPL3 许可证,不在 Quicklisp 中。
  • stacks-api: 这是一个 Stacks API 客户端,采用 AGPL-3.0 许可证。

你还可以看看 legochain,这是一个简单的教育性区块链;emotiq,这是一个使用创新自然语言方法编写智能合约的下一代区块链,用 Common Lisp 构建 (已停止)。

🗄️ 数据库:管理你的数据 🗃️

数据库是现代应用程序不可或缺的一部分,而 Common Lisp 也提供了丰富的库来访问和管理各种数据库。

  • NEW endatabas: 这是一个无模式 SQL 文档数据库,具有完整的历史记录,采用 AGPL-3.0 许可证。

  • cl-yesql: SQL 语句以 SQL 语法存放在它们自己的文件中,并作为函数导入到 Lisp 中。你不会受限于 DSL 支持的功能。它基于 Clojure 的 Yesql,采用 MIT 许可证。

🧬 ORMs: 让对象和关系数据库和谐相处 🤝

  • clsql: 这是一个具有 Common Lisp 接口的 SQL 数据库,采用 LLGPL 许可证。

  • 👍 mito: 这是一个用于 Common Lisp 的 ORM,支持迁移、关系和 PostgreSQL,采用 BSD_3Clause 许可证。

    • mitho-auth: 一个用于授权的 mixin 类。
    • mito-attachment: 一个用于 RDBMS 之外的文件管理的 mixin 类。
  • cl-dbi: 这是一个用于 Common Lisp 的数据库无关接口,采用 LLGPL 许可证。

    • dbd-oracle: 一个用于 CL-DBI 的 Oracle 数据库驱动程序,采用 LLGPL 许可证。
  • crane: 另一个 ORM,采用 Expat 许可证。

  • datafly: 一个轻量级数据库库,采用 3-clause BSD 许可证。

  • sxql: 一个用于生成 SQL 的 DSL,采用 3-clause BSD 许可证。

💾 持久对象数据库:让对象永存 💎

你还可以看看 Clache,它可以将任何对象保存到磁盘上。

🕸️ 图形数据库:探索关系的网络 🌐

  • AllegroGraph: 这是一个高性能、多模型 (文档和图形)、实体-事件知识图技术。

    • 专有软件,免费版本限制为 500 万个 RDF 三元组。
    • 有一个托管版本:https://allegrograph.cloud/
    • AllegroGraph 8.0 (2023 年 12 月发布) "将大型语言模型 (LLM) 组件直接集成到 SPARQL 中,并提供向量生成和向量存储,以实现全面的 AI 知识图解决方案。"
  • cl-agraph: 一个用于 AllegroGraph 的最小客户端。

  • neo4cl: 一个用于与 Neo4J 交互的库,采用 Apache2 许可证。它向 Neo4J 服务器发送 Cypher 查询,并将响应解码成对 CL 处理有用的内容。

    • 也许还有:cl-neo4j,一个轻薄的 neo4j RESTFUL 客户端接口。
  • vivace-graph: 图形数据库和 Prolog 实现,采用 MIT 许可证。它从 CouchDB、neo4j 和 AllegroGraph 中汲取了设计灵感。它实现了一个符合 ACID 的对象图模型,具有用户定义的索引和 map-reduce 视图。它还实现了一个主/从复制方案,以实现冗余和水平读取扩展。可以通过许多 Lisp 方法或类似 Prolog 的查询语言来查询图形。

    • "我使用 Vivace Graph 作为数百万种产品的在线目录,作为复杂、可适应的基于 VoIP 的 IVR 的后端,以及多个复杂大数据分析系统的数据存储,最后作为两个推荐系统的引擎。" (问题 #23)
    • "为什么 vivace graph 这么快?我一直在将它与基于 SQL 的方法和 Neo4j 进行比较,vivace graph 要快得多。"

还有:

  • restagraph: 一个应用程序,它使用数据库中定义的模式为 Neo4j 数据库动态生成 REST API,采用 GPL3 许可证。

📦 包装器:轻松访问各种数据库 🧰

  • postmodern: 一个用于与 PostgreSQL 交互的库,采用 zlib 许可证。

  • cl-sqlite: SQLite 绑定,属于公共领域

  • cl-memcached: 一个快速、线程安全的 Memcached 对象缓存系统接口,采用 Expat 许可证。

  • cl-redis: Redis 客户端,采用 Expat 许可证。

  • cl-disque: Disque 客户端,采用 3-clause BSD 许可证。

  • cl-rethinkdb: RethinkDB 客户端,采用 Expat 许可证。

  • cl-mango: 一个极简的 CouchDB 2.x 数据库客户端,采用 BSD_3Clause 许可证。

    • 参见 clouchdb,一个用于与 CouchDB 交互的库,采用 FreeBSD 许可证。
  • lmdb: 绑定到 LMDB (Lightning Memory-mapped Database),一个具有多版本并发控制的 ACID 键值数据库。

  • cl-ndbapi: 绑定到 RonDB 的 C++ NDB API,"世界上最快的键值存储",由 Dydra 开发,采用 GPLv2 许可证。

  • cl-duckdb: 一个围绕 DuckDB C API 的 Common Lisp CFFI 包装器,采用 MIT 许可证。

🚚 迁移工具:让数据库升级更轻松 🔄

  • cl-migratum: 一个提供执行数据库模式迁移功能的系统,旨在与各种数据库一起工作,采用 BSD_3Clause 许可证。
  • postmodern-passenger-pigeon: 一个用于 postmodern 的迁移管理器,未指定许可证。

🔌 连接第三方服务:扩展数据库的边界 🔗

  • dyna: 一个 AWS DynamoDB ORM,采用 MIT 许可证。
  • cl-influxdb: 一个用于时间序列数据库 InfluxDB 的接口,采用 MIT 许可证。
  • pzmq: ZeroMQ 4.0+ Common Lisp 绑定,采用 Unlicense 许可证。

🛠️ 数据库工具:让数据库管理更便捷 🔧

  • pgloader: 一个用于 PostgreSQL 的数据加载工具,采用 PostgreSQL 许可证。

🧮 数据结构:构建程序的基石 🧱

数据结构是程序的基石,而 Common Lisp 提供了丰富的数据结构库,可以帮助你高效地组织和处理数据。

🧵 字符串处理:让文本操作更灵活 🔡

  • 👍 str: 一个现代、简单、一致的字符串操作库,采用 MIT 许可证。

📚 集合操作:让数据管理更便捷 🗃️

🌳 树和堆:高效组织数据 🌲

  • bst: 二叉搜索树,采用 GPL3 许可证。
  • pileup: 一个可移植、高性能、线程安全的 Common Lisp 二叉堆,采用 MIT 许可证。
  • sycamore: 一个快速、纯函数式数据结构库,采用 BSD_3Clause 许可证。

🔑 哈希表:快速查找数据 🗝️

  • genhash: 一个哈希表实现,API 来自泛型方法,属于公共领域。
  • cl-ctrie: 一个无锁、并发、键/值索引,具有高效的内存映射持久化和快速瞬态存储模型,采用 MIT 许可证。

🧰 其他数据结构和算法:满足各种需求 🧰

  • cl-data-structures: 一个可移植的数据结构和算法集合 (主要是字典和序列,还有一些统计函数),采用 BSD 许可证。
  • listopia: 一个受 Haskell 的 Data.List 启发的列表操作库,采用 LLGPL 许可证。
  • hash-set: 一个方便的库,在 CL 哈希表之上实现哈希集,采用 The Unlicense 许可证。
  • bit-smasher: 一个用于处理位向量、位向量算术和类型转换的 Common Lisp 库,采用 MIT 许可证。
  • cl-containers: 一个广泛的数据结构和实用程序库——队列、树、堆、双向链表、集合、包…… 采用 MIT 许可证。
  • cl-competitive: 用于竞技编程的 Common Lisp 算法集合,属于公共领域,采用 CCO 或 MIT 许可证。
  • nonempty: 用于 Common Lisp 的非空集合,采用 LGPL3 许可证。
  • cl-hash-util: 哈希表创建、访问和操作实用程序,采用 MIT 许可证。
  • cl-permutation: Common Lisp 中的排列和排列组,采用 BSD_3Clause 许可证。

🧭 访问数据结构:让数据操作更便捷 🧭

  • 👍 access: 一致且嵌套地访问最常见的数据结构,采用 BSD_3Clause 许可证。
  • modf: 一个类似 setf 的宏,用于函数式编程。

💡 其他数据结构:扩展你的工具箱 💡

  • bitfield: 将多个有限集或小整数有效地表示为单个非负整数,采用 MIT 许可证。

🐳 Docker 镜像:快速搭建开发环境 📦

Docker 镜像可以帮助你快速搭建 Common Lisp 开发环境,省去繁琐的配置过程。

  • cl-docker-images: Windows (amd64) 和 Alpine 和 Debian (amd64、arm64、arm/v7) 上的 ABCL、CCL、ECL 和 SBCL 的 Docker 镜像,采用 BSD_2Clause 许可证。
  • base-lisp-image: 用于 Common Lisp 项目的 Docker 基础镜像,包含 SBCL 或 CCL 以及最新的 ASDF、Qlot 和 Roswell。
  • archlinux-cl: 带有 Common Lisp 实现 (目前有 7 个) 的 Docker Arch Linux 镜像,采用 MIT 许可证。

🌐 外部函数接口和语言互操作:与其他语言协作 🤝

Common Lisp 可以与其他语言进行互操作,扩展其功能和应用范围。

🇨 C: 与底层语言的桥梁 🌉

  • CFFI: 一个可移植、易于使用的 C 外部函数接口,采用 Expat 许可证。

    • cffi-ops: 帮助编写简洁的 CFFI 相关代码。
    • cffi-objects: 实现与外部对象的快速便捷互操作。
  • 👍 cl-autowrap: 自动将头文件解析为 CFFI 定义,采用 FreeBSD 许可证。

  • cl-bindgen: 一个命令行工具和库,用于从 C 头文件创建 Common Lisp 语言绑定,采用 MIT 许可证。

  • cl-gobject-introspection: Gobject Introspection FFI,采用 BSD 许可证。自动绑定以调用 C 库。使用 gir2cl 生成 lisp 接口,采用 LGPL3 许可证。

  • cl-cxx-jit: Common Lisp 和 C++ 互操作,使用 JIT,采用 MIT 许可证。

🍀 Clojure: 与 JVM 语言的融合 ☕

  • ABCLJ: 一个简单的 Clojure 到 Common Lisp 互操作库,采用 EPL-2.0 许可证。

正在开发中:

  • Cloture: Common Lisp 中的 Clojure。

Cloture 处于非常早期的 (pre-alpha) 阶段,但它已经发展到可以加载 clojure.test,允许测试套件实际用 Clojure 编写。

其他相关的库:

  • cl-oju: 一些我在编写 Common Lisp 时怀念的习惯用法,主要与序列有关,采用 MIT 许可证。
  • clj-con: Common Lisp 中的 Clojure 风格并发操作,采用 MIT 许可证。
  • clj-re: Clojure 风格的正则表达式函数。
  • clj-arrows: 用于 Common Lisp 的 Clojure 兼容线程/转换/箭头宏。
  • with-redefs: 允许重新绑定全局函数,灵感来自 Clojure 的 with-redefs。

📧 Erlang: 与并发编程语言的对话 💬

  • CLERIC: 一个 Common Lisp Erlang 接口,采用 MIT 许可证。它实现了 Erlang 分布式协议,可与 erl_interface 和 jinterface 相媲美。

☕ Java: 与 JVM 的桥梁 🌉

  • cl+j: 一个基于 JNI 的 JVM 接口,通过 CFFI 实现,不在 Quicklisp 上可用。它不能可靠地与所有实现一起工作,采用 Expat 许可证。

🍎 Objective-C: 与苹果生态系统的连接 🍏

  • objc-lisp-bridge: 一个可移植的读取器和桥梁,用于与 Objective-C 和 Cocoa 交互,采用 MIT 许可证。

🐍 Python: 与数据科学语言的协作 📊

  • burgled-batteries: Python 和 Common Lisp 之间的桥梁,不在 Quicklisp 上可用。目标是让 Lisp 程序可以使用 Python 库,采用 MIT 许可证。

  • cl4py: cl4py (发音为 clappy) 库允许 Python 程序调用 Common Lisp 库,采用 MIT 许可证。

  • py4cl: 一个允许 Common Lisp 代码访问 Python 库的库,采用 MIT 许可证。它基本上是 cl4py 的反向版本。

    • 它的分支 py4cl2,起初不太稳定,现在发展得更多,速度也更快。

    • py4cl2-cffi: 基于 CFFI 的 py4cl2 替代方案。

      • "在可能的情况下,CFFI 方法可以比 py4cl2 快 50 倍。"

你还可以看看 async-process

  • cl-python: 一个用 Common Lisp 实现的 Python,采用 LLGPL 许可证,没有积极开发。

🔷 .Net Core: 与微软平台的连接 🏢

  • Bike: 一个跨平台的 .Net Core 接口,采用 MIT 许可证。

🧰 其他语言互操作库:扩展你的选择 🧰

  • Foil: 一个外部对象接口,不在 Quicklisp 上可用。它可以与 JVM 和 CLI 一起工作,采用 CPL 1.0 许可证。

🐘 Emacs Lisp: 与编辑器语言的融合 💻

  • CEDAR: 一个先进的交互式开发环境,目标是与 Emacs 兼容,并提供 Emacs 的所有功能。(正在开发中)

  • CLOCC 的 elisp.lisp: Common Lisp 中的 Emacs Lisp。

    • 将 Emacs Lisp 语言实现为 Common Lisp 包。[1999]
    • 它没有尝试重新实现 Emacs 中提供的用于操作缓冲区和其他相关对象的函数库,因此它专注于 "纯" Emacs Lisp 语言;但它能够运行 Emacs Calendar 的非 UI 部分。(S. Monnier, M. Sperber)

🎮 游戏开发:用 Lisp 创造游戏世界 🕹️

Common Lisp 也可用于游戏开发,让我们来看看有哪些宝藏吧!

👾 游戏引擎:构建游戏的基础 🏗️

  • Trial: 这是一个 OpenGL 游戏引擎,非常注重模块化,采用 zlib 许可证。它旨在提供一个大型工具包,其中包含许多有用的部件,你可以用它们来创建游戏。

    • Kandria 游戏就是用 Trial 构建的。
  • trivial-gamekit: 使用这个小型框架,你可以制作简单的 2D 游戏:绘制基本的几何图形、图像和文本,播放声音,并监听鼠标和键盘输入,采用 MIT 许可证。

  • virality: 一个用 Common Lisp 编写的基于组件的游戏引擎,采用 MIT 许可证。

  • Xelf: 可扩展游戏库,不在 Quicklisp 上可用,采用 GNU LGPL2.1 许可证。

🧰 游戏开发工具:让游戏开发更便捷 🧰

  • cl-gamepad: 访问 Windows、Mac OS 和 Linux 上的游戏手柄和操纵杆,采用 zlib 许可证。
  • cl-mpg123cl-out123,分别是 libmpg123 和 libout123 的绑定库,为你提供快速且易于使用的 mp3 解码和跨平台音频输出,采用 zlib 许可证。

🎨 图形:用 Lisp 绘制精彩画面 🖼️

Common Lisp 提供了多个库来处理图形,让我们来看看吧!

  • Sketch: 一个用于创建电子艺术、图形等的 CL 框架,采用 MIT 许可证。

  • cl-svg: 一个用于生成 SVG 文件的基本库,采用 Expat 许可证。

  • dufy: 在各种颜色模型中进行精确的颜色操作和转换,采用 MIT 许可证。

  • opticl: 一个用于表示和处理图像的库,采用 BSD_2Clause 许可证。

  • Varjo: Lisp 到 GLSL 翻译器,采用 BSD_2Clause 许可证。

  • Vecto: 简单的矢量绘图库,采用 FreeBSD 许可证。

  • zpng: 一个用于创建 PNG 文件的库,采用 FreeBSD 许可证。

  • pngload-fast: 一个可移植 Common Lisp 中的 PNG (Portable Network Graphics) 图像格式解码器,重点是速度,采用 MIT 许可证。

  • imago: 一个用于 Common Lisp 的图像操作库。

    • 支持 png、pcx、可移植位图 (.pnm)、Truevision TGA (.tga) 和 jpeg 格式的图像。
    • 允许:调整大小、旋转、浮雕效果、反转颜色、调整对比度、操作颜色元素、合成图片、绘制简单图元……
    • 与 common-lisp-jupyter 集成。

🔌 图形库绑定:连接强大的图形引擎 🔌

  • cl-raylib (2023 年新增):使用 claw 和 cffi-object 完全自动生成的 Common Lisp 到 Raylib 和 Raygui 的绑定,采用 Apache 2.0 许可证。
  • glfw (2023 年新增):一个最新的 Common Lisp 到 GLFW OpenGL 上下文管理库的绑定库。
  • common-cv: OpenCV (Open Source Computer Vision Library) 的 CommonLisp 绑定库,未指定许可证。
  • cl-cairo2: Cairo 绑定,采用 Boost 1.0 许可证。
  • cl-gd: 一个提供 GD 图形库接口的库,采用 FreeBSD 许可证。
  • cl-horde3d: Horde3D 图形库的 FFI 绑定,不在 Quicklisp 上可用,采用 EPL 1.0 许可证。
  • cl-jpeg: 基线 JPEG 编码器和解码器库,采用 3-clause BSD 许可证。
  • cl-liballegro: Allegro 5 游戏编程库的接口和绑定,采用 zlib 许可证。
  • cl-opengl: OpenGL、GLU 和 GLUT API 的 CFFI 绑定,采用 3-clause BSD 许可证。
  • cl-sdl2: 使用 C2FFI 的 SDL2 绑定,采用 Expat 许可证。
  • CLinch: 用于 OpenGL 的 Common Lisp 2D/3D 图形引擎,采用 FreeBSD 许可证。
  • donuts: Common Lisp 的 Graphviz 接口,采用 Expat 许可证。
  • lispbuilder-sdl: 一组 SDL 绑定,采用 Expat 许可证。
  • lisp-magick-wand: ImageMagick 绑定,采用 BSD 许可证,不在 Quicklisp 中。
  • okra: Ogre 的 CFFI 绑定,不在 Quicklisp 上可用,采用 3-clause BSD 许可证。
  • cl-cuda: 一个在 Common Lisp 程序中使用 NVIDIA CUDA 的库,采用 LLGPL 许可证。

🖥️ GUI:构建用户友好的界面 🖱️

图形用户界面 (GUI) 可以让你的应用程序更易于使用,而 Common Lisp 提供了多个 GUI 工具包,可以帮助你构建各种界面。

🧰 GUI 工具包:构建界面的基础 🧰

有关 GUI 工具包的概述和教程,请参阅 Cookbook/GUI。

  • LispWork's CAPI: 一个可移植的 GUI 工具包,带有移动运行时。专有软件,但有免费版本。

  • Allegro's Common Graphics: 一个用于编写 Windows、Mac 和 Linux 窗口化 GUI 的函数库。专有软件,但有免费版本。

    • 自 Allegro 10.1 (2022 年 3 月) 起,IDE 和 Common Graphics 工具包可以在浏览器中运行。
  • 👍 Qtools: 一个基于 CommonQt 的 Qt 工具包,采用 zlib 许可证。还有 Qtools-ui (预制 UI 组件),并带有视频。

  • CommonQt: 一个通过 QtSmoke 实现的 Qt4 Common Lisp 绑定,采用 FreeBSD 许可证。

    • CommonQt5: Qt5 绑定。

      • 警告:目前难以安装。SISCOG 在生产环境中使用。
  • ltk: 一个 Tk 工具包的绑定,采用 LLGPL 或 GNU LGPL2.1 许可证。

    • LTk Examples: 为 tkdocs 教程提供 LTk 示例。
    • LTk Plotchart: 一个围绕 tklib/plotchart 库的包装器,用于与 LTk 一起工作。这包括 20 多种不同的图表类型 (xy 图、甘特图、3d 条形图等)。
  • nodgui: 一个基于 Ltk 的 Tk 工具包绑定,具有语法糖和额外的部件,采用 LLGPL 许可证。

  • 🎨 支持 tk 自定义主题,例如 ttkthemes 和 Forest-ttk-theme。

  • 当需要快速渲染时,支持 SDL 框架作为 Tk 画布的替代方案。用于 2D (基于像素) 和 3D 渲染

(使用 openGL)。

  • IUP: IUP 可移植用户界面库的 CFFI 绑定 (pre-ALPHA)。

    • IUP 是跨平台的 (Windows、macOS、GNU/Linux,以及新的 Android、iOS、Cocoa 和 Web Assembly 驱动程序),拥有许多部件,API 小巧,并且正在积极开发中。
    • 有一个 Web 视图。
  • 🆕 cl-gtk4: Common Lisp 的 GTK4/Libadwaita/WebKit 绑定,采用 LGPL3 许可证。

  • cl-cffi-gtk: GTK+3 绑定,采用 GNU LGPL2.1 许可证。

  • cl-gtk2: GTK+2 绑定,采用 LLGPL 许可证。

🔌 其他 GUI 工具和库:扩展你的选择 🔌

  • 对于 Electron,请参阅:

    • Electron-lisp-boilerplate: 一个用于构建启动 Lisp 进程的 Electron 应用程序的基本样板。
    • ceramic: 一个围绕更简单的工具的包装器,用于为 Common Lisp 创建和构建 Electron 应用程序。它目前已损坏且未维护,但有些工具值得一看。
    • 注意:在 Electron 中嵌入 lisp Web 应用程序的主要思想是从 Electron 的 main.js​ 文件中启动 lisp Web 服务器作为异步进程,并将 Electron 窗口指向本地主机 URL。就是这样。
  • CocoaInterface: Clozure Common Lisp 的 Cocoa 接口。使用 Lisp 代码动态构建 Cocoa 用户界面窗口,并绕过典型的 Xcode 进程。它有很好的文档和教程。

  • McCLIM: Common Lisp 接口管理器版本 II 的实现,采用 GNU LGPL2.1 许可证。

  • cl-webkit: WebKitGTK+ 绑定,采用 MIT 许可证。它还利用 WebKit 浏览引擎的全部功能,为应用程序添加 Web 浏览功能。

  • ftw: 一个 Win32 GUI 库,采用 MIT 许可证。

  • eql、eql5、eql5-android: 嵌入式 Qt4 和 Qt5 Lisp,嵌入在 ECL 中,可嵌入在 Qt 中,采用 MIT 许可证。将 EQL5 移植到 Android 平台。

  • bodge-nuklear: Nuklear 立即模式 GUI 库的包装器,采用 MIT 许可证。

  • vk: Vulkan API 的 Common Lisp/CFFI 绑定,采用 MIT 许可证。

🧰 其他 GUI 实用程序:让界面开发更便捷 🧰

  • file-select: 一个用于调用本机系统文件对话框来选择或创建文件的库,采用 zlib 许可证。

你还可以看看这个从 ABCL 使用 Java Swing 的演示。

📱 移动 GUI:将 Lisp 带到移动设备 📱

  • LispWork's mobile runtime: Android 和 iOS,专有软件。
  • LQML: 一个轻量级的 ECL 到 QML (Qt5 和 Qt6) 绑定,源自 EQL5,采用 LGPL 和公共领域许可证。

hello-allien,为 Android 应用程序构建的 SBCL (非常新,2023 年)。

💻 Lisp 实现:选择你的 Lisp 引擎 🚀

Common Lisp 有多个实现,每个实现都有其特点和优势,你可以根据自己的需求选择合适的实现。

⭐ 主流实现:稳定可靠的选择 ⭐

  • SBCL: Steel Bank Common Lisp,CMUCL 的一个分支;编译成高效的机器码,符合标准,属于公共领域,部分代码采用 Expat 和 3-clause BSD 许可证。

    • 参见:sbcl-librarian,SBCL 的动态库交付工具。创建可以从 C 或 Python 调用的共享库,采用 MIT 许可证。博客文章:使用其他语言调用 Lisp 库。教程:动态库
    • SBCL-GOODIES: 使用 Common Lisp 和外部库分发二进制文件:静态烘焙 libssl、libcrypto 和 libfixposix,采用 MIT 许可证。
    • SBCL 的夜间 Windows 构建: 使用 MSYS2 UCRT64 的 SBCL 夜间构建。参见 Roswell 的 SBCL MSI 构建。
    • Windows 上的 Chocolatey SBCL (非官方)
  • CCL: Clozure Common Lisp;仅编译器实现,生成本机代码,采用 LLGPL 许可证。

  • ECL: Embeddable Common Lisp;编译成 C,采用 GNU LGPL2.1 许可证。

    • eclweb 是一个使用 Web Assembly (WASM) 在浏览器中运行 REPL 的概念验证。
  • ABCL: Armed Bear Common Lisp;目标是 JVM,编译成字节码,符合标准,采用 GNU GPL3 许可证,带有 Classpath 异常。

    • abcl-memory-compiler: 一种使用 ABCL 在运行时将 Java 源代码编译成 Java 类的方法,采用 Apache2 许可证。
  • CLASP: 一个新的 Common Lisp 实现,它使用 LLVM 编译成本机代码,并与 C++ 库和程序无缝互操作,采用 LGPL2.1 (和其他) 许可证。这使得 Clasp 可以利用大量预先存在的库和程序,例如科学计算生态系统中的库和程序。

🔒 专有实现:商业化的 Lisp 引擎 🔒

  • LispWorks: 一个用于 Common Lisp 的集成跨平台开发工具。

    • 著名的功能包括:CAPI 跨平台和本机 GUI 工具包、LispWorks IDE、移动平台运行时 (iOS、Android)、Java 接口、tree shaker 用于构建更轻的二进制文件、KnowledgeWorks 系统用于 "基于规则的、面向对象的、逻辑的、函数式的和数据库编程" 等等。
    • 有一个免费版本,有限制 (堆大小限制、时间限制)。
  • Allegro CL: 提供完整的 ANSI Common Lisp 标准,并有许多扩展。

    • 著名的功能包括:AllegroCache 对象持久化数据库系统、KnowledgeGraph 系统、并发垃圾收集器、基于 Web 的 IDE 等等。
    • 有一个免费版本,包括 AllegroCache,有限制。

🕰️ 其他实现:主要用于历史目的 🕰️

  • CMUCL: 卡内基梅隆大学的实现,属于公共领域。SBCL 是 CMUCL 的一个分支。

  • GNU CLISP: 一个 GNU 实现;包含一个编译器和一个解释器,符合标准,采用 GNU GPL3 许可证。他们在 Gitlab 上开发。

    • 编译成字节码,其默认 REPL 比 SBCL 的更用户友好 (具有符号补全和 readline 集成)。
    • 然而,它没有积极开发,它不完全符合 ANSI 标准,它的性能不如 SBCL,并且缺乏兼容性功能。
  • Corman Lisp: 一个用于在 Intel 平台上运行的 Microsoft Windows 的 Common Lisp 开发环境,采用 MIT 许可证。

你可以在这里查看实现与常见扩展的兼容性:portability.cl。

🧰 其他相关工具:探索 Lisp 实现的奥秘 🧰

  • cl-all: 一个用于在多个实现中运行 Lisp 代码片段的脚本,采用 zlib 许可证。这允许你快速比较实现的行为和差异。

🌐 JSON: 处理 Web 数据 🌐

JSON 是一种轻量级的数据交换格式,在 Web 开发中广泛使用。

🧰 JSON 库:解析和生成 JSON 数据 🧰

  • 👍 jzon: 一个正确、安全、快速的 JSON 解析器,采用 MIT 许可证。

    • jzon 是唯一一个根据官方 JSON 测试套件正确拒绝所有无效输入并接受所有有效输入的 CL JSON 库。
    • 它不会在无效输入时崩溃 (jsown),也不会在大数据集上阻塞 (Jonathan),等等。
    • v1.0 于 2023 年 2 月发布在 Quicklisp 中。
    • "我相信 jzon 是更好的选择,并希望它成为 CL JSON 世界中新的、真正的默认库。"
  • jonathan: 一个 JSON 编码器和解码器,采用 MIT 许可证。

  • cl-json: 一个高度可定制的 JSON 编码器和解码器,采用 MIT 许可证。

  • jsown: 一个 JSON 格式的读取器和写入器,采用 Expat 许可证。

  • shasht: 一个用于 Kzinti 的 Common Lisp JSON 读取和写入库,采用 MIT 许可证。

    • "Shasht 是我特别喜欢的两个新库之一,它已经在 quicklisp 中了。它速度快,正确处理 null,可以编码 CLOS 对象、结构和哈希表。它还可以进行增量编码。" Sabra Crolleton。

参见这个对 JSON 库的广泛比较。

🧰 JSON 工具:处理 JSON 数据的利器 🧰

  • NJSON: 与解析器无关的 JSON 索引 (支持 JSON Pointer)、解构和验证框架,采用 BSD 许可证。
  • json-mop: 一个用于桥接 CLOS 和 JSON 对象的元类,采用 MIT 许可证。
  • cl-json-pointer: 一个 JSON Pointer 实现,采用 MIT 许可证。
  • cl-jwk: 一个用于解码公共 JSON Web 密钥 (JWK) 的 Common Lisp 系统,采用 BSD 许可证。

你还可以搜索下面的 JSON RPC。

🌐 YAML: 另一种数据序列化格式 🌐

YAML 是一种人类可读的数据序列化格式,也常用于配置文件。

  • cl-yacclyaml: 一个纯 lisp YAML 处理器 (加载器,但还没有转储器),采用 GPL3 许可证。
  • cl-yaml: 一个基于 libyaml 构建的 YAML 解析器和发射器,采用 MIT 许可证。

🔌 语言扩展:让 Lisp 更强大 💪

Common Lisp 语言本身已经非常强大,但你还可以使用各种语言扩展来进一步增强其功能和表达能力。

🧰 通用工具库:增强 Lisp 的实用性 🧰

  • alexandria: 一个通用的实用程序库,属于公共领域。
  • 👍 serapeum: 另一个通用的实用程序库,采用 Expat 许可证。
  • rutils: Common Lisp 的激进但合理的语法实用程序,采用 MIT 许可证。
  • generic-cl: 标准 Common Lisp 函数的泛型函数接口 (相等性、比较、算术、对象、迭代器、序列……),采用 MIT 许可证。参见更轻量级的 generic-comparability,采用 LLGPL 许可证。
  • anaphora: 一个回指宏的集合,属于公共领域。
  • arrow-macros: 类似 Clojure 的线程宏,采用 MIT 许可证。
  • hu.dwim.walker: 一个代码遍历器和反遍历器 (又称 AST 解析器和反解析器),采用 BSD 许可证。参见这篇博客文章:http://40ants.com/lisp-project-of-the-day/2020/04/0044-hu.dwim.walker.html。

🧩 模式匹配:让代码更简洁 🧩

  • trivia: 优化的模式匹配库,采用 LLGPL 许可证。

✈️ 可移植性层:让代码跨平台运行 ✈️

这里收集了大量的可移植性层:portability.cl/。以下是一些例子:

  • trivial-arguments: 一个用于检索函数参数列表的可移植库,采用 zlib 许可证。

  • definitions: 一个通用的定义自省库,采用 zlib 许可证。它使你能够检索与符号、包和一般名称等指示符相关的定义或绑定。

  • dissect: 当许多项目使用 "trivial-backtrace" 系统,它只提供一个带有回溯的字符串时,Dissect 允许你在各种 Lisp 实现上捕获、步进和完全检查堆栈跟踪,采用 zlib 许可证。它对于日志记录和其他自动继续执行但当前堆栈信息仍然有用以存储在某处的情况也非常有用。

    • ndebug: 一个用于可移植 GUI (或任何非标准) 调试器的框架,基于 dissect 和 trivial-custom-debugger,采用 BSD 许可证。

✍️ 改变语法:让 Lisp 更易读 ✍️

  • cl21: 一个将 Common Lisp 带入 21 世纪的实验性项目,采用 Expat 许可证。

  • clamp: 将 Arc 语言的简洁性带到 Common Lisp,采用 Artistic License 2.0 许可证。

    • 还有 arc-compat,一个 Arc 兼容包,采用 Perl Foundation 的 Artistic Licence 2.0 许可证。
  • cl-syntax: 读取器语法约定,采用 LLGPL 许可证。

  • cl-2dsyntax: 一个对缩进敏感的读取器系统,不在 Quicklisp 上可用,属于公共领域。

  • cl-annot: Common Lisp 的 Python 风格注释,采用 LLGPL 许可证。

    • cl-annot-revisit: cl-annot 的重新实现,采用 WTFPL 许可证。
  • cl-reader: 一个实用程序库,旨在为 lambda、映射、访问器、哈希表和哈希集提供读取器宏,采用 MIT 许可证。

🧵 字符串语法:让字符串更易用 🧵

  • cl-interpol: 一组读取器修改,允许字符串插值,采用 BSD 许可证。
  • mstrings: 一个读取器宏,提供视觉上吸引人的多行块,采用 BSD_3Clause 许可证。M-string 修剪前导空格,将行连接在一起,等等。
  • pythonic-string-reader: 一个简单且不引人注目的读取表修改,灵感来自 Python 的三个引号字符串,采用 BSD_3Clause 许可证。
  • cl-heredoc: 一个 "heredocs" 调度器,采用 GPL3 许可证。允许编写:#>eof>Write whatever (you) "want", no matter what characters, until the magic end sequence has been reached.eof

🧬 CLOS 扩展:增强面向对象编程 🧬

  • closer-mop: 一个兼容性层,它修正了许多缺失或不正确的 MOP 功能,采用 Expat 许可证。

  • specialization-store: 基于类型的泛型函数,采用简化的 BSD 许可证变体。

  • filtered-functions: 允许使用任意谓词来选择和应用方法,采用 MIT 许可证。

  • inlined-generic-function: 将静态调度的速度带到 CLOS,采用 LLGPL 许可证。

  • static-dispatch: 允许在编译时 (静态) 而不是运行时 (动态) 执行标准泛型函数调度,采用 MIT 许可证。这类似于 C++ 和 Java 等语言中的 "重载"。

  • dynamic-mixins: 简单、动态的类组合,采用 BSD_2Clause 许可证。

  • fast-generic-functions: 密封你的泛型函数,以进一步提高性能,采用 MIT 许可证。

  • polymorphic functions: 一个函数类型,用于根据类型而不是类进行调度,部分支持根据可选参数和关键字参数类型进行调度,采用 MIT 许可证。仍在实验中 (2021 年 5 月)。

    • polymorphic-functions 根据提供给它的参数的类型进行调度。这有助于根据专用数组以及用户定义的类型进行调度。
    • 有关与 specialization-store 和 fast-generic-functions 的区别,请参阅其 README。

✍️ 更简洁的 defclass 形式:简化类定义 ✍️

  • defclass-std: 一个快捷宏,用于快速编写 DEFCLASS 形式,采用 LLGPL 许可证。
  • nclasses: 类和泛型函数声明的语法糖,采用 BSD 许可证。它是 hu.dwim.defclass-star 的分支。功能包括类型推断、自动访问器、内联 initform 语法、自动导出和其他便利功能。

🧰 其他 CLOS 扩展:扩展面向对象编程 🧰

  • slot-extra-options: 允许你构建一个元类,该元类又允许你在其类中指定额外的槽选项,采用 LGPL3 许可证。

💡 函数扩展:增强函数功能 💡

  • cl-hooks: 钩子扩展点机制 (例如,从 GNU Emacs 中得知),采用 LGPL 许可证。
  • method-hooks: 当 CLOS 方法组合只允许每个方法有一个钩子时,这个库允许任意数量的钩子,采用 Mozilla Public Licence 许可证。
  • cl-advice: 一个用于 SBCL、CCL、LispWorks 和 Allegro 的可移植层 advice 库,不在 Quicklisp 中。
  • nhooks: 一个增强的钩子 (扩展点) 实现,具有关键改进。

🔁 迭代:简化循环操作 🔁

  • iterate: 一个用于 Common Lisp 的迭代结构,它是可扩展的,并且更 Lisp 化,采用 MIT 许可证。
  • for: 一个简洁、lispy 和可扩展的迭代宏,采用 zlib 许可证。与 loop 不同,它是可扩展的,并且是合理的,与 iterate 不同,它不需要代码遍历,并且更容易扩展。
  • series: 函数式风格,没有任何运行时惩罚,采用 MIT 许可证。
  • trivial-do: Common Lisp 的额外 dolist 风格宏,采用 MIT 许可证。
  • doplus: 另一个可扩展的迭代库,类似于 :for。

cl-transducers:

人性化、高效的数据处理,采用 LGPL3 许可证。
* “Transducers 是一种符合人体工程学且极其节省内存的数据源处理方式。这里“数据源”指的是像列表或向量这样的简单集合,但也可能是大型文件或无限数据的生成器。”
* “总的来说,它是 Transducer 模式的最完整实现。”
* 一个带有 map​、filter​、take​、repeat​、cycle​、fold​… 的“现代” API。

  • snakes: Common Lisp 的 Python 风格生成器,采用 Apache2 许可证。包括 itertools 的一个端口。
  • picl: Python 的 itertools 包的(几乎)完整端口,在适用时具有惰性,并且不依赖于 cl-cont,采用 MIT 许可证。
  • gtwiwtg: 一个惰性序列库。类似于 'series',但没有那么完整。但是它有一个“现代”的 API,带有 take​、filter​、for​、fold​ 等易于使用的内容。
  • gmap: 一个简洁且可扩展的迭代工具,它与 FSet(参见数据结构部分)很好地集成,因为它是由同一个作者编写的。在 Quicklisp 中作为 misc-extensions​ 的一部分。公共领域。

ƛ Lambda 简写:让代码更简洁 ƛ

  • fn: 几个 lambda 简写宏,采用公共领域许可证。(fn* (+ _ _)) --> (lambda (_) (+ _ _))​。
  • f-underscore: 一个微型函数式编程实用程序库,采用公共领域许可证。(f_ (+ _ _)) -> (lambda (_) (+ _ _))​。
  • cl-punch: 类似 Scala 的匿名 lambda 字面量,采用 MIT 许可证。(mapcar ^(* 2 _) '(1 2 3 4 5))​。

参见 CL21 和 Rutils。

🤔 非确定性、逻辑编程:探索不同的编程范式 🤔

  • cl-prolog2: Common Lisp 中 ISO Prolog 实现的通用接口,采用 MIT 许可证。
  • Screamer: 用 Prolog 和约束逻辑编程语言的几乎所有功能来增强 Common Lisp,采用 MIT 许可证。博客文章:Common Lisp 中的规范驱动编程,解决 Project Euler 谜题。
  • Screamer+ : 增加 SCREAMER 的表达能力,采用 MIT 许可证。
  • Temperance: 逻辑编程,采用 MIT 许可证。专注于性能,考虑到通用游戏玩法。

⚡️ 响应式编程:让程序更灵敏 ⚡️

  • Cells: 数据流编程范式的实现,为 CLOS 提供类似电子表格的响应式表达能力,采用 Lisp LGPL 许可证。用于构建代数学习系统。带有文档。

  • lwcells: 轻量级 Cells。

    • LWCELLS 是 Common Lisp 的数据流扩展。它根据指定其关系的函数维护单元格的一致状态。LWCELLS 旨在简单、干净、组合和灵活。

🤝 合同编程:确保代码的正确性 🤝

  • quid-pro-quo: 一个类似于 Eiffel 的按合约设计 ™ 的合同编程库,属于公共领域。

⌨️ 类型:增强代码的安全性 ⌨️

  • 👍 Coalton: 一种高效的、静态类型的函数式编程语言,它增强了 Common Lisp,采用 MIT 许可证。
  • 👍 trivial-types: 提供缺失但重要的类型定义,例如 proper-list​、association-list​、property-list​ 和 tuple​,采用 LLGPL 许可证。
  • defstar: 一组宏,用于轻松地在 lambda 列表中包含参数的类型声明,采用 GNU GPL3 许可证。
  • algebraic-data-types: 以类似于 Haskell 或 Standard ML 的方式定义代数数据类型,以及对它们进行操作,采用 BSD_3Clause 许可证。

🧰 其他类型相关库:探索类型的奥秘 🧰

  • typo: 一个用于 Common Lisp 的可移植类型推断库,采用 MIT 许可证。
  • 实验性:PELTADOT - PELTADOT 扩展了 Lisp 的类型并在它们之上进行调度。

📐 定理证明器:验证代码的正确性 📐

  • ACL2: 一种逻辑和编程语言,你可以在其中对计算机系统进行建模,以及一个帮助你证明这些模型属性的工具。

    • 自 20 世纪 90 年代以来一直在业界使用。

    • 它支持 ANSI 标准 Common Lisp 编程语言的一个子集。

    • “定期使用 ACL2 的公司包括 AMD、Centaur Technology、IBM、Intel、Kestrel Institute、Motorola/Freescale、Oracle 和 Rockwell Collins。”(来源)

    • Proofpad: 一个用于 ACL2 的在线 IDE。

    • ACL2-kernel: 一个用于 ACL2 的 Jupyter Kernel。

    • ACL2 Sedan: 一个 Eclipse 插件,为 ACL2 提供了一个现代 IDE,在大学里与学生一起使用。

  • NASA 的 PVS(原型验证系统)和 NASAlib(一个形式化开发库的集合)。

    • 它的 63 个顶级库涵盖了以下领域:实分析、极限、连续性、导数、积分;复积分;有向图;精确实数算术,包括三角函数;区间算术和数值逼近;线性代数;二维、三维、四维和 n 维向量……等等。

🆕 数值和科学计算:探索 Lisp 的应用 🆕

如果你有精确的需求、模糊的需求或仅仅是问题,仓库 Common Lisp numsci call for needs 是一个讨论它们的新地方。

📚 学习和教程:踏上 Lisp 之旅 🧭

学习 Common Lisp 的资源非常丰富,无论你是初学者还是经验丰富的程序员,都能找到适合你的学习资料。

🌐 在线资源:随时随地学习 Lisp 🌐

🐣 初学者:从入门到精通 🐣
  • Learn X in Y minutes - Where X = Common Lisp: 一个涵盖基本内容的 Common Lisp 小型教程。

  • Lisp Koans: 该项目逐步引导学习者学习许多 Common Lisp 语言功能。

  • Practical Common Lisp: 一本很好的 Common Lisp 入门教材,包含实用示例。

    • 最好用 Firefox 插件阅读:Practical-cl beautified。
    • 翻译成简体中文。
  • Common LISP: A Gentle Introduction to Symbolic Computation: 对该语言的很好的介绍。

  • Successful Lisp: 一本适合具有一些编程背景的初学者的书籍。

  • Lisp Quickstart: 一个很好的教程,可以快速入门并编写 Common Lisp 代码。

  • Casting SPELs in LISP: 一种在阅读漫画书的同时学习 LISP 的有趣方式。

  • 📹 Common Lisp Programming: from novice to effective developer: Udemy 平台上的学习视频系列(付费访问完整内容)。由一位活跃的 Lisp 程序员和社区贡献者 (@vindarel) 制作。GitHub 主页:https://github.com/vindarel/common-lisp-course-in-videos/

感谢你支持我在 Udemy 上的工作。我可以向学生发送免费链接,只需与我联系。

  • Loving Common Lisp, or the Savvy Programmer's Secret Weapon: 快速介绍 Common Lisp,包含许多示例。特别关注如何使用大型语言模型 (LLM)。
🐥 中级:深入探索 Lisp 的世界 🐥
🦅 高级:掌握 Lisp 的精髓 🦅
  • Let Over Lambda: 一本关于高级宏技术的书籍。前六章可在线获取。
  • On Lisp: Paul Graham 关于 Lisp 宏(和其他有趣的东西)的精彩书籍。
  • Programming Algorithms in Lisp: “Programming Algorithms” 的更新版本;使用 Lisp 中的数据结构和算法编写高效程序的综合指南。
🧰 SBCL 内部:深入了解 Lisp 实现 🧰
  • SBCL internals
  • sbcl-wiki: 一个记录 SBCL 内部结构的开放维基。

💻 编码平台:练习 Lisp 技能 💻

  • Codewars: 一个代码训练平台,支持 Common Lisp (SBCL)。

🌐 Web 开发:用 Lisp 构建 Web 应用 🌐

  • Lisp for the Web: 一本指导你分三层构建投票 Web 应用程序的书籍。
  • Lisp Web Tales: 使用 hunchentoot、cl-redis、restas、SEXML、Postmodern 等的简单教程。
  • The Common Lisp Cookbook 中的 Web 开发部分: 一个介绍性教程,涵盖 Web 服务器设置、路由、weblocks、模板、错误处理、打包、热重载、数据库连接和部署,以及当前 Lisp Web 开发生态系统中的其他主题。

📖 参考:查找 Lisp 相关信息 📖

  • NEW! CL CommunitySpec: Common Lisp ANSI 规范草案的再现。

    • 带有交互式搜索、语法高亮!并且是开源的。
  • NEW! novaspec: CL ANSI 草案的现代再现。

    • 不是开源的?
  • Common Lisp Quick Reference: ANSI CL 规范的精简袖珍版。可下载为 PDF 格式。

  • CLHS: Common Lisp HyperSpec;ANSI CL 标准,以超文本形式提供。

  • CLOS MOP 规范: 《元对象协议的艺术》第 5 章和第 6 章的现代公共领域在线版本。

  • Common Lisp 标准草案 (pdf) : Common Lisp 规范的标准草案,格式良好的 PDF,带侧边栏。

    • 还有 dpans2texi: 将标准草案转换为 Texinfo 并发布为格式良好的 PDF。
  • Common Lisp the Language: ANSI 规范之前的 Common Lisp 原始标准。

    • CLtL2,PDF 格式
  • Minispec: CLHS 的更友好但不太完整的版本。还包含一些常用 CL 库(例如 Alexandria)的文档。

  • Simplified Common Lisp reference: CLHS 的简化版本。

  • CDR: Common Lisp 文档仓库。一个存放 Common Lisp 社区感兴趣的文档的仓库。CDR 文档最重要的属性是它永远不会改变:如果你引用它,你可以确定你的引用将始终引用完全相同的文档。

    • Common Lisp 文档仓库托管在 Zenodo 上。

📚 离线资源:随时随地学习 Lisp 📚

CLHS 可通过存档 离线获取,并在 Dash、Zeal 和 Velocity 中作为文档集提供。

🐣 初学者:从入门到精通 🐣
  • Land of Lisp: 一个有趣的、以游戏为导向的 Common Lisp 简介。
  • Practical Common Lisp: 一本很好的 Common Lisp 入门教材,包含实用示例。
🐥 中级:深入探索 Lisp 的世界 🐥
  • ANSI Common Lisp: 对整个语言的全面、实用的介绍,包含练习。由于一些注意事项,不建议将其作为入门教材。
  • Common Lisp Recipes: Common Lisp Recipes 是你在使用 Common Lisp 编写实际应用程序时可能会遇到的问题解决方案和问题答案的集合。出版于 2015 年。
🦅 高级:掌握 Lisp 的精髓 🦅
  • Let Over Lambda: 一本关于高级宏技术的书籍。所有八章都可以在印刷版中找到。

  • Object-Oriented Programming in Common Lisp: A Programmer's Guide to CLOS: 一本关于 CLOS 的旧书,但非常全面。

  • Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp: 一本关于编程 AI 的书籍,涵盖了一些高级 Lisp。

📚 其他书籍:扩展你的 Lisp 知识 📚
  • Building Problem SolversPDF)由 Ken Forbus 和 Johan de Kleer 撰写,由麻省理工学院出版社免费提供 - 在标准人工智能教科书中,这是一本独特的书籍,它结合了科学和工程、理论和工艺来描述 AI 推理系统的构建,并包含说明这些想法的代码。

💬 社区:与 Lisp 爱好者交流 💬

  • /r/Common_Lisp: 关于 Common Lisp 的 subreddit。
  • /r/learnlisp: 一个询问问题并获得 Lisp 帮助的 subreddit。
  • common-lisp.net
  • lisp-lang.org
  • Lisp Discord Server
  • #commonlisp 在 Libera Chat 上 - Common Lisp 的主要 IRC 频道。
  • #lisp 在 Libera Chat 上 - 所有 Lisp 方言的 IRC 频道。
  • #clschool 在 Libera Chat 上 - 学习 Common Lisp 的 IRC 频道。
  • #lispcafe 在 Libera Chat 上 - 闲聊的 IRC 频道。
  • Planet Lisp: 一个收集各种 Lisp 相关博客内容的元博客。
  • Common Lisp chat: 具有明确定义的规则和保留策略的 Keybase 团队。

📦 库管理器:管理你的 Lisp 宝藏 🧰

库管理器可以帮助你轻松地安装、更新和管理 Common Lisp 库,让你专注于代码而不是依赖关系。

⭐ Quicklisp: 最受欢迎的 Lisp 库管理器 ⭐

  • Quicklisp: 一个包含许多库的库管理器,具有简单的依赖关系管理功能,采用 Expat 许可证。

    • ql-https: 使用 cURL 并默认使用 HTTPS。
    • Quicklisp bundles: 自包含的系统集,从 Quicklisp 导出,无需 Quicklisp 即可加载。

👍 CLPM: 新一代 Lisp 包管理器 👍

  • 👍 CLPM: 一个 Common Lisp 的包管理器,它努力将包管理器进程本身与使用它的客户端镜像干净地分开,采用 BSD_2Clause 许可证。

    • CLPM 以预构建的二进制文件形式提供,默认支持 HTTPS,支持安装多个包版本,支持版本化系统等等。

🧰 其他库管理器:扩展你的选择 🧰

  • Ultralisp: 一个每 5 分钟更新一次的 Quicklisp 发行版,你可以一键添加你的项目,采用 BSD 许可证。

  • 👍 Roswell: 一个 Lisp 实现安装程序、脚本启动器等等,采用 MIT 许可证。

  • Qlot: 一个项目本地库安装程序,类似于 Bundler 或 Virtualenv,采用 Expat 许可证。

    • 如何在没有 Roswell 的情况下从 Lisp REPL 使用它。
  • Quicksys: 从多个 Quicklisp 发行版安装系统,采用 MIT 许可证。

  • Quickutil: 一个实用程序管理器,类似于 Quicklisp,但用于小型实用程序而不是整个库,采用 3-clause BSD 许可证。

🆕 新的库管理器:探索 Lisp 包管理的未来 🆕

  • (2023 年 5 月新增) ocicl: 一个新的实验性 Quicklisp 替代方案,建立在容器世界的工具之上,采用 MIT 许可证。

🧰 库管理器相关工具:让库管理更便捷 🧰

  • trivial-system-loader: Common Lisp 的系统安装/加载抽象。

    • 与使用 Quicklisp 以外的其他库管理器的人友好相处:不要硬编码 (ql:quickload :mysystem)​,而是使用 (tsl:load-system :mysystem)​。tsl:load-system 将首先尝试使用 ocicl(如果可用),然后是 quicklisp,然后是普通的 asdf:load-system。
  • redist: 用于生成 Quicklisp 发行版的工具。

  • quick-patch: 轻松覆盖 quicklisp 项目,无需使用 git 子模块,采用 MPL-2.0 许可证。

  • print-licenses: 打印项目及其依赖项使用的许可证,采用 MIT 许可证。

  • asdf-dependency-graph: 一个围绕 dot​ 的最小包装器,用于生成依赖关系图的图像。

🔌 与其他包管理器的接口:扩展 Lisp 的生态系统 🔌

linux-packaging: 使用

单个 ASDF 声明为你的应用程序构建 .deb、.rpm 或 .pkg 包,采用 MIT 许可证。它使用 fpm。

  • qldeb: 将 Quicklisp 系统转换为 debian 包,以及 deb-packager (只需定义一个 s 表达式即可创建一个 debian 包) 和一篇介绍性博客文章。两者都采用 MIT 许可证。
  • ql-to-deb: 从 Quicklisp 版本更新 cl-* debian 包,采用 WTFPL 许可证。
  • dh-quicklisp-buildapp: 一个 debhelper 实用程序,让你几乎毫不费力地将基于 quicklisp 的 Common Lisp 代码编译成 .deb 中的 buildapp 二进制文件,采用 MIT 许可证。
  • cl-brewer: (命令行) Common Lisp 应用程序的 Homebrew formula 构建器,属于公共领域。
  • flatpack-common-lisp: 一个 BuildStream 项目,用于为 Common Lisp 应用程序构建基于 Flatpak 的运行时环境。
  • alien-works-delivery: 一个正在开发中的系统,用于将 Common Lisp 应用程序作为可执行包交付。目前它只支持 Linux 的 AppImage 格式和 Windows 的 MSIX 格式,但计划支持 Android 的 .APK 格式以及后来的 MacOSX 和 iOS 包格式。
  • cl-nix-lite: 一个用于 Nix 的 Common Lisp 模块,没有 Quicklisp,采用 AGPL-3.0 许可证。

你还可以看看:

  • asdf-sbcl: 一个用于通用包管理器的插件。
  • 📹 这段 Youtube 视频 (由 40ants 制作,2023 年),介绍如何使用 alien-works-delivery 和 linux-packaging。

🤖 机器学习:用 Lisp 探索数据 🧠

机器学习是人工智能的一个重要分支,而 Common Lisp 也提供了多个机器学习库,可以帮助你构建各种机器学习模型。

  • MGL: 一个用于反向传播神经网络、玻尔兹曼机、高斯过程等的机器学习库,采用 MIT 许可证。

    • 一些部分最初由 Ravenpack International 贡献。
    • 作者用它赢得了希格斯玻色子机器学习挑战赛。
    • 关于作者的更多信息:他还使用 Common Lisp 赢得了 2010 年的 Google AI 挑战赛,但没有使用 MGL,因为不需要机器学习。相关演讲 (59 分钟,2013 年)。
  • clml: 最初由日本公司 Mathematicl Systems Inc. 开发,带有一个教程,采用 LLGPL 许可证。

  • antik: Common Lisp 中科学和工程计算的基础,采用 GPL 许可证。还有 mgl-matLLA

来源:borretti.me 的 2015 年 CL 生态系统现状

💬 自然语言处理:用 Lisp 理解语言 🗣️

自然语言处理 (NLP) 是人工智能的另一个重要分支,它涉及计算机对人类语言的理解和处理。

  • 🚀 sparser: 一个用于英语的自然语言理解系统,采用 Eclipse 许可证。

    • 一个模型驱动的、基于规则的语言文本分析系统,用于大容量、高精度信息提取。Sparser 的核心是一个自下而上的、基于短语结构的图表解析器,针对语义语法和部分解析进行了优化。

  • cl-nlp: 自然语言处理工具集,采用 Apache2.0 许可证。

  • babel2: 一个流体构造语法实现、计算框架和基于统一的语法形式,采用 Apache2.0 许可证。

🌐 网络和互联网:用 Lisp 连接世界 🌐

Common Lisp 提供了丰富的库来进行网络编程,从简单的 HTTP 客户端到复杂的 Web 框架,应有尽有。

更多信息请参阅 Cliki。

🕸️ HTTP 客户端:访问 Web 资源 🕸️

  • 👍 Dexador: 一个 HTTP 客户端,旨在取代 Drakma,采用 MIT 许可证。
  • Carrier: 一个轻量级的异步 HTTP 客户端,构建在 cl-async 和 fast-http 之上,采用 MIT 许可证。
  • fast-http: 一个用于 Common Lisp 的快速 HTTP 请求/响应解析器,采用 MIT 许可证。
  • http2: Common Lisp 中的 HTTP/2 实现,采用 MIT 许可证。

💻 HTTP 服务器:构建 Web 应用 💻

  • Hunchentoot: 一个 Web 服务器,采用 2-clause BSD 许可证。
  • 👍 Clack: 一个受 Rack 和 WSGI 启发的 Web 应用程序环境,采用 LLGPL 许可证。它为选择的 Web 服务器(默认为 Hunchentoot)提供了一个统一的接口。还有更多入门指南。
  • zaserve: Franz Inc. 的 AllegroServe 的一个可移植分支,采用 LLGPL 许可证。
  • wookie: 异步 HTTP 服务器,采用 Expat 许可证。
  • woo: 一个基于 libev 的快速非阻塞 HTTP 服务器,采用 MIT 许可证。
  • cl-http2-protocol: 一个纯 Common Lisp 传输无关的 HTTP/2 协议实现,采用 MIT 许可证。
🔌 Hunchentoot 插件:增强 Web 服务器功能 🔌
  • 👍 easy-routes: 一个基于 Hunchentoot 的路由处理系统,采用 MIT 许可证。它支持基于 HTTP 方法的调度、从 URL 路径中提取参数、装饰器、从路由名称生成 URL 等。
  • hunchentoot-cgi: 一个用于从 hunchentoot Web 服务器执行 CGI 脚本的库,采用 BSD 许可证。
  • hunchentoot-multi-acceptor: 使用单个端口在单个 hunchentoot 接收器上路由多个域(虚拟主机),采用 Apache2.0 许可证。
  • hunchentoot-errors: 使用请求和会话信息增强 Hunchentoot 错误页面和日志,采用 MIT 许可证。

你还可以看看:

  • cl-tbnl-gserver-tmgr: 基于 Hunchentoot Gserver 的任务管理器。cl-gserver 是一个类似 actor 的消息传递库(参见下面的“Actor 模式”)。实验性的。
🔌 Clack 插件:增强 Web 应用环境 🔌
  • tiny-routes: 一个针对 Clack 的 Common Lisp 小型路由库,采用 BSD_3Clause 许可证。
  • clack-errors: Clack 的错误页面中间件,采用 LLGPL 许可证。
  • clath: 一个用于 Clack 的单点登录中间件,采用 Apache2.0 许可证。它允许使用 OAuth1.0a、OAuth2 和 OpenID 进行基本登录。在撰写本文时,它支持来自 Google、Twitter、LinkedIn、StackExchange、Reddit 和 Github 的身份验证。
  • clack-pretend: 一个用于 clack 的测试和调试工具,采用 Apache2.0 许可证。
  • hermetic: 基于 Clack 的 Web 应用程序的安全性,采用 Expat 许可证。
  • live-reload: Clack 的实时重新加载原型,采用 LLGPL 许可证。
  • clack-static-asset-middleware: 一个用于 clack 的缓存清除静态资产中间件,采用 MIT 许可证。

对于路由,我们还可以使用 Snooze(参见下文)。

🕸️ Web 框架:构建 Web 应用的利器 🕸️

  • Caveman: 一个强大的 Web 框架,采用 LLGPL 许可证。
    示例项目:Quickdocs。

  • ningle: 一个超微型 Web 框架,采用 LLGPL 许可证。

    • jingle: 基于 ningle,添加了一些额外的功能,例如中间件。

      • 包括一个 OpenAPI 和 Swagger UI 演示。
  • radiance: 一个 Web 应用程序环境和框架,采用 zlib 许可证。

🕸️ REST 框架:构建 RESTful API 🕸️

  • 👍 Snooze: 一个 RESTful Web 框架,采用 LLGPL 许可证。与 Web 服务器无关。目前支持 Hunchentoot 和 Clack。路由只是函数,HTTP 条件只是 Lisp 条件。
  • cl-rest-server: 一个用于编写 REST Web API 的库,采用 MIT 许可证。功能包括使用模式进行验证、用于日志记录、缓存、权限或身份验证的注释、通过 Swagger 进行文档记录等。

参见下面的 OpenAPI、OData 和其他库。

🌐 同构 Web 框架:前后端代码共享 🌐

  • Weblocks (Reblocks) : 一个基于部件的框架,内置 ajax 更新机制,可以“解决 JavaScript 问题”,采用 LLGPL 许可证。

    • 示例代码库:Ultralisp、krasnodar,一个为黑客马拉松(2024 年)制作的仪表板(演示视频)。
  • CLOG: Common Lisp Omnificent GUI,采用 BSD_3Clause 许可证。它使用 Web 技术为本地或远程应用程序生成图形用户界面。

    • CLOG 基于 GNOGA 的思想,GNOGA 是作者为 Ada 编写的框架,自 2013 年以来一直在商业生产代码中使用。
  • Interactive SSR: ISSR 允许你无需编写客户端脚本即可制作交互式网页。无需了解 Javascript 或 DOM。

    • 它与 Phoenix LiveView 或 Hotwire 类似。

📄 HTML 解析:处理 HTML 文档 📄

  • 👍 Plump: 一个宽松的 HTML/XML 解析器,可以容忍格式错误的标记,采用 zlib 许可证。最好与 lquery 和 clss 一起使用。

你还可以看看:

  • cl-html5-parser: Common Lisp 的 HTML5 解析器,采用 GPL3.0 许可证。

    • Python 库 html5lib 的一个端口。
    • 与 Plump 相比:Plump 是 XML 和 HTML 解析器的混合体,在某些 HTML 规则上会中断(示例),而 cl-html5-parser 是完全符合 HTML 规范的解析器。

🕸️ HTML/DOM 查询和 Web 抓取:提取 Web 数据 🕸️

  • 👍 lquery: 一个类似 jQuery 的 HTML/DOM 操作库,采用 zlib 许可证。

  • scrapycl: 一个用于编写 Common Lisp 爬虫的 Web 抓取框架,采用 Unlicense 许可证。

    • 依赖于 lquery。

你还可以看看下面的 XML 部分,了解 xpath 库和更多内容。

📄 HTML 生成器和模板:生成 HTML 代码 📄

  • 👍 spinneret: Common Lisp HTML5 生成器,采用 Expat 许可证。

  • cl-who: 一个古老的 HTML 生成器,采用 FreeBSD 许可证。

  • Djula: Django 模板引擎的 Common Lisp 端口,采用 Expat 许可证。

    • cl-djula-tailwind: 在你的 Djula 模板中使用 TailwindCSS 类,无需任何 JavaScript 或 Node.js 工具。
    • djula-template-designer: 一个模板设计器工具。
  • TEN: Djula 的完整性与 Eco 的可用性相结合,采用 MIT 许可证。

  • eco: 快速、灵活、对设计人员友好的模板引擎,采用 Expat 许可证。

  • cl-closure-template: Google Closure 模板的实现,其中编译模板会创建一个生成结果的函数,采用 LLGPL 许可证。

  • flute: 一个易于组合的 HTML5 生成库,具有最简单的语法,采用 MIT 许可证。

  • clip: 一个 HTML 模板处理器,其中模板是用 HTML 编写的,采用 zlib 许可证。

  • lsxmarkup: 两个类似 JSX 的模板引擎,其中 HTML 标签是 Common Lisp 代码。markup​ 带有一个 Emacs 包。

🌐 URI 处理:处理 URL 🌐

  • quri: 另一个用于 Common Lisp 的 URI 库,采用 BSD_3Clause 许可证。它支持用户信息、IPv6 主机名、编码/解码实用程序……
  • cl-slug: 一个用于制作 slug 的小型库,主要用于 URI,可以转换为驼峰式大小写,删除重音符号和标点符号,适用于英语和其他语言,采用 LLGPL 许可证。

🌐 JavaScript:与浏览器交互 🌐

  • Parenscript: 一个 Common Lisp 到 Javascript 的翻译器,采用 3-clause BSD 许可证。参见 Trident-mode,一个提供与浏览器实时交互的 Emacs 模式,采用 unlicence 许可证。

    • paren6: 一组用于 Parenscript 的 ES6 宏。
  • JSCL: 一个 CL 到 JS 编译器,旨在从第一天开始就自托管。缺少 CLOS、format 和 loop。

  • CL-JavaScript: 一个 Javascript 到 Common Lisp 的翻译器,不在 Quicklisp 上可用,采用 Expat 许可证。

  • parse-js: 一个用于解析 ECMAScript 3 的包,采用 zlib 许可证。

  • remote-js: 将 JavaScript 从 Common Lisp 发送到浏览器,采用 MIT 许可证。

  • sigil: 一个 Parenscript 到 Javascript 的命令行编译器和 REPL,采用 MIT 许可证。

正在开发中:

  • Valtan: Common Lisp 到 JavaScript 编译器。
  • JACL: 一个用于 Web 浏览器平台的实验性 Lisp 系统,用于探索使用 Lisp 开发大型单页应用程序的新技术。

🧰 React 实用程序:构建 React 应用 🧰

  • cl-react: 用于在 ReactJs 中构建 Web 应用程序的 Common Lisp (Parenscript) 实用程序,采用 MIT 许可证。
  • Panic: 一个用于 React 的 Parenscript 库,不在 Quicklisp 中,采用 MIT 许可证。它的 TodoMVC 示例。
  • Parenscriptx: 用于帮助生成 react 代码的 Parenscript 宏,采用 MIT 许可证。
  • jscl-react: 一个使用 jscl 用 Common Lisp 编写 react 组件的 Web 框架,未指定许可证。

你还可以看看:

  • trident-mode: 一个用于实时 Parenscript 交互的 Emacs 次要模式。

🚀 部署:将 Lisp 应用发布到世界 🚀

  • 👍 deploy: 一个用于 Lisp 应用程序二进制部署的工具包,额外支持外部共享库,采用 zlib 许可证。

  • common-lisp-heroku-example: 使用 Docker 在 Heroku 上运行 Common Lisp 服务器的示例。

  • cube: Kubernetes 客户端库,用于从 Swagger 规范生成的 Common LISP,采用 MIT 许可证。

  • s2i-lisp: 基于 CentOS 或 RHEL7 的 Source-to-Image 构建器镜像,用于为 OpenShift(以及 Docker)构建 Common LISP 镜像,采用 Apache2 许可证。它具有最新的 SBCL 和 Quicklisp 安装、SLIME 或 SLY 集成,并允许通过环境变量进行自定义。

  • cl-aws-runtime-test: 在 AWS lambda 上使用 Common Lisp (SBCL) 作为自定义运行时的示例,采用 WTFPL 许可证。

  • 40ants/ci: 用于 Common Lisp 项目的高度自以为是的 Github Actions 工作流构建器。

    • 包含:linter、lisp critic、测试运行器、测试矩阵、文档构建、缓存……
  • make-common-lisp-program: 在 Ubuntu、MacOS 和 Windows 上构建可执行 Common Lisp 程序的 GitHub 操作,采用 MIT 许可证。

你还可以看看:

  • Platform.sh 支持 Common Lisp,OVH 也通过他们的 Web PaaS 合作伙伴关系支持 Common Lisp。
  • Heliohost 提供免费托管解决方案。
  • SBCL 的 Cloud Init 文件 - 一个用于支持 cloudinit 格式的提供商(DigitalOcean 等)的初始化文件。

📈 监控:跟踪 Lisp 应用的运行状况 📈

  • prometheus.cl: Prometheus.io 客户端,采用 MIT 许可证。用于 SBCL 和 Hunchentoot 指标(内存、线程、每秒请求数……)的 Grafana 仪表板。

    • prometheus-gc: prometheus.cl 的扩展,它收集有关垃圾收集器状态的指标。
  • cl-sentry-client: 一个用于 Common Lisp 的 Sentry 客户端,采用 MIT 许可证。Sentry 是一个基于云的错误监控系统。

  • rollbar.lisp: 一个用于错误跟踪软件 Rollbar.com 的接口。

🌐 WebSockets:实现实时通信 🌐

  • 👍 usocket: 一个可移植的 TCP 和 UDP 套接字接口,采用 Expat 许可证。

  • Portal: 使用 usocket 的 Common Lisp 可移植 WebSockets,采用 LLGPL 许可证。

  • clws: CL 中的 WebSockets 服务器,构建在 IOlib 和 libfixposix 之上,未指定许可证。

  • Hunchensocket: 符合 RFC6455 标准的 Common Lisp WebSockets,作为 Hunchentoot 的扩展,采用 MIT 许可证。

  • websocket-driver: 基于 Clack。

  • iolib: I/O 库,采用 Expat 许可证。

    • “IOlib 将成为比标准 Common Lisp 库更好、更现代的 I/O 库。它包含:一个套接字库、一个 DNS 解析器、一个 I/O 多路复用器、一个路径名库和文件系统实用程序。”

编者注:在撰写本文时,我们似乎还没有一个功能齐全的 Common Lisp WebSockets 实现。但是,我们可以推荐 Portal,并邀请你仔细检查 Hunchensocket 和 websocket-driver 的当前问题。

🧰 Web 开发

实用程序:让 Web 开发更轻松 🧰

在浩瀚的 Web 开发领域,Common Lisp 也提供了丰富的实用程序,帮助你轻松应对各种挑战。

📦 资源管理:让你的资源井井有条 📦

  • Rock: Common Lisp 的资源管理器,采用 MIT 许可证。它基本上是 Bower 和 webassets 的组合。

🌐 浏览器测试:确保你的 Web 应用完美运行 🌐

  • cl-webdriver-client: 一个 WebDriver 绑定库(支持 Selenium 4.0)。

📝 表单处理:轻松处理用户输入 📝

  • 👍 cl-forms: Common Lisp 的 Web 表单处理库,采用 MIT 许可证。

🔐 用户登录和密码管理:保护用户安全 🔐

  • cl-authentic: Common Lisp(Web)应用程序的密码管理,采用 LLGPL 许可证。

    • 安全的密码存储:无明文,通过 ironclad 使用你选择的哈希算法,存储在 SQL 数据库中,
    • 密码重置机制,使用一次性令牌(适合通过邮件发送给用户进行确认),
    • 可选使用确认令牌创建用户(适合通过邮件发送给用户),
  • mito-email-auth: 通过电子邮件向网站用户发送唯一代码来验证其身份的助手。

  • cl-cas: 一个帮助 Common Lisp Web 应用程序进行 CAS 身份验证的库,不在 Quicklisp 中。

    • cas-middleware: Caveman 的 CAS 身份验证中间件。
    • cas-demo: 一个演示项目。

你还可以看看 mito-auth 以及上面的 Hunchentoot 和 Clack 插件。

🏗️ Web 项目骨架和生成器:快速启动你的项目 🏗️

  • cl-cookieweb: 一个用于启动 Web 项目的 Cookiecutter 模板,采用 BSD_3Clause 许可证,不在 Quicklisp 中。

    • 提供一个可以使用 Hunchentoot Web 服务器、easy-routes、Djula 模板、Bulma 样式、基于 SQLite、带有迁移、示例表定义和使用 FiveAM 的测试套件的工作玩具 Web 应用程序。
  • make-like: 一个用于 LIKE(Lisp In Kubernetes + Emacs)应用程序的应用程序模板构建器,采用 Apache2.0 许可证。

    • Makefile、podman 支持、GitHub Actions、Prometheus 指标支持、TOML 风格的 config.ini、预先配置了健康检查的 easy-route 等等。
  • cl-webapp-seed: 一个简单的 Web 应用程序样板,采用 MIT 许可证。它使用 Hunchentoot、cl-who,可以轻松部署到 Heroku。

🧰 其他 Web 开发实用程序:扩展你的工具箱 🧰

  • css-lite: 一个 CSS 语法,采用 Expat 许可证。
  • find-port: 以编程方式查找开放端口,采用 MIT 许可证。
  • cl-wget: 轻松检索大型文件或镜像整个网站,采用 AGPL-3.0 许可证。
  • trivial-download: 下载文件,采用 MIT 许可证。
  • cl-cookie: HTTP Cookie(jar)管理器:解析和写入(设置)cookie 标头,比较 cookie,可选的 cookie 属性完整性检查,采用 MIT 许可证。

📧 电子邮件:发送和接收电子邮件 📧

  • trivial-imap: 尝试简化使用 IMAP 服务器的一些常见情况,例如从服务器读取电子邮件,采用 BSD 许可证。它是 post-office 库(Franz 的 cl-imap 的一个分支)的薄包装器。
  • Postmaster: 一个简单易用的 SMTP/IMAP 库,采用 Expat 许可证。
  • cl-smtp: CL-SMTP 是一个简单的 lisp smtp 客户端。
  • sendgrid: 使用 Sendgrid 的 API 发送电子邮件,采用 MIT 许可证。
  • mailgun: 一个通过 mailgun.com 发送 HTML 电子邮件的薄包装器,采用 unlicence 许可证。
  • cl-ses: AWS SES 库,采用 Expat 许可证。

🌐 OpenAPI、OData、OpenRPC:与 API 交互 🌐

  • NEW! openapi-generator: OpenAPI 客户端代码生成器,采用 AGPL-3.0 许可证。

    • 在一个命令内生成 OpenAPI ASDF/Quicklisp 可加载项目,
    • 支持路径、(任意)查询、(任意)标头、(json)内容参数,
    • 将 OpenAPI 规范转换为 CLOS 对象 -> 在检查器中探索 API,
    • 使用 swagger 转换器将 OpenAPI-2.0 或 YAML 文件转换为 OpenAPI-3.0 JSON(需要网络连接),
    • 等等。
  • apispec: 一个用于处理 Web API 请求和响应的 Common Lisp 库,采用 BSD_3Clause 许可证。

    • 采用 OpenAPI3 yaml 规范,并允许验证和解析 HTTP 请求标头、参数和正文。
  • cl-odata-client: 用于访问 OData 服务的 Common Lisp 客户端库,采用 MIT 许可证。

  • OpenRPC: Common Lisp 的 OpenRPC 实现,采用 BSD 许可证。

    • 自动生成 OpenRPC 规范。
    • 通过 OpenRPC 规范自动构建 JSON-RPC 客户端。这包括创建 Common Lisp 类和方法来发出 RPC 请求并返回本机 CL 对象。
    • 所有 JSON 编组都在后台完成。
  • jsonrpc: Common Lisp 的 JSON-RPC 2.0 服务器/客户端,采用 BSD 许可证。

📄 静态网站生成器:构建静态网站 📄

  • coleslaw 及其 coleslaw-cli: 灵活的 Lisp 博客软件,类似于 Frog、Jekyll 或 Hakyll,采用 BSD 许可证。

🔌 第三方 API:与外部服务集成 🔌

  • Aws-sign4: 用于 Amazon Web Services 签名版本 4 的 Common Lisp 库,采用 GNU GPL3 许可证。

  • aws-sdk-lisp: 为每个 AWS 服务提供接口作为单独的系统,采用 BSD_2Clause 许可证。

    • 包括数十种服务:dsn、appstream、athena、cloudfront、codedeploy、cognito-*、directconnect、dynamodb、dms、elasticache、email、events、kinesis、machinelearning、monitoring、s3、sms、storagegateway、workspaces……
  • zs3: 一个用于处理 Amazon 的简单存储服务 (S3) 和 CloudFront 服务的库,采用 BSD 许可证。

  • north: South(Simple OaUTH)库的后继者,实现了完整的 oAuth 1.0a 协议,包括客户端和服务器端,采用 zlib 许可证。使用 North,你可以轻松地成为 oAuth 提供者或消费者。

  • Ciao: 一个易于使用的 Common Lisp OAuth 2.0 客户端库,采用 LGPL3 许可证。它是 Racket OAuth 2.0 客户端到 Common Lisp 的一个端口。

  • avatar-api: 从 Google+、Gravatar 和其他地方获取头像,采用 Expat 许可证。

  • chirp: 一个 Twitter 客户端库,采用 zlib 许可证。

  • tooter: 一个实现了 Mastodon 完整 v1 REST API 协议的客户端库,采用 zlib 许可证。

  • cl-irc: 一个 IRC 客户端库,采用 Expat 许可证。

  • cl-mediawiki: MediaWiki api 的一个包装器,采用 MIT 许可证。

  • cl-openid: OpenID 的一个实现,采用 LLGPL 许可证。

  • cl-pushover: Common Lisp 到 Pushover 的绑定,采用 MIT 许可证。

  • humbler: 一个 Tumblr API 接口,采用 zlib 许可证。

  • multiposter: 同时发布到多个服务,采用 zlib 许可证。

  • stripe: Stripe 支付系统的客户端,采用 MIT 许可证。

  • lisp-pay: 各种支付处理器的包装器:Paypal、Stripe、Coinpayments 和 BTCPayServer,采用 MIT 许可证。

  • lunamech-matrix-api: 客户端 -> 服务器 Matrix API 的完整包装器,采用 MIT 许可证。

  • cl-telegram-bot: Telegram bot API,采用 MIT 许可证。

    • cl-telegram-bot-auto-api: 另一个 Telegram Bot API 绑定,从 Telegram 网站自动生成,采用 3-clause BSD 许可证。

🧮 数值和科学计算:用 Lisp 进行计算 🧮

Common Lisp 在数值和科学计算领域也有着丰富的宝藏,让我们一起探索吧!

🧮 计算机代数系统:用 Lisp 进行符号计算 🧮

  • maxima: 计算机代数系统,采用 GNU GPL3 许可证。

    • wxMaxima: 一个图形前端。
    • Android 上的 Maxima: 使用 ECL 构建。
    • Jupyter 上的 Maxima
    • 它可以通过 SageMath 和 KDE Cantor 使用。当然,在 Emacs 中:maxima-mode(截图)和 maxima-interface 可以简化 Maxima 和 Common Lisp 之间的接口。
    • 它可以从 Lisp REPL 中使用。

🧮 数值计算库:用 Lisp 进行数值计算 🧮

  • numcl: Common Lisp 中的 Numpy 克隆,采用 LGPL3 许可证。
  • GSLL: GNU Scientific Library for Lisp;允许从 Common Lisp 中使用 GSL,采用 GNU LGPL2.1 许可证。
  • Xecto: 一个用于规则数组并行化的库,采用 3-clause BSD 许可证。
  • Petalisp: 一个通过 JIT 编译数组定义为并行计算机生成高性能代码的尝试,采用 AGPL-3.0 许可证。它的工作原理比 NumPy 更基本,通过提供更强大的 N 维数组,但只有几个构建块来处理它们。
  • cl-ana: Common Lisp 数据分析库,强调模块化和概念清晰度,采用 GNU GPL3 许可证。它旨在成为分析小型和大型数据集的通用框架,包括分箱数据分析和可视化。
  • avm: 高效且富有表现力的数组向量数学库,支持多线程和 CUDA,采用 MIT 许可证。
  • array-operations: 一个用于操作 Common Lisp 数组并对其执行数值计算的函数和宏的集合,采用 MIT 许可证。
  • cl-geometry: 一个用于 Common Lisp 的二维计算几何系统,采用 MIT 许可证。
  • Vellum: Common Lisp 的数据帧,采用 BSD_2Clause 许可证。
  • rtg-math: Lisp 中实时图形制作最常用的数学例程选择(2、3 和 4 分量向量、3x3 和 4x4 矩阵、四元数、球坐标和极坐标),采用 BSD_2Clause 许可证。

🧮 规划求解器:用 Lisp 解决规划问题 🧮

  • linear-programming: 一个用于解决线性规划问题的库,采用 MIT 许可证。
  • shop3: 一个分层任务网络 (HTN) AI 规划器,采用 Mozilla Public License 许可证。

🧮 矩阵库:用 Lisp 进行矩阵运算 🧮

  • magicl: Common Lisp 中基于 BLAS/LAPACK 和 Expokit 的矩阵代数程序,由 Rigetti Computing 开发,采用 BSD_3Clause 许可证。
  • lisp-matrix: 一个矩阵包,采用 FreeBSD 许可证。
  • 3d-matrices: 一个实现常见矩阵计算的库,重点是图形中常用的 2x2、3x3 和 4x4 矩阵,采用 zlib 许可证。它还提供了一些数值函数,但这不是重点。该库经过大量优化,因此代码并不漂亮。
  • clem: 一个矩阵库,采用 BSD_2Clause 许可证。

🧮 统计库:用 Lisp 进行统计分析 🧮

  • 👍 lisp-stat: 一个用于统计计算的环境,在概念上类似于 R,也适用于一线生产部署,采用 MIT 许可证。它“源于对一个环境的渴望,该环境可以快速原型化分析和 AI 解决方案,并以最小的摩擦直接迁移到生产环境。”

    • https://lisp-stat.dev/
    • 灵感来自 Luke Tierney 的 XLisp-Stat(R 的前身),提供了一个兼容性库,否则构建在其他更新的库之上。

你还可以看看 common-lisp-stat,Common Lisp 统计库,采用 FreeBSD 许可证,正在停滞。

🧮 单位库:用 Lisp 处理物理量 🧮

  • physical-quantities: 一个提供可选单位和/或不确定度的数值类型的库,用于自动误差传播计算,采用 GPL2 许可证。

🧰 数值和科学计算实用程序:扩展你的工具箱 🧰

  • cmu-infix: 一个用于在 Common Lisp 中编写中缀数学符号的库。你还可以看看 polisher

🧵 并行和并发:用 Lisp 充分利用多核 🧵

Common Lisp 提供了多种工具来进行并行和并发编程,让你可以充分利用多核处理器的性能。

🧵 线程:共享内存并发 🧵

  • BordeauxThreads: 可移植的、共享状态的并发,采用 Expat 许可证。

  • lparallel: 一个用于并行编程的库,采用 3-clause BSD 许可证。最初在 lmj/lparallel 上。

  • lfarm: 在多台机器上分配工作(基于 lparallel 和 usocket),采用 BSD_3Clause 许可证。

  • calispel: Common Lisp 的类似 CSP 的通道,采用 ISC 许可证。具有阻塞的、可选缓冲的通道和“CSP select”语句。

    • “它完整、灵活且易于使用。我推荐 Calispel 而不是 Lparallel 和 ChanL。” @Ambrevar。讨论
  • chanl: 可移植的、基于通道的并发,采用 Expat 许可证,部分代码采用 3-clause BSD 许可证。

  • cl-async: 一个用于通用、非阻塞编程的库,采用 Expat 许可证。

  • Moira: 监控和重启后台线程,采用 MIT 许可证。Lisp 中的进程管理器。

  • trivial-monitored-thread: 一个 Common Lisp 库,提供一种生成线程并在其中任何一个崩溃和死亡时得到通知的方法,采用 MIT 许可证。

  • cl-gearman: 一个用于 Gearman 分布式作业系统的库,采用 LLGPL 许可证。

  • swank-crew: 使用 Swank Client 实现的分布式计算框架,采用 BSD_3Clause 许可证。

  • cl-coroutine: 一个协程库,采用 MIT 许可证。它在其实现中使用了 CL-CONT 延续库。

  • STMX: Common Lisp 的高性能事务内存,采用 LLGPL 许可证。

  • Blackbird: Common Lisp 的 Promise 实现,采用 MIT 许可证。

    • 你还可以看看 promise,一个基本的 promise 数据结构,带有超时,采用 zlib 许可证。

你还可以看看:

  • cl-etcd: 将 etcd 作为异步子进程运行,采用 AGPL-3.0 许可证。etcd 是一个强一致性的分布式键值存储。

🎭 Actor 模式:基于消息传递的并发 🎭

  • 👍 Sento: Sento(以前称为 cl-gserver)是一个“消息传递”库/框架,具有类似于 Erlang 或 Akka 的 actor,采用 Apache2 许可证。它支持创建需要响应式、并行计算和基于事件的消息处理的系统。
  • erlangen: Clozure Common Lisp 的分布式、异步消息传递系统,采用 GNU GPL3 许可证。
  • Actors: LispWorks 的 Actors 包(公告),采用 MIT 许可证。
  • common-lisp-actors: 一个简单易用的 Actor 系统,采用 BSD_2Clause 许可证。
  • memento-mori: 一个用于编写健壮的、基于 actor 的系统的库,采用 MIT 许可证。它从 Erlang/OTP 中汲取灵感,尤其是其对高可用性系统的崩溃优先方法,以及 Akka。

你还可以看看:

  • lisp-actors: “对 Common Lisp 中 Actor 模型使用的持续研究,它受益于实际应用”。

    • 它是 Emotiq 区块链的一部分(一个已停止的项目)。
    • 进行远程处理,包括一个类似于 Bordeaux-Threads 的线程抽象层库。
    • ! 它缺少单元测试。

⚡️ 事件处理:响应异步事件 ⚡️

  • simple-tasks: 一个非常简单的任务调度框架,采用 zlib 许可证。
  • deeds: Deeds 是一个可扩展的事件传递系统,采用 zlib 许可证。它允许使用复杂的事件过滤系统将事件高效地传递给多个处理程序。
  • cl-flow: 用于非阻塞并发 Common Lisp 的类似数据流的计算树库,采用 MIT 许可证。
  • event-glue: 简单的事件抽象,没有依赖项,采用 MIT 许可证。它可以在任何需要通用事件处理系统的地方使用。

💼 作业处理:管理后台任务 💼

  • SBCL 的计时器: 系统范围的事件调度器。
  • psychiq: Common Lisp 应用程序的基于 redis 的后台作业处理,采用 LLGPL 许可证。灵感来自 Ruby 的 Sidekiq,并与其 Web UI 兼容。
  • cl-cron: 一个提供类似 cron 功能的简单工具,采用 GPL3 许可证。

clerk: 一个类似 cron 的调度器,具有合理的 DSL,采用 MIT 许可证。

🧶 正则表达式和字符串解析:处理文本数据 🧶

Common Lisp 提供了强大的工具来处理文本数据,包括正则表达式和字符串解析库。

🧶 正则表达式:匹配文本模式 🧶

  • cl-ppcre: 可移植的、Perl 兼容的正则表达式,采用 FreeBSD 许可证。
  • one-more-re-nightmare: Common Lisp 中的一个快速正则表达式编译器,采用 BSD_2Clause 许可证。

你还可以看看:

  • rexxparse: 一个受 REXX PARSE 结构启发的字符串解析工具,采用 MIT 许可证。

你还可以看看上面的 clj-re。

📜 脚本:用 Lisp 编写脚本 📜

Common Lisp 不仅可以用于编写大型应用程序,还可以用于编写简单的脚本,自动化你的任务。

🚀 运行脚本:让 Lisp 脚本飞起来 🚀

实现可以使用 --load运行文件,SBCL 有 --script,但启动时间很长,尤其是在加载库时。我们可以做得更好吗?我们总是可以构建一个二进制文件。

  • 👍 Roswell: 一个脚本安装程序和启动器,可以轻松分发 Lisp 脚本和程序,采用 MIT 许可证。

    • 在后台编译一个二进制文件
  • ScriptL: 让 Shell 脚本像 Lisp 一样!或者,为 Shell 进行远程函数调用的实时编码,采用 LLGPL 许可证。在 REPL 中编写一个命令,并在 Shell 中立即运行它。

    • 类似且可能更简单:lserver
  • CIEL: CIEL Is an Extended Lisp 是一个包含数十个用于日常任务(HTTP、JSON、正则表达式……)的库的集合,许可证不清楚。

    • 它还提供了一个二进制文件,可以从源代码运行脚本。使用内置库的脚本可以快速启动,无需编译步骤。
    • 截至 2024 年,处于测试阶段
  • 2024 年新增 kiln: 一个基础设施(管理一个隐藏的 multicall 二进制文件),使 Lisp 脚本编写高效且符合人体工程学,采用 MIT 许可证。

    • Kiln 使编写非常小的脚本变得实用。Kiln 脚本快速且成本低廉,以至于将一小部分 Lisp 功能公开给 Shell 也是有意义的。

🧰 命令行选项解析器:解析命令行参数 🧰

  • 👍 Clingon: 一个功能丰富的命令行选项解析器系统。

    • 它可能具有最丰富的功能集:子命令、生成 bash 补全、支持各种类型的选项(整数、布尔值、计数器、枚举……)、可扩展……
  • Adopt: 一个该死的选项解析库,采用 MIT 许可证。

🧰 Readline、ncurses 和其他图形助手:增强命令行体验 🧰

  • cl-readline: 一组函数,用于在键入行时编辑行,维护以前输入的命令行列表,调用和重新编辑它们,并执行类似 csh 的历史扩展,采用 GPL3 许可证。Emacs 和 vi 编辑模式。
  • Linedit: 类似 Readline 的库,提供可自定义的行编辑功能,采用 MIT 风格许可证。
  • cl-charms: Common Lisp 中 libcurses​ 的接口,采用 MIT 许可证。它通过 CFFI 提供了一个原始的、低级别的 libcurses 接口,以及一个更高级别的 lispier 接口。
  • replic: 将现有代码转换为 readline 应用程序的助手,重点是定义命令参数的补全,采用 MIT 许可证。它还提供了一个随时可用的可执行文件,可以将用户的 lispy 初始化文件转换为 readline 命令。
  • cl-ansi-term: 在 ANSI 兼容的终端上打印彩色文本、水平线、进度条、(无)序列表和表格,采用 GPL3 许可证。
  • cl-progress-bar: 进度条,就像在 Quicklisp 中一样!采用 MIT 许可证。

🐚 Shell 和 Shell 接口:用 Lisp 控制 Shell 🐚

  • Lish: lish​ 有一天可能会成为一个 Lisp Shell,采用 GPL3 许可证。

    • 支持路径中可执行文件和 Lisp 符号的 Tab 补全,允许编写和混合 Shell 命令和 Lisp 代码,有一个微型 REPL 和一个交互式调试器,等等。
  • shcl: Common Lisp 中的一个类似 POSIX 的 Shell,采用 Apache2.0 许可证。

  • Shelly: 像 Shell 命令一样执行 Common Lisp 函数,无需编写命令行参数解析器,采用 FreeBSD 许可证。它还可以用作类似 Make 的构建工具。

  • unix-in-lisp: 将 Unix 系统挂载到 Common Lisp 镜像中。

    • Unix 概念直接/浅层地嵌入到 Lisp 中(Unix 命令变成 Lisp 宏,Unix 文件变成 Lisp 变量,Unix 流变成惰性 Lisp 序列,等等)。

🧰 Lisp Shell 实用程序:增强 Shell 功能 🧰

  • cmd: 用于运行外部程序的实用程序,采用 MIT 许可证。防止 Shell 注入,考虑到多线程程序,支持 Windows。

    • uiop:run-program​(同步)和 uiop:launch-program​(异步)随 ASDF 提供,并在所有现代实现中可用。参见 CL Cookbook:运行外部程序。
  • Clesh: 扩展 Common Lisp 以嵌入 Shell 代码,类似于 perl 的反引号,采用 FreeBSD 许可证。

💻 系统管理:用 Lisp 管理系统 💻

  • Consfigurator: Lisp 声明式配置管理系统,采用 GPL3 许可证。你可以使用它以 root 身份配置主机,以非特权用户身份部署服务,构建和部署容器,以及生成磁盘镜像。

  • cl-unix-cybernetics(以前称为 Adams):Common Lisp 中的 UNIX 系统管理,采用 ISC 许可证。类似于 Ansible、Chef 或 Puppet。

    • 你使用具有属性的资源来描述你的系统(主机)。然后,仅使用远程主机上的 /bin/sh 和控制主机上的 /usr/bin/ssh 来探测和同步属性。

🧰 其他脚本实用程序:扩展你的脚本工具箱 🧰

  • clawk: 嵌入 Common Lisp 的 AWK 实现,用于在文件中搜索行并对其字段执行指定的操作,采用 BSD 风格许可证。
  • lqn: 用于查询和转换 Lisp、JSON 和其他文本文件的查询语言和终端实用程序,采用 MIT 许可证。用 Common Lisp 编写。

🕰️ 已停滞的项目:曾经的辉煌 🕰️

  • WCL [已停滞] - 允许数百个 Lisp 应用程序同时可用,同时允许其中几个并发运行。WCL 通过将 Common Lisp 作为 Unix 共享库提供来实现这一点,该库可以与 Lisp 和 C 代码链接以生成高效的应用程序。例如,规范的 Hello World!​ 程序的 Lisp 版本的可执行文件在 32 位 x86 Linux 上仅需要 20k 字节。WCL 还支持完整的开发环境,包括动态文件加载和调试。使用 GDB 的修改版本来调试 WCL 程序,提供对混合语言调试的支持。

    • 一篇论文:“在 Unix 下交付高效的 Common Lisp 应用程序”。

💻 文本编辑器资源:增强你的 Lisp 开发体验 💻

Common Lisp 社区为各种文本编辑器提供了丰富的插件和工具,帮助你更轻松地编写和调试 Lisp 代码。

🔌 Parinfer:平衡你的括号 🔌

  • Parinfer: 一种编辑 Lisp 代码的方法,可以帮助你保持缩进和括号的平衡。它易于上手,并提供类似 Paredit 的高级功能。它适用于许多编辑器(Emacs、Vim、Neovim、Atom、Sublime Text、Visual Studio Code、LightTable、CodeMirror……)。

💻 Emacs:Lisp 开发者的首选编辑器 💻

  • Slime: Emacs 的高级 Lisp 交互模式;Emacs 内部的一个完整的 Common Lisp 环境,属于公共领域。
  • 👍 Sly: SLY 是 SLIME 的一个分支,包含多项改进,例如 Sly 贴纸。

🧰 Emacs 入门套件:快速搭建 Lisp 开发环境 🧰

  • 👍 Portacle: 一个可移植的、跨平台的 Common Lisp 环境:SBCL、Quicklisp、Emacs、Slime、Git。

  • Emacs4CL: 一个微型的 Emacs 初始化文件,用于快速设置 vanilla Emacs 以进行 Common Lisp 编程。附带对初始化文件中每一行代码的逐行解释。

  • plain-common-lisp: 在 Windows 上获取本机 Common Lisp 环境的简单方法。

    • 包含 SBCL、Quicklisp、Emacs 和 Slime。
    • 包含控制台程序、访问 Win32 API、使用 IUP 显示 GUI、运行 OpenGL 窗口的示例程序。
  • cl-devel2: 一个用于 Common Lisp 开发环境的 Docker 容器。包含 SBCL、CCL、Roswell 和带有 Slime 的 Emacs25。

🧰 Emacs 工具:增强你的 Lisp 开发体验 🧰

  • Quicksearch: 在 GitHub、Quicklisp、Cliki 和 Bitbucket 上搜索项目,采用 MIT 许可证。

🔌 Slime 扩展:让 Slime 更强大 🔌

  • slime-star: 一个预装了扩展的 SLIME 配置,还有一些自定义实用程序和菜单:

    • Lisp 系统浏览器。
    • SLIME doc contrib: 增强默认的帮助缓冲区。
    • Quicklisp systems: 从 Emacs 中搜索、浏览和加载 Quicklisp 系统。
    • Slime breakpoints
    • Slite: FiveAM 的测试运行器。
    • Quicklisp-apropos: 在 Quicklisp 中的库中执行 apropos​ 查询(对符号名称、类、文档……进行全文搜索)。
    • slime-critic: lisp critic 会温和地批评你的代码中的不良模式。

🔌 Sly 扩展:让 Sly 更强大 🔌

  • sly-overlay: Sly 的一个扩展,它允许将 Common Lisp 评估结果直接覆盖到缓冲区中,类似于 CIDER(Clojure)、Eros(Emacs Lisp)和 Lem 编辑器。

💻 Vim & Neovim:Lisp 开发者的另一个选择 💻

  • SLIMV: Vim 的高级 Lisp 交互模式;Vim 内部的一个完整的 Common Lisp 环境,未指定许可证。
  • Vlime: VLIME:Vim plus Lisp Is Mostly Evil。一个用于 Vim(和 Neovim)的 Common Lisp 开发环境,采用 MIT 许可证。
  • quicklisp.nvim: Neovim 的 Quicklisp 前端。
  • Slimv_box: Docker 容器中的 slimv。

💻 Eclipse:Java 开发者的 Lisp 选择 💻

  • Dandelion: Eclipse IDE 的 Common Lisp 插件。

💻 Lem:专为 Lisp 打造的编辑器 💻

  • Lem: 一个随时可用的、类似 Emacs 的、基于 Slime 的编辑器,开箱即用地为 Common Lisp 开发量身定制,以及其他编程语言及其内置的 LSP 客户端,采用 MIT 许可证。它具有 ncurses、Electron 和 SDL2 接口。

    • Lem 2.0(2023 年 5 月发布)添加了 SDL2 前端,从而支持鼠标、图形功能和 Windows 支持,以及其他新功能。
    • 你还可以看看:一个 opengl 前端、Docker 中的 Lem、lem-pareto。
  • 🚀 云端 Lem(视频演示)

    • “Rooms 是一款在云端运行 Lem(一个用 Common Lisp 创建的文本编辑器)的产品,可以供多个用户使用。”
    • 2024 年 4 月新增。

💻 Atom, Pulsar:现代编辑器的 Lisp 支持 💻

  • SLIMA: 允许你以交互方式开发 Common Lisp 代码,将 Atom(或现在的 Pulsar)变成一个非常好的、积极开发的 Lisp IDE,采用 MIT 许可证。

💻 Sublime Text:专有编辑器的 Lisp 支持 💻

  • Sublime Text(专有软件)通过其 SublimeREPL 和 Slyblime 包支持 Common Lisp。Slyblime 是 SLY 的一个实现,它使用相同的后台(SLYNK)。它提供了高级功能,包括带有堆栈帧检查的调试器。

💻 VSCode:微软编辑器的 Lisp 支持 💻

  • commonlisp-vscode: 一个支持语法高亮、自动补全、悬停文档、跳转到定义、编译和加载文件、REPL 的扩展。它在 GitHub 上。

  • alive: VSCode 的 Common Lisp 扩展,属于公共领域。

    • 参见 Cookbook:将 VSCode 与 Alive 一起使用。
  • strict-paredit-vscode: 类似 Emacs 的结构化编辑和导航。

💻 JetBrains:Java 开发者的另一个 Lisp 选择 💻

  • SLT: 一个用于 Itellij/Jetbrains IDE 系列的 IDE 插件,通过 SBCL 和 Slime/Swank 实现对 Common Lisp 的支持。

    • 🎉 NEW! 于 2023 年 1 月发布。

💻 Geany (实验性):轻量级编辑器的 Lisp 支持 💻

  • Geany-lisp: Geany 编辑器的一个实验性 Lisp 模式。

💻 笔记本:交互式 Lisp 开发 💻

  • common-lisp-jupyter: 一个用于 Jupyter 的 Common Lisp 内核,以及一个用于构建 Jupyter 内核的库,采用 MIT 许可证。它基于 Robert Dodier 的 Maxima-Jupyter,而 Maxima-Jupyter 又基于 Frederic Peschanski 的 cl-jupyter。

    • jupyterlab-debugger-restarts: JupyterLab 调试器的重启功能。
    • Cytoscape widget: common-lisp-jupyter 的 Cytoscape.js 部件。
    • Kekule widget: common-lisp-jupyter 的 Kekule.js 部件。
    • molecule viewer: 一个使用 ngl 的 JupyterLab 分子查看器。
    • ngl widget: common-lisp-jupyter 的 ngl 部件(蛋白质查看器)。
    • sheet widget: common-lisp-jupyter 的数据网格部件。
  • cl-jupyter: 一个用于 Jupyter 笔记本的 Common Lisp 内核,采用自定义许可证。

  • Darkmatter: 一个类似笔记本的 Common Lisp 环境,采用 MIT 许可证。

💻 REPL:交互式 Lisp 环境 💻

  • cl-repl: 一个类似 ipython 的 REPL,采用 GPL3 许可证。具有补全、Shell 命令、魔法命令、调试器等功能。带有颜色主题。

    • 2024 年新增:它现在提供多行输入和二进制版本。只需下载一个二进制文件(目前只有 Ubuntu)并运行它即可。
  • sbcli: SBCL 的 readline REPL,采用 GPL3 许可证。具有补全、快速命令、可选的语法高亮(使用 pygments),但没有交互式调试器。

  • magic-ed: 一个微型的编辑工具,采用 MIT 许可证。当使用完整的 IDE 太过分时,你可以直接从 REPL 中加载、编辑、操作和评估文件或文件内容。

🌐 在线编辑器:在浏览器中编写 Lisp 代码 🌐

  • Judge0 IDE: 一个支持 Common Lisp (SBCL) 的在线编辑器,采用 MIT 许可证。
  • Riju: 一个“每个编程语言的快速在线游乐场”,支持 Common Lisp (SBCL)。

📱 应用程序:在移动设备上编写 Lisp 代码 📱

  • CodePlayground: 一个 iPhone 和 iPad 应用程序,通过 CCL 支持 Lisp。

📄 文本和二进制解析器:处理结构化数据 📄

Common Lisp 提供了多种工具来解析文本和二进制数据,将它们转换为 Lisp 对象。

  • esrap: Packrat 解析器,采用 Expat 许可证。

  • alexa: 一个词法分析器生成器,采用 BSD_3Clause 许可证。

    • ALEXA 是一个类似于 lex 或 flex 的工具,用于生成词法分析器。但是,与 lex 等工具不同,ALEXA 在你的 Lisp 程序中定义了一个领域特定语言,因此你无需调用单独的工具。
  • cl-yacc: 一个 LALR(1) 解析器生成器,采用 MIT 许可证。

  • cl-shlex: 用于类似 Shell 语法的简单词法分析器,采用 MIT 许可证。

  • smug: Common Lisp 的解析器组合器,采用 MIT 许可证。SMUG 使创建快速可扩展的递归下降解析器变得简单,无需使用奇怪的语法或难以理解的宏。

  • parseq: 一个使用解析表达式语法解析序列(例如字符串和列表)的库,采用 GPL2 许可证。灵感来自 Esrap。

  • lisp-binary: 一个用于轻松读写复杂二进制格式的库,采用 GPL3 许可证。

  • uclp: Common Lisp 中解析表达式语法(PEG,类似于 Janet)的实验性实现,采用 MIT 许可证。

你还可以看看:

  • texp: 一个用于生成 TeX 的 DSL,采用 AGPL-3.0 许可证。

📝 文本处理:处理文本数据 📝

Common Lisp 提供了丰富的工具来处理文本数据,包括全文索引、字符串度量、语言检测等。

  • montezuma: Common Lisp 的全文索引和搜索,采用 Expat 许可证。
  • mk-string-metrics: 在 Common Lisp 中高效地计算各种字符串度量(Damerau-Levenshtein、Hamming、Jaro、Jaro-Winkler、Levenshtein 等),采用 MIT 许可证。
  • wiki-lang-detect: 使用 Wikipedia 数据进行文本语言识别

,未指定许可证。

  • cl-phonetic: Common Lisp 的语音模式匹配库(旨在取代 Python 的 Sylvia 库),采用 MIT 许可证。
  • cl-string-generator: 从正则表达式生成字符串,采用 MIT 许可证。
  • trivial-sanitize: 清理 HTML 字符串:"<a>foo</a>"​ → "foo"​,采用 LLGPL 许可证。

你还可以看看:

  • Resolve: 一个用于基于 AST 的差异计算、显示和自动解决的软件。用 C++ 和 CL 编写,你会发现 Lisp 实用程序。

🛠️ 工具:让 Lisp 开发更轻松 🛠️

除了库之外,Common Lisp 社区还开发了许多工具,让你的 Lisp 开发体验更轻松、更高效。

  • quicksearch: 从 REPL 中查找在线库,采用 Expat 许可证。
  • lake: 一个类似 GNU make 的构建实用程序,采用 MIT 许可证。

🧪 单元测试:确保你的代码质量 🧪

单元测试是软件开发中不可或缺的一部分,它可以帮助你确保代码的正确性,并防止回归错误。

🧪 测试框架:构建测试套件的基础 🧪

  • FiveAM: 简单的回归测试框架,采用 FreeBSD 许可证。

    • fiveam-matchers: 一个用于 fiveam 的可扩展、可组合的匹配器库,采用 Apache2.0 许可证。
  • CLUnit2: 一个单元测试库,采用 MIT 许可证。

  • Parachute: 一个可扩展的、跨兼容的测试框架,采用 zlib 许可证。具有测试依赖项、条件、夹具和重启功能。

  • Mockingbird: 一个用于 Common Lisp 的小型存根和模拟库,采用 MIT 许可证。还可以检查存根函数是否被调用、调用次数和参数。

  • cl-mock: 另一个模拟库。它比 Mockingbird 具有更多功能,例如模拟调用上的模式匹配等。

  • Check-it: 一个 QuickCheck 风格的随机属性 based 测试,采用 LLGPL 许可证。

  • cl-coveralls: 一个帮助将测试覆盖率发布到 Coveralls 的库,采用 FreeBSD 许可证。参见 SBCL 的代码覆盖率工具。

  • CheckL: 为什么用 Common Lisp 编写程序,但测试像 Java 一样?来认识一下 CheckL!

    • 一个测试库,它将当前测试值与前一个测试值进行比较,并提供重启。

🧰 其他测试工具:增强你的测试体验 🧰

  • testieren: 一个测试实用程序,其中测试包含在 defun/t​ 形式的顶部,采用 GPL3 许可证。当你在交互式地重新编译你的函数时,它们会被运行。支持模拟和存根。
  • cl-hamcrest: 一组 Hamcrest 匹配器,可以组合起来创建灵活的意图表达式,采用 BSD_3Clause 许可证。通过使用 has-plist-entries​、has-slots​、has-length​、contains​、contains-in-any-order​、has-all​… 等断言,帮助使你的单元测试更具可读性。

🧰 编辑器测试实用程序:在编辑器中运行测试 🧰

  • Slite: 一个基于 SLIme 的 FiveAM 测试运行器,采用 Apache2.0 许可证。

    • Slite 以交互方式运行你的 Common Lisp 测试(在撰写本文时,仅支持 FiveAM)。它允许你查看测试失败的摘要,跳转到测试定义,使用调试器重新运行测试,所有这些都可以在 Emacs 中完成。

更多信息:Sabra Crolleton 对测试框架的广泛比较。

🧰 实用程序:让 Lisp 开发更便捷 🧰

Common Lisp 社区开发了许多实用程序,让你的 Lisp 开发体验更轻松、更高效。

🗄️ 缓存:加速你的程序 🗄️

  • clache: 通用缓存工具,采用 LLGPL 许可证。在磁盘或内存中缓存任何 Lisp 对象。缓存可以是持久的,也可以有过期时间。
  • function-cache: 一个 Common Lisp 函数缓存/记忆库,采用 BSD 许可证。

🗜️ 压缩/解压缩:处理压缩数据 🗜️

  • chipz: 一个解压缩库,采用 3-clause BSD 许可证。

  • Salza2: 一个用于创建压缩数据的库,采用 FreeBSD 许可证。

  • zippy: 一个基于 3bz 的 ZIP 存档格式库,采用 zlib 许可证。

  • archive: 一个用于读写存档(tar、cpio)文件的库,采用 BSD_3Clause 许可证。tar​ 程序的纯 Common Lisp 替代品。

    • 参见它最近的分支 cl-tar (2021 年)。公告

⚙️ 配置:管理你的程序设置 ⚙️

  • 👍 py-configparser: 读写 Python 的 ConfigParser 风格的配置文件,采用 MIT 许可证。
  • envy: 配置切换器,采用 FreeBSD 许可证。
  • chameleon: 一个配置管理库,附带配置文件支持,采用 MIT 许可证。

📄 CSV:处理 CSV 数据 📄

  • cl-csv: 一个用于解析 CSV 文件的库,采用 3-clause BSD 许可证。
  • cl-decimals: 十进制数解析器和格式化程序,属于公共领域。
  • auto-text: 文本文件的自动(编码、行尾、列宽、csv 分隔符等)检测,采用 MIT 许可证。你还可以看看 inquisitor,它可以检测亚洲和远东语言。
  • csv-validator: 使用预定义的验证来验证表格 CSV 数据,灵感来自其 Python 同系物“Great Expectations”,采用 BSD_3Clause 许可证。

📅 日期和时间:处理日期和时间数据 📅

  • local-time: 一个用于以半标准方式操作日期和时间信息的开发库,采用 3-clause BSD 许可证。

  • fuzzy-dates: 一个用于模糊解析日期和时间字符串的库,采用 zlib 许可证。

  • cl-date-time-parser: 自由地解析日期时间字符串,采用 MIT 许可证。它隐藏了日期时间格式之间的差异,并允许将日期和时间作为一种日期时间格式进行管理。

  • chronicity: 一个自然语言日期和时间解析器,用于解析“从现在起 3 天”之类的字符串,采用 BSD_3Clause 许可证。

  • local-time-duration: 构建在 local-time 之上的持续时间处理库,采用 MIT 许可证。

    • 参见这个分支:humanize-duration,它只输出持续时间对象的显著部分。支持本地化。
  • iso-8601-date: Common Lisp 中的各种日期例程,围绕 ISO 8601 字符串表示形式构建,采用 LLGPL 许可证。

  • calendar-times: 一个在 LOCAL-TIME 库之上实现的日历时间库,采用 MIT 许可证。它具有时区日历时间和计算功能。

    • 你还可以看看:calendar-date,一个格里高利历日期库。
  • periods: 在更高级别上操作日期/时间对象,采用 BSD_3Clause 许可证。具有与 series 兼容的数据结构。

    • 带有一些文档。
  • stopclock: 一个使用(停止)时钟测量时间的库,采用 Apache2.0 许可证。它允许你创建一个时钟,暂停它,恢复它并改变它的速度。

你还可以看看 Edward M. Reingold 和 Nachum Dershowitz 撰写的《日历计算》一书,由剑桥出版社出版。它提供了 Lisp 源代码。

✅ 数据验证:确保数据的有效性 ✅

  • ratify: 一组用于批准、验证和解析输入的实用程序,采用 zlib 许可证。
  • clavier: Common Lisp 的通用验证库,采用 MIT 许可证。
  • json-schema: 一个用于根据 JSON Schema 标准的草案 4、6、7 和 2019-09 的模式验证数据的库,采用 LLGPL 许可证。
  • sanity-clause: Common Lisp 的数据序列化/合同库,采用 LLGPL 许可证。模式可以是属性列表或基于类的,允许在 make-instance​ 期间检查槽的类型。
  • cl-semver: 语义版本控制规范的实现,采用 MIT 许可证。

🧰 开发者实用程序:让开发更轻松 🧰

  • repl-utilities: 简化 REPL 中的常见任务(打印文档、打印外部符号、在加载包时调用钩子……),采用 BSD_2Clause 许可证。
  • flight-recorder: 一个健壮的 REPL 历史记录工具。
  • tracer: Common Lisp 的跟踪分析器,其输出适合在 Chrome/Chromium 的跟踪查看器中显示,采用 MIT 许可证。
  • cl-flamegraph: SBCL 统计分析器的包装器,用于为 Common Lisp 程序生成 FlameGraph 图表,采用 BSD 许可证。
  • cl-debug: 一个跨包调试工具,采用 ISC 许可证。提供一种统一的方式来启用或禁用特定于调试的代码。可以相对于由符号或关键字表示的程序功能启用或禁用调试代码。
  • supertrace: 用于调试/分析的卓越 Common Lisp trace​ 功能,采用 BSD_2Clause 许可证。一次跟踪多个函数,使用前后钩子。
  • printv: 一个包含电池的跟踪和调试日志记录宏,采用 Apache2 许可证。
  • journal: 一个用于日志记录、跟踪、记录和重放测试以及持久化的库,采用 MIT 许可证。

🧰 其他开发者实用程序:扩展你的工具箱 🧰

  • GTFL: 一个用于 Lisp 的图形终端,适用于想要调试或可视化自己算法的 Lisp 程序员,采用 BSD 风格许可证。浏览器中的图形跟踪。

  • trivial-benchmark: 微型基准测试库,采用 zlib 许可证。

    • 一个类似的宏 (benchmark​) 是 trivial-time 的一部分,它为更多实现(ABCL、Allegro、CCL、CLISP、ECL)提供支持。
    • 事实上,大多数 trivial-benchmark 的指标只在 SBCL 上实现。在其他实现上,它测量实际时间和用户空间时间(而不是分配的字节数(它为 ECL 测量)、系统运行时间或 GC 运行时间)。
  • glyphs: 一个用于减少 Common Lisp 在某些地方的冗长的库,采用 GNU GPL3 许可证。

  • Lisp REPL 核心转储器: 一个用于按需生成 Lisp 核心的可移植包装器,以快速启动 REPL,采用 GPL3 许可证。它可以预加载提供的系统,以帮助构建专门的 Lisp 核心集合。

📚 文档构建器:生成漂亮的文档 📚

  • Staple: 一个使用 HTML 模板生成文档页面的工具,采用 zlib 许可证。使用现有的 README,添加文档字符串、交叉引用和指向 CLHS 的链接。

  • mgl-pax: 探索性编程环境和文档生成器,采用 MIT 许可证。可以实现与文学编程类似的效果,但文档是从代码生成的,而不是反过来。代码优先,代码必须看起来漂亮,文档就是代码。

    • 参见这个 40ants/doc 分支:一个更轻的核心系统、一个 JavaScript 搜索索引、多格式输出、HTML 主题、Changelog 的 RSS 和 Atom 提要等等。
  • sphinxcontrib-cldomain: 扩展 Sphinx 以涵盖 Common Lisp,采用 GPL3 许可证。以与 sphinx 构建 Python 项目文档相同的轻松方式构建文档。

    • 交叉引用、指向 CLHS 的链接、符号索引、搜索以及所有 Sphinx 功能。
  • Codex: 一个用于 Common Lisp 的漂亮文档系统,采用 MIT 许可证。

  • QBook: 生成 Common Lisp 源文件的 HTML(或 LaTeX)格式的代码列表,采用 BSD_3Clause 许可证。

    • 所有以 4 个 ;​ (";;;;") 开头的注释都被解释为文档。使用标题和指令增强文档。
    • QBook 充当“一个轻量级的文学编程系统,其中 Lisp 代码不是内联呈现的,而是在单独的部分中呈现的,这使得文档更易于浏览。” @mmontone
  • Declt: Common Lisp 库的参考手册生成器,采用 BSD 许可证。构建一个 texinfo 文档,可以进一步处理成各种格式,例如 HTML 或 PDF。

  • cl-bibtex: Common Lisp 中 BibTeX 程序的兼容重新实现,带有一个 BST 到 CL 编译器,采用 GNU LGPL2.1 许可证。

🧰 其他文档工具:增强你的文档体验 🧰

  • docbrowser: 一个服务器,它为加载的系统动态生成文档。

    • 它的主页显示了你的 Lisp 镜像中所有加载的系统的列表。单击一个系统,你将获得一个包含三个窗格的页面:函数、类和变量。单击一个函数以查看其源代码,在上下文中,带有行号。单击类以查看其槽和专用函数。
  • cl-livedocs: 类似且更新,基于 Webinfo,默认启用全文搜索。

一篇包含更多文档生成器的概述博客文章:https://lisp-journey.gitlab.io/blog/overview-of-documentation-generators/,以及一个包含评论和演示的专门网站:https://cl-doc-systems.github.io/

你可能还会喜欢:文学编程系统。

📁 文件和目录:处理文件系统 📁

  • uiop 及其 pathname​ 包(取代 cl-fad)。uiop 是 ASDF3 的一部分,因此包含在许多实现中,采用 MIT 许可证。

  • osicat: 类 POSIX 系统上的轻量级操作系统接口(目录迭代和删除、环境变量、文件权限等),采用 Expat 许可证。

  • pathname-utils: 一组用于帮助路径名操作的实用程序,采用 zlib 许可证。

    • filesystem-utils: 处理文件系统的常见问题,例如列出文件、探测文件类型、确定默认目录等。
    • 没有依赖项,不访问文件系统。
    • file-attributes: 访问常见文件属性(uid、gid、权限、ctime、mtime、atime)。
  • filepaths: Common Lisp 的现代且一致的文件路径操作,采用 LGPL3 许可证。

    • 没有依赖项,不访问文件系统。
  • ppath: Common Lisp 中 Python 的 os.path 模块的实现,采用 BSD 许可证。

  • mmap: 可移植的 mmap 文件内存映射实用程序库,采用 zlib 许可证。

  • fof: 文件对象查找器 Common Lisp 库,采用 GPL3 许可证。启用快速文件搜索、检查和操作。

  • nfiles: 文件持久性、监视、数据同步、(每个用户配置文件)路径解析和结构化数据检索,采用 BSD 许可证。具有预定义的类,用于配置文件、远程获取的文件、数据文件、Lisp 可读文件和许多其他文件。

📁 文件监视库:监视文件更改 📁

  • file-notify: 一个用于文件更改检测的跨平台库,采用 zlib 许可证。

🧰 Git:与 Git 交互 🧰

  • cl-git: libgit2 库的 CFFI 接口,采用 LGPL3 许可证。
  • legit: Git 二进制文件的接口,采用 zlib 许可证。
  • git-api: 用于访问 git 仓库的 Common Lisp 库,采用 BSD 许可证。它不需要安装 git 或 libgit。

🌐 i18n:国际化和本地化 🌐

  • cl-i18n: 一个 i18n 库,采用 LLGPL 许可证。从 GNU gettext 文本或二进制文件或其本机格式加载翻译。复数形式的本地化助手。
  • gettext: gettext 运行时到 Common Lisp 的一个端口,采用 GPL3 许可证。
  • translate: 无缝语言本地化,采用 LLGPL 许可证。
  • enchant: Enchant 拼写检查器库的绑定,属于公共领域。
  • oxenfurt: 牛津词典 API 的客户端库,采用 zlib 许可证。
  • language-codes: ISO 语言代码的数据库库,采用 zlib 许可证。
  • system-locale: 一个用于检索用户首选语言的库,以便你的应用程序可以选择合理的默认值,采用 zlib 许可证。
  • multilang-documentation: 允许以多种语言编写文档字符串,用于真正国际化的文档库,采用 zlib 许可证。

🧹 代码检查和格式化:保持代码风格一致 🧹

  • sblint: 使用 SBCL 的 Common Lisp 源代码检查器,适合 Reviewdog(幻灯片),采用 BSD_2Clause 许可证。
  • trivial-formatter: Common Lisp 的代码格式化程序,采用 MIT 许可证。

你还可以看看:lisp-formatcl-indentify

✍️ 文学编程:将代码和文档融合 ✍️

  • literate-lisp: 从 Emacs 的 Org 文件中加载 Common Lisp 代码块,采用 MIT 许可证。
  • erudite: 考虑到交互式开发而构建的文学编程系统,采用 MIT 许可证。
  • papyrus: Papyrus 使用 Common Lisp 的读取器宏使你的 markdown 可执行,采用 MIT 许可证。

📝 日志

记录:记录程序的运行情况 📝

日志记录是软件开发中不可或缺的一部分,它可以帮助你跟踪程序的运行情况,诊断问题,并收集数据。

📝 日志库:记录程序信息的利器 📝

  • log4cl: 一个以 Log4J 为模型的日志框架,采用 Apache2.0 许可证。与 Slime 高度集成。

    • log4cl-json: JSON appender 扩展,采用 BSD 许可证。
  • verbose: 一个快速且高度可配置的日志框架,采用 zlib 许可证。

  • a-cl-logger: 一个日志库,提供上下文敏感的日志记录,不仅可以记录字符串,还可以记录到本地文件或输出流以外的地方,采用 BSD 许可证。功能包括 logstash 支持、json 支持、记录器层次结构、上下文敏感的日志记录、将对象打印为可检查的表示形式……

🔌 第三方日志服务:将日志发送到云端 🔌

  • cl-fluent-logger: 一个用于 Fluentd 的 Common Lisp 结构化记录器。

你还可以看看:对日志库的广泛比较。

🧰 宏助手:简化宏编写 🧰

  • easy-macros: 一种轻松编写 90% 宏的方法,采用 Apache2.0 许可证。
  • trivial-with-current-source-from: 帮助宏编写者为宏用户生成更好的错误,采用 GPL3 许可证。

📄 Markdown:处理 Markdown 文档 📄

  • 3bmd: 一个 markdown 到 html 转换器,采用 MIT 许可证。

📄 PDF:生成 PDF 文档 📄

  • cl-typesettingcl-pdf: 用于生成 PDF 文件的跨平台 Common Lisp 库,采用 FreeBSD 许可证。
  • cl-pslib: 一个(薄)包装器,用于围绕 pslib 库生成 PostScript 文件,采用 LLGPL 许可证。还有 cl-pslib-barcode

📈 绘图:可视化你的数据 📈

  • vgplot: 一个与 gnuplot 绘图实用程序的接口,旨在模仿 octave 或 matlab 的一些绘图命令,采用 GPL3 许可证。
  • eazy-gnuplot: 一个 lispy 的、无结构的 Gnuplot 库,采用 LLGPL 许可证。带有它的 cookbook。
  • kai: 一个用于 Common Lisp 的高级绘图库,采用 MIT 许可证。Plotly JS 库的包装器。
  • ADW-Charting: 一个完全用 Common Lisp 编写的简单图表绘制库,采用类似 BSD 的许可证。它还包括一个 Google 图表服务的后台。

📈 文本绘图:用文本绘制图表 📈

  • cl-text-plot: 在 Common Lisp 中使用文本进行绘图,未指定许可证。
  • cl-spark: 控制台的 sparkline 字符串:(spark '(1 1 2 3 5 8))​ => " ▂▃▅▇",采用 MIT 许可证。

你还可以看看 IUP 和 ltk-plotchart(GUI 部分)的图表功能。

🏗️ 项目骨架:快速启动你的项目 🏗️

  • cl-project: 通用的现代项目骨架,采用 LLGPL 许可证。

  • cl-project-with-docs: 使用 Sphinx 和 reStructured text 呈现美观易读的 HTML 文档,采用 BSD 许可证。

  • cl-cookieproject: 生成一个随时可用的 Common Lisp 项目,不在 Quicklisp 中,采用 BSD_3Clause 许可证。

    • 测试定义、从源代码运行的入口点、构建二进制文件、Roswell 集成……

🔐 安全:保护你的程序 🔐

  • cl-isolated: Common Lisp 代码评估的受限环境,采用 AGPL-3.0 许可证。
  • secret-values: 一个 Common Lisp 库,用于降低意外泄露密码等秘密值的风险。

💻 系统接口:与操作系统交互 💻

  • machine-state: 检索有关 CPU 时间、内存使用情况、线程处理时间等的机器状态信息。

📄 XML:处理 XML 数据 📄

  • CXML: XML 解析器和序列化器,带有一系列扩展库,采用 LLGPL 许可证。

    • 👍 有一个增量解析器,允许解析大文件。
    • 参见 FXML 分支,它包含修复和新功能。如果你正在解析可能格式错误或恶意的 XML,或者你需要使用带有命名空间的 Klacks,则应该使用它。
  • Plump: 一个宽松的 XML 解析器,采用 zlib 许可证。

  • xpath主页):XML 路径语言 (XPath) 1.0 版的实现,采用 BSD_2Clause 许可证。

  • s-xml: 一个基本解析器,采用 LLGPL 许可证。

  • xmls: 一个小型、简单、非验证的 XML 解析器,采用 3-clause BSD 许可证。

  • cl-feedparser: 一个 Common Lisp (RSS、Atom) 提要解析器,采用 LLGPL 许可证。

  • Buildnode: 一个 Common Lisp 库,用于简化与 CXML-dom 的交互,例如构建 Excel 电子表格,采用 BSD 许可证。

🧰 读取 Excel 文件:处理 Excel 数据 🧰

  • lisp-xl: Common Lisp Microsoft XLSX (Microsoft Excel) 加载器,用于任意大小/大尺寸文件,采用 MIT 许可证。
  • xlsx: 一个基本的 Excel 文件读取器。

🧰 其他实用程序:扩展你的工具箱 🧰

  • babel: 一个字符集编码/解码库,采用 Expat 许可证。
  • corona: 从 Common Lisp 中创建和管理虚拟机,采用 MIT 许可证。http://eudoxia.me/corona
  • fast-io: 快速八位字节向量/流 I/O,采用 3-clause BSD 许可证。
  • named-readtables: 提供一个读取表命名空间,类似于包命名空间,采用 3-clause BSD 许可证。
  • simple-currency: 一个使用欧洲央行发布的每日信息的货币转换库,采用 FreeBSD 许可证。
  • trivial-garbage: 一个可移植的终结器、弱哈希表和弱指针 API,属于公共领域。
  • trivial-utf8: 一个用于进行基于 UTF-8 的 I/O 的小型库,采用 BSD 许可证。

🤝 贡献:让这份宝藏地图更完整 🤝

这份 Common Lisp 的宝藏地图还在不断完善中,欢迎你贡献自己的力量,让它更加完整和实用!

你可以提交一个 pull request 或创建一个 issue 来添加新的框架、库或软件到列表中。

我们(尝试)遵循的规则如下:

  • 默认情况下,将库添加到其部分的末尾。
  • 绝对事实上的库,如 BordeauxThreads 或 Quicklisp,应该用 ⭐ (Unicode 代码 U+2B50) 表示。
  • 两个范围非常相似的库应该并排放置,或者放在它们自己的部分中。
  • 根据你的经验和库文档的状态进行一些整理。我们打算列出所有现有的 CL 库(参见 Cliki)也不打算列出所有“流行”的库(参见 Quicklisp 统计数据)。
  • 因此,我们最喜欢的库用 👍 (1F44D​ unicode 字符) 标记。你还可以看看引言中对符号的解释。

🎉 结语:开启你的 Lisp 之旅 🎉

这份 Common Lisp 的宝藏地图只是你 Lisp 之旅的起点,还有更多的宝藏等待你去发现!

希望这份地图能够帮助你找到你需要的工具,构建出令人惊叹的 Lisp 应用程序!

参考文献

  • Lisp
    21 引用 • 13 回帖 • 1 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...