12个不稳定版本 (3个破坏性更新)
新 0.28.1 | 2024年8月13日 |
---|---|
0.28.0 | 2024年6月11日 |
0.27.3 | 2024年6月3日 |
0.27.0 | 2024年3月26日 |
0.25.2 | 2023年11月20日 |
#115 在 FFI
82,659 每月下载量
在 26 个crate中使用(通过 uniffi_bindgen)
290KB
6.5K SLoC
UniFFI - Rust的多语言绑定生成器
UniFFI是一个用于在Rust中构建跨平台软件组件的工具包。
对于急于了解的,请参阅UniFFI用户指南或UniFFI示例。
通过在Rust中编写您的核心业务逻辑并在“对象模型”中描述其接口,您可以使用UniFFI帮助您
- 将您的Rust代码编译成适用于不同目标平台的共享库。
- 生成绑定,以便从不同的目标语言中加载和使用库。
您可以使用接口定义文件或通过使用proc-macros来描述您的对象模型。
UniFFI目前被Mozilla在Firefox移动和桌面浏览器中广泛使用;在Rust中编写一次,自动生成的绑定允许从Kotlin(用于Android应用程序)和Swift(用于iOS应用程序)中调用该功能。它还有不断壮大的用户社区,为许多用户提供了各种酷炫的东西。
UniFFI 支持使用 Kotlin、Swift、Python 和 Ruby,并为 C# 和 Golang 提供第三方绑定。外部还可以开发其他语言的绑定,我们欢迎您贡献这些绑定。请参阅 第三方外语绑定。
用户指南
您可以在 UniFFI 用户指南 中了解更多关于使用此工具的信息。
我们认为它已准备好投入生产使用,但 UniFFI 距离 1.0 版本还有很长的路要走,内部还有很多工作正在进行。我们尽力避免破坏简单的消费者,但随着时间的推移,更高级的功能可能会在升级过程中出现问题。
词源和发音
ˈjuːnɪfaɪ. 发音与 "unify" 相似。
一个合成词,也玩文字游戏 "unify",以表示从许多语言访问一个代码库的连接。
uni - [拉丁语 ūni-, 来自 ūnus, one] FFI - [缩写,Foreign Function Interface]
其他工具
我们还了解一些试图解决类似问题的其他工具
- Diplomat - 请参阅我们关于该工具所采取的不同方法的 阐述
- Interoptopus
(如果您认为其他工具应该被列出,请打开一个 PR!)
第三方外语绑定
- Kotlin Multiplatform 支持。该存储库包含 UniFFI 的 Kotlin Multiplatform 绑定生成,允许您针对 JVM 和 Native 进行目标定位。
- Go 绑定
- C# 绑定
- Dart 绑定
外部资源
以下是一些第三方资源,它们使使用 UniFFI 更容易
- 为 IDEA 平台提供的
.udl
文件的插件支持(uniffi-dl 在 JetBrains 市场中)。它提供语法高亮、代码折叠、代码完成、引用解析和导航(以及其他功能)等 UniFFI 定义语言 (UDL)。 - cargo swift,一个 cargo 插件,用于从 Rust 代码构建 Swift 包。它提供了一个 init 命令来设置 UniFFI crate,并提供了 package 命令来从 Rust 代码构建 Swift 包 - 无需额外的配置或构建脚本。
- Cargo NDK Gradle 插件 允许您使用
cargo-ndk
构建 Rust 代码,通常会使 Android 库构建更加容易。 uniffi-starter
是一个最小化项目,以紧凑的方式在一个完整的项目中演示了 UniFFI 的广泛用途。它包括完整的 Android 库构建过程、XCFramework 生成脚本和示例 Swift 包结构。
(如果您认为其他资源应该被列出,请打开一个 PR!)
贡献
如果您对这个工具感兴趣,请帮助我们开发它!您可以
- 查看 贡献指南。
- 在 GitHub 上提交或处理 问题。
- 加入 Matrix 的 #uniffi:mozilla.org 房间的讨论。
行为准则
本项目遵循Mozilla的社区参与指南。
依赖项
约2.3–3.5MB
约66K SLoC