Diplomat:革命性Rust FFI工具,轻松生成多语言绑定的完整指南

Diplomat:革命性Rust FFI工具,轻松生成多语言绑定的完整指南

【免费下载链接】diplomatRust tool for generating FFI definitions allowing many other languages to call Rust code项目地址: https://gitcode.com/gh_mirrors/dipl/diplomat

Diplomat是一款革命性的Rust FFI工具,能够自动生成多种语言的绑定,让其他语言轻松调用Rust代码。通过Diplomat,开发者只需定义要通过FFI公开的Rust API,就能自动获得高级别的C、C++和JavaScript绑定!

🚀 什么是Diplomat?

Diplomat是一个用于从可扩展语言集中生成Rust库绑定的框架和工具。它专注于单向绑定:当外部代码希望调用Rust库时,Diplomat能提供完美支持。如果你正在寻找双向绑定工具,像cxx这样的工具可能更适合你。

Diplomat由一个过程宏和一个工具组成。过程宏能够围绕标记的Rust代码生成extern "C"绑定层,而该工具能够生成相应的C、C++、JS等语言的绑定,这些绑定在理念上与Rust端的API相匹配。这意味着Rust中的方法会映射到目标语言中的"方法",Rust中的Result会映射到C++中的标记联合和Javascript中的异常等。所有这些都通过生成的C API工作,但它们保留了C无法表达的更高级别的API特性。

🔋 支持的后端

Diplomat目前支持以下后端:

  • C
  • C++
  • JavaScript/TypeScript (使用WASM)
    • demo_gen
  • Dart
  • .NET (C#)
  • Kotlin (使用JNA)
  • Python via Nanobind (由Zeromatter维护)

还有一个[Java后端](使用Panama)正在开发中。

🌟 Diplomat的实际应用展示

下面是一个使用Diplomat生成的Web演示界面,展示了如何通过生成的绑定在前端调用Rust代码实现简单的加法功能:

📦 快速安装与配置步骤

安装Diplomat CLI工具

要安装diplomatCLI工具,只需运行以下命令:

$ cargo install diplomat-tool

假设这会安装diplomat-tool 0.10.0版本。

添加Diplomat依赖

然后,你可以像这样将diplomat添加到你的项目依赖中:

diplomat = "0.10.0" diplomat-runtime = "0.10.0"

建议为FFI接口创建一个单独的crate。Diplomat只会读取特殊标记模块的内容,因此可以将Diplomat代码与普通Rust代码混合使用,但最好尽量减少这种情况,因为过程宏可能会使调试变得困难。

💡 Diplomat的设计理念

Diplomat不进行跨 crate 全局分析,它将视图限制在特别标记的模块上,并且仅基于在这些模块中找到的信息生成绑定。这意味着更改某个依赖项中的某些结构不会神奇地影响生成的C++/JS等API;所有此类更改只能来自对这些标记模块的有意更改。这也意味着Diplomat可以清晰地定义用于声明导出API的Rust子集,而不会影响依赖项中使用的Rust风格。可以将#[diplomat::bridge]块想象成一种DSL,用于在Rust API和更通用的API形状之间架起桥梁,这些API形状可以跨语言干净地转换。

Diplomat的设计使得为Diplomat编写新的语言目标不需要花费大量精力。

🛡️ Diplomat的安全性

总体而言,Diplomat旨在提供安全的FFI。但是,关于Diplomat当前的安全状态有一些注意事项,详细信息可以查看安全文档。

🎯 为什么选择Diplomat?

  • 多语言支持:一次性编写Rust代码,自动生成多种语言的绑定
  • 高级API特性:保留Rust的高级API特性,如Result类型在不同语言中的自然映射
  • 安全性:专注于提供安全的FFI交互
  • 易于扩展:添加新的语言后端相对简单
  • 最小侵入性:不会影响依赖项中使用的Rust风格

如果你正在开发需要与其他语言交互的Rust库,Diplomat绝对是一个值得尝试的工具!通过它,你可以轻松地将Rust的强大功能带到各种编程语言生态系统中。

【免费下载链接】diplomatRust tool for generating FFI definitions allowing many other languages to call Rust code项目地址: https://gitcode.com/gh_mirrors/dipl/diplomat

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考