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),仅供参考
