为了拯救 C,我们必须拯救 ABI
To Save C, We Must Save ABI

虽然我在之前的文章中猛烈抨击过 ABI 稳定性,甚至认为它阻碍了技术发展,但这次我要反转立场。尽管 Jason Turner 在 C++ Weekly 中主张打破 ABI 来拯救 C++,但我意识到,对于 C 语言而言,情况截然不同。C 的 ABI 问题不仅关乎 C 本身,更因为 C++ 几乎全盘继承了 C 标准库,导致 C 的 ABI 缺陷会波及整个软件生态。通过展示 `long long` 与 `__int128_t` 在函数调用中寄存器使用的差异,我揭示了编译器与调用者之间那份无形的二进制契约。一旦这份契约被破坏,即使链接器没有报错,程序也会因寄存器约定不匹配而产生难以察觉的严重错误。
这不是源代码层面的契约,而是编译器代表你与其他编译器及其他机器之间缔结的契约。
HN 评论区
156- davemp
著名的 C 语言困境:我们想尽可能贴近底层机器,却又不想在机器发生变化时做任何改动。
- usrnm
此前带有评论的相关提交:
- 2023-06-10,64 分,16 条评论:(https://news.ycombinator.com/item?id=36249253)
- 2022-03-13,175 分,129 条评论:(https://news.ycombinator.com/item?id=30660528)
- codeflo
洋洋洒洒数千字,归根结底就是