#bindings-generator #ffi #uni-ffi #multi-language #checksum #bindgen #derive

uniffi_checksum_derive

Rust的多语言绑定生成器(checksum自定义派生)

19个不稳定版本 (7个破坏性更新)

新版本 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.22.0 2022年12月16日

#981过程宏

Download history 20180/week @ 2024-04-23 21526/week @ 2024-04-30 21458/week @ 2024-05-07 28038/week @ 2024-05-14 22686/week @ 2024-05-21 22947/week @ 2024-05-28 23690/week @ 2024-06-04 24451/week @ 2024-06-11 21903/week @ 2024-06-18 19500/week @ 2024-06-25 20055/week @ 2024-07-02 18976/week @ 2024-07-09 21054/week @ 2024-07-16 23356/week @ 2024-07-23 22037/week @ 2024-07-30 22598/week @ 2024-08-06

每月下载量 92,254次
33 个库中使用 (通过 uniffi_meta)

MPL-2.0 许可证

12KB
125

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

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

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

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

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

您可以在 接口定义文件 中描述您的对象模型或通过使用过程宏 进行描述

目前,Mozilla广泛使用UniFFI在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 的 社区参与指南 管理。

依赖关系

~265–710KB
~17K SLoC