Transforming a Clojure Database into a Library with GraalVM Native Image and FFI
3 months ago
- #Polyglot Programming
- #GraalVM
- #Database
- ChronDB最初是一个基于服务器的时间旅行键值数据库,以Git作为存储引擎。
- 由于需要将ChronDB嵌入Rust二进制文件,探索了GraalVM原生镜像和FFI以实现多语言兼容性。
- 架构分为五层:语言绑定层、C API层、Java桥接层、Clojure桥接层和ChronDB核心层。
- 句柄注册模式通过整型句柄实现清晰的FFI边界跨越,避免了指针的复杂性。
- GraalVM原生镜像要求Java层使用@CEntryPoint注解来标记C可调用函数。
- 构建流程包括创建uberjar、用SVM类路径编译Java代码,最终生成共享库。
- Python绑定使用ctypes直接调用C库,管理GraalVM隔离生命周期和字符串编码。
- Rust绑定利用bindgen生成FFI声明,强调所有权和RAII机制确保资源安全。
- 数据流通过各层时以JSON作为交换格式,保证跨语言行为一致性。
- 该架构实现了单一数据源、无运行时JVM依赖,并能轻松扩展新语言绑定。