gpt4 book ai didi

haskell - 有没有办法告诉 64 位 GHC 将 Int 视为 Int32?

转载 作者:行者123 更新时间:2023-12-03 13:08:24 24 4
gpt4 key购买 nike

我正在编写一个 Haskell 到 Javascript 代码生成器,使用 GHC 作为库。由于 Javascript 没有整数类型并且它的 Number 类型只能正确表示高达 2⁵³ 的整数,我将整数表示为 Numbers,明确执行所有算术模 2³²。这对于 32 位 GHC 非常有效,但对于 64 位版本则更糟。

GHC 很乐意将 Int64 值强制转换为 Int,并将 Int 常量解释为 64 位值(例如,0xffffffff 变成 4294967295 而不是 -1),这会导致各种烦人的问题。

如果标准库是在 32 位机器上构建的,那么编译器即使在 64 位系统上也能很好地处理“普通”网络内容,但是“请不要使用大数字,好吗?”不是您想在编译器手册中看到的内容。一些问题(但不是全部)可以通过使用 -O0 编译来缓解,但是(不出所料)产生的代码不仅速度慢,而且太大。

所以,我需要阻止 GHC 假设 Int 和 Int64 是等价的。这甚至可能吗?

最佳答案

如果不使用 32 位 GHC,这是不可能的。

关于 Int 类型,您唯一知道的 Haskell Language standard says 是它具有

at least the range [-2^29 .. 2^29-1



所以你可以愉快地截断大于这个的 Int 值,并且仍然是一个完全兼容的 Haskell 2010 实现!

但是,您可能不应该这样做,而应该为 JavaScript 寻找 64 位整数类型。与例如相同的技巧GHC 确实支持 32 位机器上的 Int64

关于haskell - 有没有办法告诉 64 位 GHC 将 Int 视为 Int32?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10498406/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com