Hasty Briefsbeta

双语

Are compilers deterministic?

4 days ago
  • #reproducible-builds
  • #LLM-coding
  • #compiler-determinism
  • 贝特里奇法则指出,大多数以疑问句形式出现的新闻标题答案都是‘否’,这一规律同样适用于普通开发者的日常经验。
  • 计算机科学视角(编译器基于完整输入状态具有确定性)与工程实践视角(实际构建常无法控制全部输入导致输出漂移)存在本质差异。
  • Ksplice在2000年代的工作实现了无需重启的Linux内核热修补,这凸显了编译器输出与源码意图之间的现实矛盾。
  • 即使源码意图相同,寄存器分配、通道行为及段布局变化等因素仍会导致编译器输出差异。
  • GCC漏洞18574证明指针哈希不稳定性会影响遍历顺序和SSA合并。
  • Debian及可复现构建运动(始于2013年)致力于实现相同源码与构建指令生成比特级完全一致的产物。
  • 实现可复现构建的实用措施包括:设置TZ=UTC时区、LC_ALL=C语言环境、使用SOURCE_DATE_EPOCH时间戳及特定编译器标志。
  • 讨论延伸至大语言模型领域:鉴于其非确定性特征,质疑氛围编程是否合理,这反映了计算机科学与工程答案的冲突。
  • 工程实践依赖受控接口、测试预言、可复现流水线及可观测性,而非绝对确定性。
  • LLM辅助编程需在AI的非确定性与控制边界/输出验证需求间取得平衡。