“GitHub 阅读地址:https://github.com/RustMagazine/rust-horizon-2023
社区热点
Rust 官方正在讨论为 Rust 提供 interoperable_abi features gate
interoperable_abi[1] 意味着提供一个新的 Rust ABI extern "interop" 和 repr(interop) ,用于实现有安全数据 类型的高级编程语言之间的互操作性。
动机摘要:
目前 Rust ABI 并不稳定,多语言交互只能通过 C-ABI 来进行。但是这限制了在 ABI 之间使用更高级的安全类型。可互操作的 ABI 将定义一种标准方法来跨高级语言进行调用,传递高级数据类型,而不需要将其降级为 C-ABI。该 ABI 将与任何提供 C 兼容 FFI 的语言(包括 C本身),并且语言还可以为可互操作的 ABI 添加特定的更高级别的支持。可互操作的 ABI 旨在成为 静态和动态形式的编译库(包括系统库)的合理默认值。
可互操作的 ABI 将是 C ABI 的严格超集。
可互操作 ABI 不支持的内容摘要:
- 可互操作的 ABI 并不旨在支持整个Rust 标准库.
- 可互操作的 ABI 不会旨在支持复杂的生命周期处理
- 可互操作的 ABI(至少在第一个版本中)不会以源代码或编译形式提供接口描述语言(IDL)
- 可互操作的 ABI 的目的不是在不同语言的表示之间提供“翻译”
- 可互操作的 ABI 不能支持任意的编译时泛型函数
GCC-rs 项目在 2022 年取得了很大进展
gccrs是一个旨在为 GNU Compiler Collection 带来对 Rust编程语言的支持的项目。其目标是从头开始为 Rust 编程语言编写一个新的编译器前端,将该前端集成到 GCC 中,使其作为一种语言与 C、C 、Ada、D、Go 一起使用。
该项目最初于 2014 年启动。当时,Rust 尚未实现稳定版本(Rust 1.0 于 2015 年 5 月发布),对于单个开发人员来说很难跟上高强度的变化。2019年又开始努力,此后一直在稳步进行。
2020 年,菲利普·赫伦 ( Philip Herron )开始获得资金支持,随后他得以开始全职从事该项目。此赞助来自 Open Source Security公司。Philip 受雇于 Embecosm 并从他们的管理中受益,并得到 GCC 指导委员会的支持。2022 年,在将近一年半的单飞之后,Philip 加入了另一位由 Open Source Security 公司资助的全职工程师 Arthur Cohen ,也受雇于 Embecosm。现在有两名工程师每周为该项目投入 40 小时。
2022 年发生的最引人注目的事件是将 gccrs 合并到 GCC,gccrs 将在 2023 年 4 月发布的 GCC 13.1 版本中可用。
更多内容参考 gccrs 2022 年报[2]
“P.S 与 gccrs 对应的是另一个项目
rustc_codegen_gcc
。它是作为 Rust 编译器 GCC 后端,目前也正在积极开发中,感兴趣可以关注rustc_codegen_gcc:进度报告#19[3]。
用 Rust 和 C 代码编译时间同样糟糕吗?
原文[4]作者写道:
“C 因其缓慢的构建时间而臭名昭著。“我的代码正在编译”是编程世界中的一个梗,而 C 让这个笑话流传开来。
“像 Google Chromium 这样的项目 在全新硬件上构建需要一个小时,在旧硬件上构建需要 6 小时。即使有数千美元的云计算能力,Chromium 构建时间仍然在六分钟左右。这是我完全不能接受的。人怎么可以每天这样工作?
作者也听说,Rust 也面临相同的问题,但他有实证精神,亲自动手证明一下 Rust 是不是和 Cpp 一样很慢。
这是他的计划:
- 查找开源 C 项目。
- 从项目中提取一部分为迷你项目中。
- 将 C 迷你项目的代码逐行重写为 Rust。
- 优化 C 项目和 Rust 项目的构建工具链。
- 比较两个项目之间的编译 测试时间。
经过这样的测试,作者得出最终结论:
- 编译时间是 Rust 的问题吗?是的。有一些提示和技巧可以加快构建速度,但作者没有找到神奇的数量级改进,否则作者将很高兴使用 Rust 进行开发。
- Rust 的构建时间和 C 一样糟糕吗?是的。对于更大的项目,Rust 的开发编译时间比 C 更短,至少作者的代码风格是这样。
- 对于完整构建,C 构建花费的时间与 Rust 相比,大致相同(17k SLOC)或花费更少的时间(100k SLOC),而不是更长。
- 对于增量构建,与 C 相比,Rust 构建有时更短,有时更长(17k SLOC)或更长(100k SLOC),但并不总是更长。
- 很欣赏 Rust 的工具链(尤其是 Cargo、rustup 和 miri)。
应用实践
Gama 发射的太阳帆宇宙飞船中使用了 Rust
Gama[5] 将发射太阳帆宇宙飞船