24个不稳定版本 (9个破坏性更新)

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.21.0 2022年10月14日

#58 in 过程宏

Download history 22034/week @ 2024-05-03 25434/week @ 2024-05-10 27886/week @ 2024-05-17 20527/week @ 2024-05-24 23954/week @ 2024-05-31 24135/week @ 2024-06-07 22695/week @ 2024-06-14 20436/week @ 2024-06-21 18015/week @ 2024-06-28 21004/week @ 2024-07-05 19018/week @ 2024-07-12 23414/week @ 2024-07-19 21637/week @ 2024-07-26 23392/week @ 2024-08-02 22638/week @ 2024-08-09 16313/week @ 2024-08-16

89,136 每月下载次数
35 个crate中使用了(直接使用4个)

MPL-2.0 许可证

67KB
1.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 - [缩写,外部函数接口]

其他工具

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

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

第三方语言绑定

外部资源

有一些第三方资源可以更轻松地与UniFFI一起工作

  • IDEA平台上的.udl文件插件支持uniffi-dl在JetBrains市场)。它提供了语法高亮、代码折叠、代码完成、引用解析和导航(以及其他功能)等功能,用于UniFFI定义语言(UDL)
  • cargo swift,一个用于从Rust代码构建Swift包的cargo插件。它提供了一个初始化命令来设置UniFFI包,并有一个包命令可以从Rust代码构建Swift包,无需额外的配置或构建脚本。
  • Cargo NDK Gradle插件允许您使用cargo-ndk构建Rust代码,这通常可以使Android库构建更容易。
  • uniffi-starter是一个最小的项目,以紧凑的方式演示了UniFFI在完整项目中的广泛使用。它包括完整的Android库构建过程、XCFramework生成脚本和示例Swift包结构。

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

贡献

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

行为准则

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

依赖关系

~0.5–1MB
~23K SLoC