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 次
30KB
625 行
rkdb
kdb+ 对 Rust 的绑定。最初是从 adwhit 的 Krust cargo 包分叉而来,并在很大程度上基于 robsmith11。
这些绑定使得 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