【问题标题】:GHC: Haskell string optimizationsGHC:Haskell 字符串优化
【发布时间】:2012-07-28 18:49:47
【问题描述】:

我知道Data.Text 是一种比String = [Char] 更有效的存储字符串数据的方式。但是,我在库中看到的许多函数似乎都希望将String 传递给它们。 Chars 的链表读取起来似乎效率很低,考虑到指针将占用比字符串本身更多的空间。除了列表融合(可能并不总是可行)之外,GHC 是否对 [Char] 的存储进行了任何优化,是否将类似的原则应用于其他列表?

【问题讨论】:

  • 我怀疑有太多特定于字符串的优化 - 似乎你可以做的任何事情来改进 Chars 列表也可以用于 Ints 列表或任何你想要的。

标签: list haskell ghc


【解决方案1】:

所有基础库函数都使用String 而不是更高效的类型的原因是Text 所需的text 库不是基础库的一部分。然而,文本库提供了它自己的各种输入/输出函数的变体。你可以在Data.Text.IO找到他们。

另请注意,对于高效的 I/O,您通常会使用现代抽象之一,例如管道、迭代器或管道。

【讨论】:

    【解决方案2】:

    在 GHC 下,String 在平均情况下使用 5 words per code point。但是,运行时预先分配 ASCII 范围内的字符这一事实可以缓解这种情况。

    【讨论】:

      【解决方案3】:

      Here 就是答案。

      Bytestring 有点像列表,只有每个元素的大小是一个字节(或 8 位)。他们处理懒惰的方式也不同。

      【讨论】:

      • ByteStrings 表示可以表示任何类型数据的字节序列,而 String 和 Text 用于 Unicode 文本。它们是两种不同的东西。
      猜你喜欢
      • 2011-08-20
      • 2019-12-04
      • 2015-03-31
      • 2011-06-12
      • 1970-01-01
      • 2012-07-09
      • 2022-07-28
      • 2017-06-10
      • 2010-11-29
      相关资源
      最近更新 更多