Data.Text vs. Rope

jam*_*idh 14 haskell

我一直在研究绳索作为Data.Text的替代品,我喜欢我所看到的以至于我现在不得不问这个问题....有没有哪种情况下Data.Text会是更好的选择?

以下是引导我的要点(如果我错在任何这些上,请纠正我) -

  1. 单个叶节点绳内部(几乎)相同的东西作为一个Data.Text对象.单节点绳索与文本的开销很小,只是用于区分分支或叶子的单个位标志.如果你真的想要Data.Text,只需使用未分裂的绳索.

  2. 复杂性在绳索插入/删除(log(N)vs N)中普遍相等或更好,通过索引得到(log(N)/ N取决于树的深度对N).

  3. 我已经读过绳索的成功证明是c中的混合包,因为线程安全代码损害了性能.然而,这些问题在不可变的Haskell中无关紧要.事实上,在我看来,因此,Haskell和绳索是彼此的理想选择.

再次,就像我以前的类似问题一样,我对结构的抽象质量更感兴趣,而不是当前的情况(库使用,代码的强化程度等).如果你明天重写了Haskell库,你会用Data.Rope替换Data.Text吗?

Phi*_* JF 8

"打包阵列的手指树"似乎是一个很好的表示选择,虽然我会担心不断的开销.使用积极的流式激情和其他一些短字符串优化的努力可能会解决这个问题,但Data.Rope缺乏这些功能.现在Data.Rope不是真正的Data.Text替代品.

  1. 它主要实现字节串而不是charachters字符串 - 它取代了byteString而不是text.Unicode支持很重要.
  2. 尽管爱德华的惊人之处,但绳索并不是那么成熟.它在一年内没有任何贡献,很少使用.
  3. Data.Text 它背后有巨大的工程努力,经过高度优化,众所周知且文档齐全

  • 字符串与字符串绝对不是*实现细节. (4认同)