为Rust编写C库绑定的目的是什么?

时间:2016-03-22 12:58:00

标签: rust

我的印象是绑定是您编写的中间层,因此您可以在另一个应用程序中使用以一种语言编写的库。 Rust似乎可以call C with zero overhead

对于一个具体的例子,Vulkan是一个C API,但人们正在为Vulkan(123)进行绑定。

如果可以直接从Rust调用C,为什么要创建绑定?我误解了什么吗?

1 个答案:

答案 0 :(得分:12)

虽然Rust可以在没有开销的情况下调用C函数,但Rust编译器仍然需要知道这些函数是否存在。要告诉编译器,您必须在extern "C" { .. }块中声明这些函数。您可以在FFI chapter of the Rust book中详细了解该主题。对于许多人使用的C函数(例如Vulkan),将所有这些声明放入其他人可以使用的Rust库中是有意义的,而不是自己编写绑定。

使用上面提到的绑定,我们只是将原始C接口暴露给Rust程序员。但是大多数Rust程序员宁愿使用Rust中惯用的API(我们称之为“生锈”)。那就是:使用Rust的高级概念,如特征和闭包,以及“安全”。

您关联的Vulkan图书馆:

  • second链接只是用工具生成的原始绑定(rust-bindgen)。

  • tomaka's library的目的是创建一个生锈的API,因此它不仅仅是函数声明的集合。 tomaka选择引入非常少的开销来创建一个库,大多数Rust程序员使用它比C接口更舒服。 (顺便说一句:tomaka也这样做了for OpenGL。)

  • 我真的不知道您链接的第一个图书馆,但我认为这是上述两种方法之间的关系。

相关问题