使用unsafePerformIO合适吗?

是否正在使用unsafePerformIO来允许只读IO调用适当的纯代码中的不变文件,否则会导致很多问题?

主要原因是因为我想将它们存储在容器中,例如使它们成为Ord一个实例,但我似乎无法想象如何在不将unsafePerformIO IO调用包装的情况下这样做。


关于安全

按照您描述的方式使用unsafePerformIO不应引起任何问题。

拇指规则是:如果您使用unsafePerformIO来定义一个可以在Haskell中定义的函数,那么您就可以安全地使用它。

在你的情况下,你基本上使用它来达到在代码中定义一些固定值的相同效果。 也就是说,您可以将只读的不变文件包含在源代码中,但需要将大量数据保存在内存中。 所以你的使用是安全的。

例如,如果您发明了一种利用固定的100MB数据表的素数测试,那么使用unsafePerformIO访问包含它的不可变文件是没问题的。 这将交易代码纯度以实现性能(内存占用),而不会影响安全性。

在适当性

由于unsafePerformIO确实是不安全的(证明程序安全的责任在你身上),所以它应该被视为最后的手段,而且绝对不是读取文件内容的默认方式。

很难理解您的案例是否真正证明使用unsafePerformIO 。 你应该更详细地描述你试图达到的目标。

我猜想,如果你的程序要读取文件并将其全部内容存储在内存中,那么你将不会从unsafePerformIO获得性能优势,而应该使用纯代码。

链接地址: http://www.djcxy.com/p/43233.html

上一篇: Use of unsafePerformIO appropriate?

下一篇: Is spoon unsafe in Haskell?