17 个不稳定版本 (5 个重大变更)
新 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.23.0 | 2023 年 1 月 27 日 |
#250 在 FFI 中
89,310 每月下载量
在 24 个 crate 中使用(通过 uniffi)
180KB
2.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
文件插件支持(在 JetBrains 市场中uniffi-dl)。它提供了语法高亮、代码折叠、代码补全、引用解析和导航(以及其他功能)等功能,用于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 的社区参与指南管理。
依赖项
~0.5–1.5MB
~25K SLoC