Tho*_*ing 20 text haskell bytestring
任何人都可以解释使用Data.Text和Data.ByteString.Char8数据类型的利弊吗?使用纯ASCII文本是否会改变这些优点和缺点?他们的懒惰变体也改变了故事吗?
ehi*_*ird 28
Data.ByteString.Char8提供将ByteString值视为8位ASCII字符序列的函数,同时Data.Text是支持整个Unicode的独立类型.
ByteString并且Text基本上表示相同 - 严格的,未装箱的数组,其中包含基于严格块列表的惰性变体.主要区别在于ByteString存储八位字节(即Word8s),而Text存储Chars,以UTF-16编码.
如果您正在使用仅ASCII文本,那么使用Data.ByteString.Char8可能会比Text使用更快,并且使用更少的内存; 但是,你应该问问自己,你是否真的确定你只会使用ASCII.基本上,在99%的情况下,使用Data.ByteString.Char8over Text是速度黑客 - 八位字节不是字符,任何Haskeller都同意使用正确的类型应该优先于原始的裸机速度.如果你已经分析了程序并且它是一个瓶颈,你通常应该只考虑它.Text经过充分优化,在大多数情况下差异可能微不足道.
当然,有与非速度相关的情况Data.ByteString.Char8是有保证的.考虑一个包含数据的文件,这些数据本质上是二进制的,而不是文本,但是分成行 使用lines是完全合理的.另外,完全可以想象整数可以在二进制格式的上下文中以ASCII十进制编码; readInt在这种情况下,使用会很有意义.
所以,基本上:
Data.ByteString.Char8:对于性能至关重要的纯ASCII情况,以及处理具有某些ASCII组件的"几乎二进制"数据.Data.Text:文本,包括除了使用ASCII之外最轻微的可能性的任何情况.| 归档时间: |
|
| 查看次数: |
2562 次 |
| 最近记录: |