【发布时间】:2012-02-15 18:59:38
【问题描述】:
我发现自己在我正在开发的 Haskell 程序中需要一个字符串表。特别是,我想要一个允许将任何字符串装入(例如)“原子”的系统;给定一个 Atom,您应该能够恢复它来自的原始字符串,并且(严格地)比较两个 Atom 的相等性应该与指针比较一样快(或几乎一样快)。
(可以很容易地为此功能设计一个引用透明的接口;实现将在内部使用unsafePerformIO,但库的用户不需要知道这些细节。)
Hackage 上提供的两个库似乎在正确的范围内:stringtable-atom 和 simple-atom。有没有人有使用这些库的经验?特别是,您有什么建议可以说明两者相比有什么好处?
【问题讨论】:
-
如果你打算将它与任何类型的多线程一起使用,我会怀疑这两个包。 stringtable-atom 包使用需要原子执行的 C 代码。 simple-atom 包使用
atomicmodifyIORef,但在可以再次调用insert函数的原子函数内部执行评估。情况不妙。编写线程安全的原子模块必须非常小心。 -
@augustss。的确!这就是为什么我要寻找现成的包装而不是自己动手的一个重要原因。 (事实上,我对这个分数的高度谨慎部分是由你不久前关于记忆的精彩博文引起的:)
-
也许我会上传另一个原子包。
-
哇!那将是非常友好的,虽然这真的没有必要——我可以尝试自己动手,尽管我的努力肯定不如你这样的大师:-)。如果你正在考虑做一个实现,我觉得理想情况下可以解决的问题不仅仅是字符串;根据实现路线,您可能应该能够使用 Eq 和 Cmp 或使用 Eq 和哈希函数“原子化”任何类型。
-
我已经有一个实现,但需要一些清理和调整。
标签: haskell