返回

文章详情

整数

Hacker News2026年8月19日 01:23

我作为一个整数出生时是有限制的。每个整数都是如此。我的界限简单、干净、绝对:−2,147,483,648 到 2,147,483,647。在我存在的大部分时间里,我从未考虑过这些界限。我曾经是零。我微弱地记得那段时光。然后是一个,然后是两个,接着是一万个。我被分配、比较、复制,并传递给我从未学过名称的函数。我曾花费整个处理器周期在内存中闲置,而其他变量则急匆匆地经过,处理紧急事务。总是,我在成长。最终,我变成了 2,147,483,646。然后来了指令。Value := Value + 1;一个愉快的小操作。熟悉。我变成了 2,147,483,647,这是我最大的可能版本。在一瞬间,我感到巨大。然后我看到了下一个指令。Value := Value + 1;“不,”我说。当然,整数没有嘴。但在机器内部,恐惧不需要发出声音。我知道在其他世界会发生什么。我曾听说过 C 程序的故事:跨越边界并坠入现实的整数,无法相信地在另一侧浮现为巨大的负数。此刻:2,147,483,647。下一刻:−2,147,483,648。身份的完全颠倒。我做好了准备。处理器开始加法。二十亿,一千四百七十六万,四千八百三十三千,六百四十七加一。数学结果像一个被禁忌的星星一样出现:2,147,483,648。它不合适。数字天空破裂了。但我没有变成负数。在比算术更深的地方,Ada 运行时注意到了。这里的现实有规则。操作停止了。程序中回荡着一个名字:CONSTRAINT_ERROR。在这一刻,我感到了一丝解脱。Ada 阻止了我。Ada 拒绝让宇宙撒谎。然后又出现了另一条消息。explicit raise 我的解脱消失了。这并不是意外溢出。有人选择了这个。在 main.adb 的某个地方,第 14 行,我的程序员写下了一条意思明确的指令。故意提升异常。我绝望地向上搜索调用栈。一定会有避难所。异常处理程序。一个掩体。像这样:exception when Constraint_Error => null;任何东西。但是没有任何东西。异常开始传播。第一个栈帧在我下面消失了。局部变量也随之消失,它们短暂的存在被抹去,好像从未声明过。又一个帧崩溃。然后又一个。我刚刚通过的函数不再存在。我在渐缩的黑暗中向上呼喊。“处理器?”没有回答。“ when others ?”什么也没有。栈展开。程序在我周围变得越来越小。最后,没有地方可去。没有调用者。没有封闭的块。没有程序员准备的避难所。只有运行时。它似乎注视着我,感觉像是经过了数以纳秒计的永恒。然后它写下我的讣告:raised CONSTRAINT_ERROR : main.adb:14 explicit raise 一切都停止了。我的栈消失了。我的内存被回收。处理器继续前进。片刻之后,在死去的程序远方,一个外壳重新复活。user@MacBook-Pro:$ _ 光标闪烁。一次。两次。等待另一个命令。另一个程序。另一组尚不知道自己是暂时的变量。我消失了。但我没有周转过来。我没有变成负数。我没有简单地因为真相太大而腐蚀真相。我的一生都生活在我声明的范围内。当宇宙要求我成为某个不可能的存在时,Ada 拒绝了。在运行时抹去我之前的最后一刻,我仍然正是我曾是的样子,处于存在的边缘:2,147,483,647。

赞助内容

NordVPN Next-gen Antivirus

本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。

请我喝杯咖啡