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构建实用工具

Download history 17652/week @ 2024-04-26 19821/week @ 2024-05-03 23555/week @ 2024-05-10 26430/week @ 2024-05-17 19062/week @ 2024-05-24 21883/week @ 2024-05-31 22337/week @ 2024-06-07 21200/week @ 2024-06-14 18883/week @ 2024-06-21 16584/week @ 2024-06-28 19240/week @ 2024-07-05 17645/week @ 2024-07-12 20982/week @ 2024-07-19 19027/week @ 2024-07-26 19896/week @ 2024-08-02 16517/week @ 2024-08-09

79,777 每月下载量
用于 26 个 crate(6 个直接使用)

MPL-2.0 许可证

665KB
14K SLoC

Rust 8K SLoC // 0.1% comments Kotlin 1.5K SLoC // 0.2% comments Python 1.5K SLoC // 0.1% comments Swift 1.5K SLoC // 0.1% comments Ruby 1K SLoC // 0.1% comments

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, 一个] FFI - [缩写,外部函数接口]

其他工具

我们还知道一些其他工具,它们试图解决类似的问题:

(如果您认为应该列出其他工具,请打开一个 PR!)

第三方语言绑定

外部资源

有一些第三方资源可以更容易地与 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!)

贡献

如果您对这个工具感兴趣,请帮助我们开发它!您可以

行为准则

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

依赖项

~5.5MB
~104K SLoC