53 个版本 (27 个破坏性更新)
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.5.0 | 2020 年 11 月 9 日 |
#48 in FFI
86,331 每月下载量
用于 33 个 crate(8 个直接使用)
1MB
18K 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 - [缩写,外函数接口]
其他工具
我们知道的试图解决类似问题的其他工具有
- Diplomat - 请参阅我们关于该工具不同方法的概述
- Interoptopus
(如果您认为其他工具应该被列出,请打开一个PR!)
第三方外语绑定
- Kotlin Multiplatform 支持。该存储库包含为 UniFFI 生成 Kotlin Multiplatform 绑定的代码,让您可以针对 JVM 和本地平台。
- Go 绑定
- C# 绑定
- Dart 绑定
外部资源
有一些第三方资源可以更轻松地使用 UniFFI
- IDEA 平台
.udl
文件的插件支持(uniffi-dl 在 JetBrains 市场中)。它提供语法高亮、代码折叠、代码补全、引用解析和导航等功能(以及其他功能),用于 UniFFI 定义语言(UDL)。 - cargo swift,一个 cargo 插件,用于从 Rust 代码构建 Swift 包。它提供了一个 init 命令来设置 UniFFI 包,以及一个 package 命令来从 Rust 代码构建 Swift 包,无需额外的配置或构建脚本。
- Cargo NDK Gradle 插件 允许您使用
cargo-ndk
构建 Rust 代码,通常可以使 Android 库构建过程更加容易。 uniffi-starter
是一个最小化项目,以紧凑的方式展示了一个完整项目中各种 UniFFI 的应用。它包括完整的 Android 库构建过程、XCFramework 生成脚本以及示例 Swift 包结构。
(如果您认为其他资源应该被列出,请打开一个PR!)
贡献
如果您对这个工具感兴趣,请帮助我们开发它!您可以通过以下方式
- 查看贡献指南。
- 在此处 GitHub 上提交或处理问题。
- 加入 Matrix 上的#uniffi:mozilla.org 房间的讨论。
行为准则
该项目受 Mozilla 的社区参与指南管理。
依赖关系
~5MB
~101K SLoC