写这样的图书馆我必须牺牲标准吗?例如,如果可能的话,我会如何编写python绑定到rust库?
答案 0 :(得分:41)
首先,向Rust表明你想要创建一个对C:
可见的函数#[no_mangle]
pub extern "C" fn some_func() { ... }
这告诉Rust避免修改输出符号并使用C ABI。
接下来,您需要在越过边界时使用C兼容类型。以下是一些对我有用的建议:
Box<T>
返回,并将其作为&T
或{{ 1}}。从本质上讲,这意味着您放弃了Rust中结构的所有权,并赋予C代码所有权。 C代码必须确保如果它将指针传回一个带有Box的函数,它不再使用它。Box<T>
和&str
表示为raw::Slice,而&[T]
表示为raw::Vec。