为什么范围如此具体?为什么不是 29 位宽或 32 位宽,为什么是 30 位宽?
理由是什么?标准(1)似乎没有给出它
我最终在Haskell Discourse 论坛上询问了这个谜团,那里提出了多种理论,直到一位用户能够确认这很可能确实是因为耶鲁哈斯克尔(正如 该评论已经推测的那样)。
Yale Haskell 将 Haskell 程序编译为 Common Lisp 程序。(具体来说,Yale Haskell 旨在在 Lucid Common Lisp、CMU Common Lisp (CMUCL) 或 Armed Bear Common Lisp (AKCL) 上运行)。Lisp(与 Haskell 不同)是一种完全动态类型的编程语言,需要在运行时保留所有类型信息。
CMUCL 采取的方法是使用三个较低位作为此类型信息的所有运行时值的标记 [1, 2]。为“偶数”和“奇数”小整数 ( s) 保留了两个位模式fixnum,以提供 30 位范围。
因此,如果将 Haskell 程序编译为 Common Lisp 程序,并且目的是fixnum为 Haskell重新使用 Lisp Int,那么它们的有效范围将仅为 30 位,换句话说就是范围[-2^29..2^29-1]。
在现代,这些都不再重要了,原因如下:
Int。fixnum