主要观点:作者上周开始玩自己的玩具键值存储,在后续步骤中考虑调用 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]
。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。