51个版本 (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日

#8 in FFI

Download history 20319/week @ 2024-05-04 27337/week @ 2024-05-11 24828/week @ 2024-05-18 21202/week @ 2024-05-25 22825/week @ 2024-06-01 24588/week @ 2024-06-08 21658/week @ 2024-06-15 19605/week @ 2024-06-22 17813/week @ 2024-06-29 20661/week @ 2024-07-06 18939/week @ 2024-07-13 23240/week @ 2024-07-20 20811/week @ 2024-07-27 22288/week @ 2024-08-03 21382/week @ 2024-08-10 16353/week @ 2024-08-17

84,556 每月下载量
用于 29 个crate(28个直接使用)

MPL-2.0 许可证

385KB
6.5K SLoC

Rust 5.5K SLoC // 0.1% comments Kotlin 421 SLoC // 0.2% comments Python 397 SLoC // 0.1% comments Swift 371 SLoC // 0.1% comments Ruby 240 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平台uniffi-dl插件支持 .udl 文件。它提供了语法高亮、代码折叠、代码补全、引用解析和导航(以及其他功能)等功能,用于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.4–3.5MB
~72K SLoC