【问题标题】:Eliminate Haskell array bounds check for Bounded type?消除有界类型的 Haskell 数组边界检查?
【发布时间】:2014-02-12 01:48:56
【问题描述】:

我正在制作许多索引类型为Bounded 且索引范围为(minBound, maxBound) 的数组。对于这样的数组,边界检查应该是不必要的。如何说服 GHC 取消边界检查?

我的特定应用程序同时使用装箱和未装箱的不可变数组,但我对所有类型的 Haskell 数组都感兴趣。

【问题讨论】:

  • 那么,它是什么数组类型?只是Data.Array.IArray吗?

标签: arrays haskell ghc bounds-check-elimination


【解决方案1】:

导入Data.Array.Base,计算所需元素的Int索引,然后使用

someArray `unsafeAt` computedIndex

避免范围检查(unsafeReadunsafeWrite 用于可变数组)。如果您使用import GHC.Arr,则可以通过Ix 类中的unsafeIndex 获得不带范围检查的Int 索引的计算应该

如果您的索引类型的Ix 实例不提供快速未检查的unsafeIndex 函数,您必须自己编写它。无论如何,这可能更可取,因为您的范围 (minBound, maxBound) 是恒定的,不需要传递给索引计算。

【讨论】:

    猜你喜欢
    • 2012-03-07
    • 2014-03-09
    • 1970-01-01
    • 1970-01-01
    • 2015-05-29
    • 1970-01-01
    • 2022-01-13
    • 2014-07-13
    • 1970-01-01
    相关资源
    最近更新 更多