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 过程宏
89,136 每月下载次数
在 35 个crate中使用了(直接使用4个)
67KB
1.5K SLoC
UniFFI - Rust的多语言绑定生成器
UniFFI是一个用于在Rust中构建跨平台软件组件的工具包。
对于急切的人,请参阅 UniFFI用户指南 或 UniFFI示例。
通过在Rust中编写您的核心业务逻辑并在“对象模型”中描述其接口,您可以使用UniFFI来帮助您
- 将您的Rust代码编译成适用于不同目标平台的共享库。
- 生成用于从不同目标语言加载和使用库的绑定。
UniFFI目前被Mozilla广泛用于Firefox移动和桌面浏览器;一次在Rust中编写,自动生成的绑定允许从Kotlin(用于Android应用)和Swift(用于iOS应用)调用该功能。它还有不断增长的社区用户群体,向许多用户发布了各种酷炫的东西。
UniFFI支持 Kotlin、Swift、Python 和 Ruby,并为 C# 和 Golang 提供第三方绑定。可以外部开发其他外国语言绑定,我们欢迎对这些绑定做出贡献。请参阅 第三方外国语言绑定。
用户指南
您可以在UniFFI 用户指南中了解更多关于使用该工具的信息。
我们认为它已经准备好用于生产环境,但UniFFI距离1.0版本还有很长的路要走,内部还有很多工作正在进行。我们尽力避免破坏简单的消费者,但随着时间的推移,更高级的功能可能会在升级过程中出现破坏。
词源和发音
ˈjuːnɪfaɪ. 发音与"unify"押韵。
一个混合词,同时也与"unify"双关,表示从多种语言访问的一个代码库的结合。
uni - [拉丁 ūni-, 来自 ūnus, one] FFI - [缩写,外部函数接口]
其他工具
我们知道的其他一些试图解决类似问题的工具是
- Diplomat - 请参阅我们关于该工具不同方法的概述
- Interoptopus
(如果您认为其他工具应该被列出,请提交一个PR!)
第三方语言绑定
- Kotlin Multiplatform支持。该仓库包含UniFFI的Kotlin Multiplatform绑定生成,让您可以针对JVM和Native。
- Go绑定
- C#绑定
- Dart绑定
外部资源
有一些第三方资源可以更轻松地与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!)
贡献
如果您对这个工具感兴趣,请帮助我们开发它!您可以
- 查看贡献指南。
- 在这里GitHub上提交或处理问题。
- 加入Matrix上的#uniffi:mozilla.org房间中的讨论。
行为准则
本项目受Mozilla的社区参与指南管理。
依赖关系
~0.5–1MB
~23K SLoC