gpt4 book ai didi

rust - 为 Rust 编写 C 库绑定(bind)的目的是什么?

转载 作者:行者123 更新时间:2023-11-29 07:43:10 27 4
gpt4 key购买 nike

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

举一个具体的例子,Vulkan 是一个 C API,但人们正在为 Vulkan 开发绑定(bind)(123)。

如果可以直接从 Rust 调用 C,为什么要创建绑定(bind)?我是不是误会了什么?

最佳答案

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

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

您链接的 Vulkan 库:

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

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

  • 我不太了解您链接的第一个库,但我认为它介于上述两种方法之间。

关于rust - 为 Rust 编写 C 库绑定(bind)的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36155023/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com