10个版本 (4个重大变更)
4.0.0 | 2020年11月2日 |
---|---|
3.0.1 | 2020年7月1日 |
2.0.1 | 2020年7月1日 |
2.0.0 | 2020年5月29日 |
0.2.0 | 2020年5月4日 |
#29 in #cross
17KB
258 行
目的
此crate用于生成可以跨FFI边界的Rust闭包。它支持任何函数签名,前提是其中所有类型在C/C++和Rust中都有有效的表示。
安全问题
仅通过创建一个*Closure
本身不会导致未定义行为,然而当该结构在C/C++中使用时,它仍然可能触发未定义行为。*Closure
永远不会是安全函数的参数,也不应该是传递给安全函数的任何结构的公共成员。请编写自己的安全包装器,将*Closure
类型内部化。
C/C++中的使用
要与此C/C++库一起使用,您需要包含仓库中提供的头文件rust_closures.h
。然后您可以在需要接受任意Rust代码的任何地方接受相关的*Closure
类型。
限制
由于此crate无法合理保证两边的内存分配器相同,或以相同的方式处理类型,因此无法使用此crate在FFI边界传输分配的内存的所有权。如果需要此类传输,您应在FFI边界需要驻留的一侧将数据复制到一个新的分配中。主要例外是带有Copy
标记特性类型,它们可以轻易地复制,不需要销毁指令。
依赖关系
~1.5MB
~35K SLoC