51 个不稳定版本

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日

#1222 in 过程宏

Download history 21063/week @ 2024-04-30 21163/week @ 2024-05-07 27690/week @ 2024-05-14 22315/week @ 2024-05-21 22649/week @ 2024-05-28 22941/week @ 2024-06-04 23980/week @ 2024-06-11 21397/week @ 2024-06-18 18734/week @ 2024-06-25 19647/week @ 2024-07-02 18654/week @ 2024-07-09 20649/week @ 2024-07-16 22630/week @ 2024-07-23 21113/week @ 2024-07-30 21949/week @ 2024-08-06 20184/week @ 2024-08-13

90,508 每月下载量
用于 28 个crate(6个直接使用)

MPL-2.0 许可证

245KB
5.5K SLoC

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

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

对于有耐心的人,请参阅 UniFFI用户指南UniFFI示例

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

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

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

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 包。它提供了一个用于设置 UniFFI 包的 init 命令和一个用于从 Rust 代码构建 Swift 包的 package 命令 - 无需额外的配置或构建脚本。
  • Cargo NDK Gradle 插件允许您使用cargo-ndk构建 Rust 代码,这通常使 Android 库构建更加容易。
  • uniffi-starter是一个最小化项目,它以紧凑的方式在完整项目中展示了 UniFFI 的广泛功能。它包括完整的 Android 库构建过程、XCFramework 生成脚本和示例 Swift 包结构。

(如果您认为其他资源应该被列出,请提交一个PR!)

贡献

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

行为准则

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

依赖关系

~1.3–2.6MB
~53K SLoC