2012-07-31 87 views
4

我知道Data.TextString = [Char]更有效地存儲字符串數據。不過,我在圖書館看到的一些函數似乎期望傳遞給他們一個StringChar的鏈表似乎效率低下,因爲指針會佔用比字符串本身更多的空間。除了列表融合(這可能並不總是可能的),GHC是否對[Char]的存儲進行了優化,並且它是否將類似的原則應用於其他列表?GHC:Haskell字符串優化

+0

我懷疑有太多的字符串特定的優化 - 看起來你可以做的任何事情來改善一個字符列表也可以做到的Ints列表或任何你想要的。 – 2012-07-31 04:03:33

回答

5

之所以所有的基本庫函數使用String,而不是一個更有效的類型是需要Text文本庫不是基礎庫的一部分。但是,文本庫提供了各種輸入/輸出功能的變體。你可以在Data.Text.IO找到它們。

另請注意,對於高效的I/O,您通常會使用像導管,迭代或管道之類的現代抽象技術之一。

2

在GHC下,String在平均情況下使用5 words per code point。但是,這可以通過運行時預先分配ASCII範圍中的字符來緩解。

-1

Here就是答案。

字節串的是有點像列表,只有每個元素的大小是一個字節(或8位)。他們處理懶惰的方式也不同。

+0

ByteStrings表示可以表示任何類型數據的字節序列,而String和Text則用於Unicode文本。他們是兩個不同的東西。 – AardvarkSoup 2012-08-05 20:00:20