国外一款使用 Lisp 开发的开源 2D 开放世界游戏在 Steam 上正式发售了

前几个月在考古 CL 的游戏引擎时,无意间发现了 Kandria 这款从引擎到逻辑均使用 Common Lisp 编写的游戏,前几天也是在 Reddit 上得知游戏正式发售的消息。需要说明的是,本人并不怎么玩游戏,也不怎么关注游戏新闻,但这位独立游戏开发者以及游戏体现的一些技术还是颇具独特之处的,因为开发这款游戏使用到的包括引擎、图形界面、音频处理在内的外围库都是作者一个人从零使用 CL 编写的,并且基本以 Zlib 协议开源,可以单独用于其他的项目,凭一己之力极大地丰富了 CL 的生态(虽然与其他语言相比还是少得可怜)。这里简单地列举一些这款游戏的技术亮点:

  • 使用 CL 实现的 2D 游戏引擎 ,使用 CFFI 访问 GLFW 与 OpenGL 图形接口。
  • 使用 CL 实现的 Immediate Mode GUI 框架 ,可使用多种图形 API 作为渲染后端。
  • 使用 CL 实现的实时音频处理框架,底层基于作者自己用纯 C 实现并绑定到 CL 的混音器
  • 使用 CL 实现的跨平台库用于访问游戏控制器,使用 CFFI 访问不同操作系统下提供的接口。
  • 使用 CL 实现的矩阵运算库,似乎带有 SIMD 加速。
  • 游戏数据、配置文件等均使用 Lisp 作为数据载体,秉承了 Lisp 代码即数据的思想(对应于 Emacs 里的 lisp-data-mode )。

基本游戏(引擎)开发涉及的外围模块,这位作者能用 CL 的都用 CL 实现了一遍,值得一提的是这位作者也是 CL 里众多实现间可移植库的作者,还编写了我个人十分喜欢的单元测试应用部署的框架,并且自己维护了一套 Quicklisp 发行版 ,总是基本是一人提供一套基于 CL 的应用/游戏开发全家桶。游戏的官网与 Github 仓库放在这,感兴趣的朋友可以支持一下。

12 个赞

看起来不错,操控也有点celeste的感觉,考虑支持一下

Common Lisp 相比 Racket 有哪些优点?

语言标准、性能、多范式、多实现、交互式编程、生态。具体优劣可以单独写一篇文章来讲了。

就racket那扶不上墙的性能,emm。哪怕原版 chez 性能都没 SBCL 好,racket 就更慢了

换了 Chez 后已经好了不少了,平均半个 SBCL 的性能,官方实现的性能还可以的正则表达式库是加分项,不过 Chez 开源后也没有什么实质性的优化与更新确实是比较遗憾的。

1 个赞