从 Common Lisp 中使用 Zig

主要观点:作者上周开始玩自己的玩具键值存储,在后续步骤中考虑调用 C 代码,进而尝试了 Zig。介绍了在 Zig 中定义结构体、构造函数、析构函数和函数,将其编译为库,在 Common Lisp 中加载库并定义相关函数,最后通过代码验证调用成功,但发现更改结构体字段顺序后会出错,经他人告知是 Zig 默重新排序结构体字段导致内存对齐问题,标记为 extern 可解决。

关键信息:

  • 介绍了玩具键值存储的相关进展及后续考虑。
  • 给出 Zig 中结构体及相关函数的代码示例。
  • 阐述在 Common Lisp 中加载 Zig 库及使用相关函数的过程。
  • 提及更改结构体字段顺序后出现的错误及原因。

重要细节:

  • Zig 编译库的命令为$ zig build-lib -dynamic --library c main.zig
  • 在 Common Lisp 中加载库的代码为(cffi:load-foreign-library "~/projects/lisp/experiments/libmain.so")
  • 定义结构体和函数的 Common Lisp 代码片段。
  • 出现错误时的提示信息及错误类型为Unhandled memory fault at #xC8000000C8. [Condition of type SB-SYS:MEMORY-FAULT-ERROR]
阅读 7
0 条评论