首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用unsafePerformIO合适吗?

使用unsafePerformIO合适吗?
EN

Stack Overflow用户
提问于 2014-02-08 22:34:18
回答 1查看 285关注 0票数 0

使用unsafePerformIO来允许对纯代码中的非更改文件进行只读IO调用合适吗?还是会导致很多问题?

主要原因是因为我希望将它们存储在容器中,例如,使它们成为Ord的实例,但我似乎无法想象如果不在unsafePerformIO中包装IO调用,该如何做到这一点。

EN

回答 1

Stack Overflow用户

发布于 2014-02-09 04:16:19

论安全

按照您所描述的方式使用unsafePerformIO应该不会造成任何问题。

经验法则是:如果你正在使用unsafePerformIO来定义一个函数,而这个函数在Haskell中没有它就可以定义,那么你就是在安全地使用它。

在您的示例中,您可以使用它来实现与在代码中定义某些固定值相同的效果。也就是说,您可以只在源代码中包含只读、不更改的文件,代价是将整个数据保留在内存中。所以你的使用是安全的。

例如,如果您发明了一个素数测试,它以某种方式利用了一个固定的100MB数据表,那么使用unsafePerformIO来访问包含它的不可变文件就可以了。这将以代码的纯洁性换取性能(内存占用),而不会影响安全性。

论适当性

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

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

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21647280

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档