#bindings-generator #component #cross-platform #multi-language #swift #uni-ffi

uniffi_bindgen

一个用于 Rust 的多语言绑定生成器(代码生成和 CLI 工具)

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

Download history 20568/week @ 2024-05-04 27420/week @ 2024-05-11 24960/week @ 2024-05-18 21143/week @ 2024-05-25 23063/week @ 2024-06-01 24814/week @ 2024-06-08 21950/week @ 2024-06-15 19740/week @ 2024-06-22 18100/week @ 2024-06-29 20793/week @ 2024-07-06 19061/week @ 2024-07-13 23325/week @ 2024-07-20 21339/week @ 2024-07-27 22877/week @ 2024-08-03 21753/week @ 2024-08-10 16594/week @ 2024-08-17

86,331 每月下载量
用于 33 个 crate(8 个直接使用)

MPL-2.0 许可证

1MB
18K SLoC

Rust 12K 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, one] FFI - [缩写,外函数接口]

其他工具

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

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

第三方外语绑定

外部资源

有一些第三方资源可以更轻松地使用 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!)

贡献

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

行为准则

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

依赖关系

~5MB
~101K SLoC