Hasty Briefsbeta

双语

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依赖,并能轻松扩展新语言绑定。