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 日

#250FFI

Download history 19830/week @ 2024-04-23 20920/week @ 2024-04-30 21104/week @ 2024-05-07 27684/week @ 2024-05-14 22312/week @ 2024-05-21 22646/week @ 2024-05-28 22934/week @ 2024-06-04 23933/week @ 2024-06-11 21407/week @ 2024-06-18 18714/week @ 2024-06-25 19639/week @ 2024-07-02 18649/week @ 2024-07-09 20679/week @ 2024-07-16 22624/week @ 2024-07-23 21099/week @ 2024-07-30 21724/week @ 2024-08-06

89,310 每月下载量
24 个 crate 中使用(通过 uniffi

MPL-2.0 许可证

180KB
2.5K SLoC

UniFFI - 用于 Rust 的多语言绑定生成器

UniFFI 是用于在 Rust 中构建跨平台软件组件的工具包。

对于急于了解的用户,请参阅 UniFFI 用户指南UniFFI 示例

通过在 Rust 中编写您的核心业务逻辑并描述其“对象模型”,您可以使用 UniFFI 来帮助您

  • 将您的 Rust 代码编译成用于不同目标平台的共享库。
  • 生成绑定以从不同的目标语言加载和使用库。

您可以使用 接口定义文件 或通过使用 proc-macros 来描述您的对象模型。

UniFFI 目前在 Mozilla 的 Firefox 移动和桌面浏览器中得到广泛使用;一次用 Rust 编写,自动生成的绑定允许从 Kotlin(用于 Android 应用程序)和 Swift(用于 iOS 应用程序)中调用该功能。它还有一个不断壮大的用户社区,向许多用户提供了各种酷炫的东西。

UniFFI 支持以下语言:KotlinSwiftPythonRuby,并为 C#Golang 提供第三方绑定。外部还可以开发其他语言的绑定,我们欢迎在此列出贡献。请参阅第三方语言绑定

用户指南

您可以在UniFFI 用户指南中了解更多关于使用该工具的信息。

我们认为它已准备好用于生产,但 UniFFI 还远未达到 1.0 版本,内部还有很多工作在进行中。我们尽力避免破坏简单的消费者,但随着时间的推移,更高级的功能可能会在升级过程中出现问题。

词源和发音

ˈjuːnɪfaɪ。发音与“unify”押韵。

由“unify”构成的混合词,同时也是一个双关语,表示从多种语言访问的单一代码库的连接。

uni - [拉丁 ūni-, 来自 ūnus, one] FFI - [缩写,Foreign Function Interface]

其他工具

我们知道的尝试解决类似问题的其他工具有

(如果认为其他工具应被列出,请提交一个 PR!)

第三方语言绑定

外部资源

有一些第三方资源使使用 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!)

贡献

如果这个工具对您来说很有趣,请帮助我们开发它!您可以

行为准则

本项目由 Mozilla 的社区参与指南管理。

依赖项

~0.5–1.5MB
~25K SLoC