#closures #cc #functional-programming #structures #cross #compatible #signature

c-closures-build

从Rust闭包生成与C/C++ FFI兼容的 *Closure 结构,适用于跨语言函数式编程

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

MIT/Apache

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