gpt4 book ai didi

Haskell:我应该使用 Data.Text.Lazy.Builder 来构造我的 Text 值吗?

转载 作者:行者123 更新时间:2023-12-04 19:04:10 26 4
gpt4 key购买 nike

我正在开发一个构建大量 Data.Text 的大型应用程序。即时值(value)。我一直在构建我所有的 Text使用 (<>) 的值和 Data.Text.concat .

我最近才知道 Builder 的存在类型。 Beginning Haskell书中有这样的说法:

Every time two elements are concatenated, a new Text value has to be created, and this comes with some overhead to allocate memory, to copy data, and also to keep track of the value and release it when it's no longer needed... Both the text and bytestring packages provide a Builder data type that can be used to efficiently generate large text values. [pg 240]



然而,这本书并没有给出任何关于“大文本值”的确切含义的指示。

所以,我想知道我是否应该重构我的代码以使用 Builder .也许你可以帮助我做出这个决定。
具体来说,我有这些问题:

1) 关于何时应该选择 Builder 是否有任何指南或“最佳实践”?过度串联?或者,我怎么知道给定的 Text值足够“大”,值得使用 Builder ?

2) 正在使用 Builder “不费吹灰之力”,还是值得在进行大规模重构之前进行一些分析以确认其好处?

谢谢!

最佳答案

Data.Text.concatO(n+m)操作位置nm是你想要的字符串的长度concat .这是因为一个大小为 n + m 的新内存缓冲区必须分配以存储连接的结果。
Builder专门针对 mappend 进行了优化手术。这是一个便宜的O(1)操作(功能组合,GHC也进行了出色的优化)。与 Builder您实际上是在构建有关如何生成最终字符串结果的说明,但会延迟实际创建,直到您执行一些 Builder -> Text转型。

要回答您的问题,您应该选择Builder如果您分析了您的应用程序并发现 Text.concat正在主导运行时间。这显然取决于您的需求和应用程序。什么时候应该使用 Builder 没有一般规则。但简称 Text文字可能没有必要。

如果使用 Builder,分析肯定是值得的将涉及“进行大规模重构”。尽管毫无疑问,Haskell 自然会使这种重构变得比您习惯使用对开发人员不太友好的语言所带来的痛苦要少得多,因此这可能并不是一项艰巨的任务。

关于Haskell:我应该使用 Data.Text.Lazy.Builder 来构造我的 Text 值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29102772/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com