Steel Bank Common Lisp 版本 2.6.7

Steel Bank Common Lisp 2.6.7 引入了值得注意的性能导向特性,例如在 ARM64 上扩展的 SIMD 支持以及 x86-64 上的 AVX-512 支持,引发了关于 SBCL 中显式向量操作如何工作的技术探讨。评论者权衡了 Common Lisp 当下的实用性,对比其优势——交互式开发、基于镜像的部署、高性能,以及在 Hacker News 等真实系统中的使用——与其在生态、并发能力方面的缺口,以及作为小众或“业余”语言的印象。讨论还涉及工具和可移植性细节,包括 SBCL 在 Windows 上的成熟度、内存 arena 分配特性,以及与 Elixir、Clojure 和 Smalltalk 风格镜像工作流等生态的比较。

SIMD、AVX-512 和性能特性

  • 新版本增加了对 ARM64 的 SIMD contrib 支持,以及 x86-64 后端对 AVX-512 的支持。
  • SIMD 是显式的,不是自动向量化:用户使用 SIMD 类型和操作(类似于 C intrinsics),它们会编译为特定指令(例如向量加法和加载)。
  • 示例模式:构造 SIMD pack,并使用支持 SIMD 的访问器在数组上循环;编译后的代码是围绕向量指令的紧凑循环。
  • 目前 AVX-512 只在编译器层面提供支持;在 sb-simd 增加更高层绑定之前,终端用户需要定义自定义 VOP 来调用特定的 AVX-512 指令。
  • 一些评论者对这种新的 ISA 支持用于高性能业余项目感到非常兴奋。

Common Lisp 适合什么、不适合什么

  • 被认为特别适合的场景:CLI/TUI 工具和桌面 GUI,只要几十毫秒的启动时间可以接受,并且交互式开发很有价值。
  • Web 服务被认为不太适合:CL 实现通常只提供 OS 线程和 promises;缺少一等公民的轻量级并发,使得“10k 连接”这类后端相比 Elixir/BEAM 等平台没那么舒服。
  • 游戏引擎和计算密集型应用被认为是可行的,尤其是结合 SBCL 的性能和良好的 FFI。
  • 有人认为 CL 最适合作为扩展/嵌入式语言(例如通过 ECL)以及个人工具;也有人表示自己在职业环境中使用 CL,包括大型公司和复杂领域。

生态、“无聊技术”和 Lisp 的角色

  • 一种观点认为:Lisp(以及类似的 Haskell)大多仍是业余爱好者的利基领域;宏、反射和 DSL 鼓励碎片化,并损害团队规模下的可维护性。工作中更偏好“简单而无聊”的技术栈。
  • 反方观点认为:现代 Lisp 的使用(Common Lisp、Clojure、Emacs Lisp 等)在某些利基领域中是实用且广泛的;宏会被审慎使用,团队会收敛到内部库,而不会陷入混乱。
  • 争论的核心在于:表达力强、可高度定制的语言与标准化、低摩擦的生态之间的权衡。

内存 arena 和底层控制

  • 有人提到 SBCL 的内存 arena 很强大,但文档不足:用户可以创建 arena,并使用提供的函数/宏重定向分配。
  • 也有人担心它与 GC 的交互、跨线程共享,以及正确使用 arena 的销毁/回卷以避免泄漏或悬空引用;大家希望有更清晰的官方文档。

实现、可移植性和工具

  • SBCL 现在在 Windows 上运行良好;另一个 CL 实现则以更快的编译速度著称,但优化较少、维护也较弱。
  • 多种实现被认为很有价值,因为它们能暴露可移植性问题。
  • SBCL 可以构建包含嵌入镜像的单一可执行文件;动态 C 库依赖仍然是部署时需要考虑的问题。
  • SB-MANUAL(通过文档字符串和编辑器集成提供的手册)被强调为一项可用性改进。