主要观点:
- 语言模型(LLMs)能生成越来越多代码,未来可能主要由计算机生成代码,这会改变我们对待库和代码维护的方式。
- 维护大型重要库很困难,如 TensorFlow 因技术债务和复杂的代码结构而难以维护和演进。
- 利用 LLMs 进行从 C 到 Rust 的移植是有效的策略,通过随机比较 C 和 Rust 输出进行模糊测试,可确保行为的保留。
- 虽然整体系统有效,但仍存在一些不足,如生成的 Rust 代码较“C 风格”、自动化不完全、适用于简单库等。
关键信息:
- 以 TensorFlow 为例说明大型库维护的问题及内部讨论的解决方案。
- 介绍了不同的代码生成工具和研究,如 Claude、Aider、c2rust、Syzygy 等。
- 详细阐述从 C 到 Rust 移植的过程,包括按拓扑顺序排序符号、创建 FFI 入口和 Rust 实现、编写模糊测试等。
- 分析该方法有效的原因,如选择简单库、模糊测试的作用等。
- 指出该方法的局限性,如 Rust 代码风格、自动化程度、适用库的类型等。
重要细节:
- TensorFlow 因设计缺陷和版本迁移问题导致代码复杂、运行缓慢、难以维护。
- Syzygy 利用机制实现库的移植,但运行速度慢且与 C 版本行为不完全相同。
- 第一次尝试从 C 到 Rust 移植效果不佳,暴露很多潜在错误。
- 第二次尝试有所改进,但仍需人工干预且结果与原始 C 实现有差异。
- 最终的移植过程更严格,按拓扑顺序端口化符号,使用模糊测试确保行为一致。
- 实验中大部分符号由 Gemini 自动移植,部分由 Claude 完成,人工仅做少量调整。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。