4 个版本 (2 个重大更新)

使用旧的 Rust 2015

0.4.0 2019年1月16日
0.3.0 2018年9月12日
0.2.1 2018年8月23日
0.2.0 2018年8月23日

#2308 in 数据库接口

每月下载 23

MIT 协议

30KB
625

rkdb

kdb+ 对 Rust 的绑定。最初是从 adwhit 的 Krust cargo 包分叉而来,并在很大程度上基于 robsmith11

Circle CI Latest version License

这些绑定使得 Rust 能够在 Q 中使用,以添加额外的功能。更普遍地说,它们还允许 Rust 以内存安全的方式与 kdb+ 通信。

除了 Krust,这个变体还具有以下功能

  • 支持 macOS
  • 支持 GUID 类型和 sd0x 函数调用
  • 修复从 Rust 导出至 Q 时的 kerror 字符串问题
  • 嵌入修复
  • 性能特性
  • 动态导出符号以进行弱链接
  • 查询类型属性的辅助函数

此变体包含针对当前 Rust nightly 的 robsmith11 更新。

有关如何在 Q 中嵌入 Rust 代码的示例,请参阅 demos/embed。有关如何在 Rust 和 Q 之间执行 IPC 的示例,请参阅 demos/ipc

为嵌入构建

当为嵌入构建时,符号由托管 Q 进程提供,库必须 不能 包含重复的函数。这需要弱链接,目前需要在 macOS 上通过指定在链接时应该忽略的所有缺失符号来手动实现。这些符号在构建时生成,作为常量 rkdb::SYMBOLS,目前通过将库目标的 .cargo/config 设置为以下内容使用:

[target.'cfg(target_os="macos")']
rustflags = ["-Clink-args=-Wl,-U,_ktn -Wl,-U,_knk -Wl,-U,_ku -Wl,-U,_ka -Wl,-U,_kb -Wl,-U,_kg -Wl,-U,_kh -Wl,-U,_ki -Wl,-U,_kj -Wl,-U,_ke -Wl,-U,_kf -Wl,-U,_kc -Wl,-U,_ks -Wl,-U,_kd -Wl,-U,_kz -Wl,-U,_kt -Wl,-U,_ktj -Wl,-U,_kp -Wl,-U,_kpn -Wl,-U,_xT -Wl,-U,_xD -Wl,-U,_ktd -Wl,-U,_ss -Wl,-U,_sn -Wl,-U,_ymd -Wl,-U,_dj -Wl,-U,_setm -Wl,-U,_r1 -Wl,-U,_r0 -Wl,-U,_m9 -Wl,-U,_sd1 -Wl,-U,_sd0 -Wl,-U,_sd0x -Wl,-U,_k -Wl,-U,_dl -Wl,-U,_ja -Wl,-U,_js -Wl,-U,_jk -Wl,-U,_jv -Wl,-U,_krr -Wl,-U,_orr -Wl,-U,_dot -Wl,-U,_okx -Wl,-U,_b9 -Wl,-U,_d9"]

示例

参阅 kdb-rs-hash 了解嵌入示例。

为 IPC 构建

要使用此库进行 IPC,您首先需要使用 ar 从 kx 提供的对象文件 c.o 编译一个静态库。该静态库应放置在 src/c/libkdb.a

ar rcs libkdb.a c.o
mv libkdb.so src/c

c.o 可以在此处找到。这里

兼容性

  • 64位,即Q的商业版 >= 3.6。
  • macOS(需要XCode >= 9.4.1)和Linux。
  • rustc >= 1.30.0-nightly (33b923fd4 2018-08-18)

许可证

基于adwhit的krust,并使用相同的MIT许可证。

依赖项

约2.5MB
约50K SLoC