用途:datafusion-ffi 为 DataFusion 各 trait 暴露稳定的 C ABI,使不同 Rust 版本编译的库、插件、datafusion-python 等能在运行时互操作。本技能用于在该 crate 下新增、修改或评审代码时,按固定模式操作并检查关键约束。
适用触发场景:新增 FFI_<Trait> 与 Foreign<Trait> 配对;为现有 FFI_X 增方法;评审涉及该 crate 的 PR;修改 codec/proto 序列化层;跟进上游 trait 表面变化。
主要规则与能力:datafusion-ffi 不得依赖 datafusion 伞 crate,只能用叶子 crate(datafusion-common、datafusion-expr、datafusion-catalog、datafusion-physical-plan 等),datafusion 仅可用于 dev-dependencies;每个 FFI_X 用 #[repr(C)],stabby 仅用于 SString/SVec;函数指针字段一律 unsafe extern "C"(library_marker_id 例外,为安全 extern "C");Send/Sync 需与被包装 trait 一致,可变或流式 trait 仅需 Send;crate 根启用 #![deny(clippy::clone_on_ref_ptr)]。
提交前需运行:cargo fmt --all、cargo clippy -p datafusion-ffi --all-targets --all-features -- -D warnings、cargo test -p datafusion-ffi。任何改动 FFI_X 结构布局的 PR 必须加 api change 标签;补丁发布不得包含 FFI 结构变更,评审前需检查 PR 基分支。
使用方式:按标准包装模板实现 FFI_X 结构、PrivateData、函数指针包装、clone/release/Drop、构造函数拆分与 ForeignX 消费端;Round-trip downcast 与 library_marker_id 检查为必需。
测试:需同时覆盖进程内单元测试(本地旁路与强制外部路径)与跨库集成测试,后者用 libloading 加载 cdylib,运行命令为 cargo test -p datafusion-ffi --features integration-tests。
限制:资料未提供价格、平台支持、性能数据或正式使用步骤等事实,故不展开;部分字段与示例较长,此处仅保留必要命令与规则要点。