GHC:Haskell字符串优化

4
我知道Data.TextString = [Char]更有效地存储字符串数据。然而,我在库中看到许多函数需要传递String。考虑到指针占用的空间比字符串本身还要大,链表形式的Char读取起来非常低效。除了列表融合(这可能并不总是可行),GHC是否对[Char]的存储进行了任何优化,并且是否将类似原理应用于其他列表?

我怀疑有太多针对字符串的优化方法——似乎你可以对字符列表进行的任何改进,也同样适用于整数列表或其他任何你想要的类型。 - Tikhon Jelvis
3个回答

5
所有基础库函数都使用String而非更高效的类型,是因为用于Texttext库不包括在基础库中。不过,text库提供了自己的各种输入/输出函数变量,你可以在Data.Text.IO中找到它们。

此外,请注意,要实现高效的输入/输出,通常需要使用像conduits、iteratees或pipes这样的现代抽象。

2
在GHC下,String在平均情况下每个代码点使用5个字。然而,这被运行时预分配ASCII范围内的字符所缓解。

-1

这里是答案。

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


ByteStrings代表字节序列,可以表示任何类型的数据,而String和Text则用于Unicode文本。它们是两个不同的东西。 - AardvarkSoup

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接