7 个版本
0.2.5 | 2023 年 12 月 22 日 |
---|---|
0.2.4 | 2023 年 1 月 15 日 |
0.2.2 | 2022 年 12 月 11 日 |
0.1.0 | 2022 年 12 月 2 日 |
#133 在 GUI 中
每月 45 次下载
140KB
2.5K SLoC
Rxi 的 Microui 端口到 Rust
这是一个将 Rxi 的 MicroUI 转换为 Rust 语言的端口。我们试图使用法尽可能接近原始版本,同时也使其尽可能符合 Rust 的习惯。这个库绝不应该是完整的。
我们使用了 C2Rust 来创建初始代码,并且迭代了 > 60 次以达到现在的状态。有一些错误仍然存在(可能在翻译中丢失!),请谨慎使用!
采用的方法
这是一个相对较小的项目。坦白说,它并没有从 c2rust 开始。
第一步
相反,我们分叉了 microui,并对 C 代码进行了一些修改,以便生成的代码更易于理解。分叉可以在 这里 找到。C 代码的修改主要是将指针跳跃转换为索引跳跃。
C2Rust
除此之外,我们还做了以下事情
- 使用稳定版 Rust
- 默认情况下,c2rust 生成的代码是使用 nightly 构建的。我们的目标是使用稳定版 Rust 构建,这是我们第一个里程碑。
- C2Rust 生成一个假的 main,所以我们移除了样板代码
- 开始将 C 枚举(转换为 Rust 时为常量)转换为 Rust 枚举
- 使用容器(如果目标是使用
std
,则使用 Rust 标准库集合/容器)。对于我们来说,为了忠实于 microui 的原始设计,我们的目标是提供一个零分配的 microui。为此,我们创建了我们自己的非分配容器。 - 从 C 字符串转换为 Rust 字符串
- 最后,将所有 C 类型转换为与 Rust 兼容的类型。
演示
克隆并构建演示(SDL2 & glow)/ 在 Linux 上测试
$ cd demo-sdl2
$ cargo run
如果您想构建最小的可执行文件
$ cd demo-sdl2
$ cargo +nightly run --release -Z build-std=std,panic_abort -Z build-std-features=panic_immediate_abort --target x86_64-unknown-linux-gnu
这将为您提供一个 127K
的可执行文件(带有 std)
注意事项
我们选择使用我们自己的实现来解析/序列化十进制数(不是通用浮点数)。十进制表示形式存储为浮点数。这不是一个通用浮点数解析器/序列化器,算法相当简单。请记住这一点!