主要观点:
- 介绍在Rust to C 编译器上的进展,包括新的文章格式、演讲、测试通过情况、修复的 bug、子切片问题、回退内在函数、支持更多 C 编译器、性能提升和内部重构等。
关键信息: - 将在 Rust Week 期间做关于该项目的演讲,平衡了初学者友好和高级话题。
- 核心测试通过率从 92%提升到 95.9%,.NET 侧的 Rust 核心测试通过率达到 96.3%。
- 修复了 128 位整数相关的内在函数问题,如
__builtin_popcountll
的错误使用、溢出检查等。 - 解决了子切片的 bug,之前仅在特定模式下出现且未被检测到。
- 发现一些内在函数可由 Rust 编译器支持的模拟版本实现,节省了手动实现的工作。
- 努力提高 C 编译器兼容性,以支持更多平台,但遇到获取某些平台编译器的法律问题。
- 目前计划尽可能符合标准 C99,使用标准 POSIX API,并扩展内在函数的回退列表。
- 进行了各种性能改进,如整数字面量的处理、嵌入调试信息的方式等。
- 对
rustc_codegen_clr
进行了内部重构,将部分内容拆分为单独的 crate 并推进到更内存高效的内部表示。
重要细节: - C 的
__builtin_popcount
内在函数有 3 个变体,__builtin_popcountll
用于unsigned long long
类型,非 128 位整数。 - 实现 128 位整数的位计数内在函数时曾错误地截断为 64 位。
- 子切片 bug 是忘记了
sizeof
导致偏移错误,仅在从切片末尾子切片时出错。 - 某些内在函数如
carrying_mul_add
在处理 128 位整数时需要特殊处理,因为 C 不支持大于 128 位的整数。 - 支持更多 C 编译器有助于 Rust 代码在更多平台运行,但获取某些平台编译器存在法律和预算问题。
- 进行了性能改进,如整数字面量的十六进制和十进制形式大小比较、更智能的嵌入调试信息方式等。
- 内部重构解决了一些与动态大小类型相关的复杂问题,将逐步完全迁移到新的内部表示。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。