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