@@ -138,50 +138,50 @@ builder remains as fast as before and now is a clear champion.
138138
139139## Benchmarks for ` Text `
140140
141- Measured with GHC 9.6 on aarch64:
141+ Measured with GHC 9.12 on aarch64:
142142
143143| Group / size| ` text ` | ` text-builder ` | | This package| |
144144| ------------| -----:| -------------:| -:| -----------:| -:|
145145| ** Text** ||||||
146- | 1| 47.4 ns| 24.2 ns| 0.51x | 35.2 ns| 0.74x |
147- | 10| 509 ns| 195 ns| 0.38x | 197 ns| 0.39x |
148- | 100| 4.94 μs| 1.74 μs| 0.35x | 1.66 μs| 0.34x |
149- | 1000| 52.6 μs| 17.0 μs| 0.32x | 15.0 μs| 0.28x |
150- | 10000| 646 μs| 206 μs| 0.32x | 155 μs| 0.24x |
151- | 100000| 12.2 ms| 3.34 ms| 0.27x | 2.60 ms| 0.21x |
152- | 1000000| 159 ms| 55.3 ms| 0.35x | 16.1 ms| 0.10x |
146+ | 1| 63.3 ns| 30.8 ns| 0.49x | 60.5 ns| 0.95x |
147+ | 10| 764 ns| 267 ns| 0.35x | 319 ns| 0.42x |
148+ | 100| 7.53 μs| 2.48 μs| 0.33x | 2.61 μs| 0.35x |
149+ | 1000| 80.5 μs| 26.7 μs| 0.33x | 23.1 μs| 0.29x |
150+ | 10000| 949 μs| 319 μs| 0.34x | 242 μs| 0.26x |
151+ | 100000| 18.5 ms| 8.22 ms| 0.44x | 2.36 ms| 0.13x |
152+ | 1000000| 216 ms| 107 ms| 0.49x | 22.9 ms| 0.11x |
153153| ** Char** ||||||
154- | 1| 46.9 ns| 21.1 ns| 0.45x | 22.3 ns| 0.48x |
155- | 10| 229 ns| 152 ns| 0.66x | 79.9 ns| 0.35x |
156- | 100| 2.00 μs| 1.23 μs| 0.61x | 618 ns| 0.31x |
157- | 1000| 21.9 μs| 10.3 μs| 0.47x | 6.28 μs| 0.29x |
158- | 10000| 285 μs| 153 μs| 0.54x | 68 .5 μs| 0.24x |
159- | 100000| 7.70 ms| 4.08 ms| 0.53x | 992 μs| 0.13x |
160- | 1000000| 110 ms| 106 ms| 0.96x | 9.19 ms| 0.08x |
154+ | 1| 49.0 ns| 34.8 ns| 0.71x | 38.1 ns| 0.78x |
155+ | 10| 365 ns| 293 ns| 0.80x | 117 ns| 0.32x |
156+ | 100| 3.20 μs| 2.38 μs| 0.74x | 804 ns| 0.25x |
157+ | 1000| 35.4 μs| 18.4 μs| 0.52x | 7.68 μs| 0.22x |
158+ | 10000| 460 μs| 265 μs| 0.58x | 86 .5 μs| 0.19x |
159+ | 100000| 12.7 ms| 6.96 ms| 0.55x | 930 μs| 0.07x |
160+ | 1000000| 175 ms| 178 ms| 1.02x | 10.5 ms| 0.06x |
161161| ** Decimal** ||||||
162- | 1| 97.7 ns| 872 ns| 8.92x | 80.2 ns| 0.82x |
163- | 10| 864 ns | 8.72 μs| 10.09x | 684 ns | 0.79x |
164- | 100| 9.07 μs| 93.5 μs| 10.32x | 7.25 μs| 0.80x |
165- | 1000| 92.4 μs| 1.06 ms | 11.44x | 67.5 μs| 0.73x |
166- | 10000| 1.13 ms| 13.4 ms| 11.88x | 667 μs | 0.59x |
167- | 100000| 18.7 ms| 141 ms| 7.57x | 7.57 ms| 0.41x |
168- | 1000000| 229 ms| 1.487 s| 6.48x | 67.8 ms| 0.30x |
162+ | 1| 148 ns| 490 ns| 3.30x | 126 ns| 0.85x |
163+ | 10| 1.34 μs | 4.80 μs| 3.57x | 1.07 μs | 0.80x |
164+ | 100| 14.3 μs| 53.6 μs| 3.76x | 10.8 μs| 0.76x |
165+ | 1000| 148 μs| 738 μs | 5.00x | 106 μs| 0.72x |
166+ | 10000| 1.66 ms| 19.8 ms| 11.96x | 1.05 ms | 0.63x |
167+ | 100000| 28.3 ms| 251 ms| 8.88x | 10.7 ms| 0.38x |
168+ | 1000000| 334 ms| 2.803 s| 8.40x | 108 ms| 0.32x |
169169| ** Hexadecimal** ||||||
170- | 1| 403 ns| 749 ns| 1.86x | 43.9 ns| 0.11x |
171- | 10| 3.94 μs| 7.66 μs | 1.94x | 308 ns| 0.08x |
172- | 100| 42.8 μs| 89.0 μs| 2.08x | 2.88 μs| 0.07x |
173- | 1000| 486 μs| 986 μs| 2.03x | 27.7 μs| 0.06x |
174- | 10000| 7.10 ms| 12.6 ms| 1.77x | 283 μs| 0.04x|
175- | 100000| 80.1 ms| 133 ms| 1.65x | 3.53 ms| 0.04x |
176- | 1000000| 867 ms | 1.340 s| 1.55x | 28 .9 ms| 0.03x|
170+ | 1| 711 ns| 81.2 ns| 0.11x | 74.2 ns| 0.10x |
171+ | 10| 7.06 μs| 795 ns | 0.11x | 510 ns| 0.07x |
172+ | 100| 76.3 μs| 8.04 μs| 0.11x | 4.62 μs| 0.06x |
173+ | 1000| 862 μs| 141 μs| 0.16x | 44.6 μs| 0.05x |
174+ | 10000| 12.4 ms| 1.73 ms| 0.14x | 451 μs| 0.04x|
175+ | 100000| 138 ms| 20.4 ms| 0.15x | 4.52 ms| 0.03x |
176+ | 1000000| 1.502 s| 228 ms | 0.15x | 45 .9 ms| 0.03x|
177177| ** Double** ||||||
178- | 1| 7.56 μs| 18 .3 μs| 2.42x | 414 ns| 0.05x|
179- | 10| 76.5 μs| 188 μs| 2.46x | 4.23 μs| 0.06x |
180- | 100| 754 μs | 2.35 ms| 3.11x | 44.4 μs| 0.06x |
181- | 1000| 7.94 ms| 25.8 ms| 3.25x | 436 μs| 0.05x|
182- | 10000| 79.1 ms| 285 ms| 3.60x | 4.90 ms| 0.06x |
183- | 100000| 796 ms | 2.938 s| 3.69x | 45.1 ms| 0.06x |
184- | 1000000| 8.003 s| 32.411 s| 4 .05x| 436 ms| 0.05x|
178+ | 1| 13.4 μs| 35 .3 μs| 2.63x | 638 ns| 0.05x|
179+ | 10| 137 μs| 393 μs| 2.88x | 6.52 μs| 0.05x |
180+ | 100| 1.35 ms | 5.62 ms| 4.15x | 67.9 μs| 0.05x |
181+ | 1000| 14.2 ms| 71.9 ms| 5.05x | 671 μs| 0.05x|
182+ | 10000| 143 ms| 750 ms| 5.25x | 7.18 ms| 0.05x |
183+ | 100000| 1.435 s | 7.941 s| 5.53x | 70.4 ms| 0.05x |
184+ | 1000000| 14.366 s| 101.342 s| 7 .05x| 689 ms| 0.05x|
185185
186186If you are not convinced by synthetic data,
187187here are benchmarks for
@@ -207,53 +207,55 @@ customAttribute
207207## Benchmarks for ` ByteString `
208208
209209Somewhat surprisingly, ` text-builder-linear ` now offers rendering to strict ` ByteString `
210- as well. It is consistently faster than ` bytestring ` when a string gets over 32k
210+ as well. It gets consistently faster than ` bytestring `
211+ in all benchmarks except ` Double ` ones
212+ once a string gets over 32k
211213(which is ` defaultChunkSize ` for ` bytestring ` builder). For mid-sized strings
212214` bytestring ` is slightly faster in certain disciplines, mostly by virtue of using
213215` cbits ` via FFI, while this package remains 100% native Haskell.
214216
215- Benchmarks below were measured with GHC 9.6 on aarch64 and include comparison
217+ Benchmarks below were measured with GHC 9.12 on aarch64 and include comparison
216218to [ ` bytestring-strict-builder ` ] ( https://hackage.haskell.org/package/bytestring-strict-builder ) :
217219
218220| Group / size| ` bytestring ` | ` …-strict-builder ` | | This package| |
219221| ------------| -----------:| -----------------:| -:| -----------:| -:|
220222| ** Text** ||||||
221- | 1| 106 ns| 33.5 ns| 0.32x | 35.2 ns| 0.33x |
222- | 10| 322 ns| 217 ns| 0.68x| 197 ns| 0.61x |
223- | 100| 2.49 μs| 1.89 μs| 0.76x | 1.66 μs| 0.67x |
224- | 1000| 21.8 μs| 18.5 μs| 0.85x | 15.0 μs| 0.69x |
225- | 10000| 231 μs| 212 μs| 0.92x | 155 μs| 0.67x |
226- | 100000| 3.97 ms| 3.54 ms| 0.89x | 2.60 ms| 0.66x |
227- | 1000000| 81.2 ms| 51.5 ms| 0.63x | 16.1 ms| 0.20x|
223+ | 1| 156 ns| 55.9 ns| 0.36x | 60.5 ns| 0.39x |
224+ | 10| 552 ns| 374 ns| 0.68x| 319 ns| 0.58x |
225+ | 100| 4.71 μs| 3.25 μs| 0.69x | 2.61 μs| 0.55x |
226+ | 1000| 41.7 μs| 31.9 μs| 0.76x | 23.1 μs| 0.56x |
227+ | 10000| 438 μs| 366 μs| 0.84x | 242 μs| 0.55x |
228+ | 100000| 7.58 ms| 6.52 ms| 0.86x | 2.36 ms| 0.31x |
229+ | 1000000| 112 ms| 88.1 ms| 0.78x | 22.9 ms| 0.20x|
228230| ** Char** ||||||
229- | 1| 99.0 ns| 19.4 ns| 0.20x | 22.3 ns| 0.23x |
230- | 10| 270 ns| 82.9 ns| 0.31x | 79.9 ns| 0.30x |
231- | 100| 1.77 μs| 723 ns | 0.41x | 618 ns| 0.35x |
232- | 1000| 20 .4 μs| 8.37 μs| 0.41x | 6.28 μs| 0.31x |
233- | 10000| 322 μs| 129 μs| 0.40x | 68 .5 μs| 0.21x |
234- | 100000| 10.4 ms| 2.50 ms| 0.24x | 992 μs| 0.10x |
235- | 1000000| 143 ms| 67.4 ms| 0.47x | 9.19 ms| 0.06x |
231+ | 1| 138 ns| 30.9 ns| 0.22x | 38.1 ns| 0.28x |
232+ | 10| 408 ns| 136 ns| 0.33x | 117 ns| 0.29x |
233+ | 100| 2.96 μs| 1.25 μs | 0.42x | 804 ns| 0.27x |
234+ | 1000| 30 .4 μs| 14.2 μs| 0.47x | 7.68 μs| 0.25x |
235+ | 10000| 394 μs| 218 μs| 0.55x | 86 .5 μs| 0.22x |
236+ | 100000| 11.8 ms| 4.00 ms| 0.34x | 930 μs| 0.08x |
237+ | 1000000| 161 ms| 112 ms| 0.69x | 10.5 ms| 0.07x |
236238| ** Decimal** ||||||
237- | 1| 152 ns| 174 ns| 1.14x | 80.2 ns| 0.53x |
238- | 10| 685 ns | 1.55 μs| 2.26x | 684 ns | 1.00x |
239- | 100| 5.88 μs| 17.2 μs| 2.93x | 7.25 μs| 1.23x |
240- | 1000| 60.3 μs| 196 μs| 3.25x | 67.5 μs| 1.12x |
241- | 10000| 648 μs | 4.25 ms| 6.57x | 667 μs | 1.03x |
242- | 100000| 11.2 ms| 62.8 ms| 5.62x | 7.57 ms| 0.68x |
243- | 1000000| 150 ms| 655 ms | 4.37x | 67.8 ms| 0.45x |
239+ | 1| 209 ns| 295 ns| 1.41x | 126 ns| 0.60x |
240+ | 10| 1.10 μs | 2.67 μs| 2.43x | 1.07 μs | 0.98x |
241+ | 100| 9.76 μs| 29.8 μs| 3.05x | 10.8 μs| 1.11x |
242+ | 1000| 100 μs| 340 μs| 3.40x | 106 μs| 1.06x |
243+ | 10000| 1.02 ms | 7.32 ms| 7.15x | 1.05 ms | 1.02x |
244+ | 100000| 14.6 ms| 103 ms| 7.04x | 10.7 ms| 0.73x |
245+ | 1000000| 179 ms| 1.233 s | 6.87x | 108 ms| 0.60x |
244246| ** Hexadecimal** ||||||
245- | 1| 94.7 ns||| 43.9 ns| 0.46x |
246- | 10| 255 ns||| 308 ns| 1.21x |
247- | 100| 1.72 μs||| 2.88 μs| 1.67x |
248- | 1000| 18.9 μs||| 27.7 μs| 1.46x |
249- | 10000| 250 μs||| 283 μs| 1.13x |
250- | 100000| 6.94 ms||| 3.53 ms| 0.51x |
251- | 1000000| 93.2 ms||| 28 .9 ms| 0.31x |
247+ | 1| 131 ns||| 74.2 ns| 0.57x |
248+ | 10| 360 ns||| 510 ns| 1.42x |
249+ | 100| 2.76 μs||| 4.62 μs| 1.68x |
250+ | 1000| 28.6 μs||| 44.6 μs| 1.56x |
251+ | 10000| 330 μs||| 451 μs| 1.37x |
252+ | 100000| 7.30 ms||| 4.52 ms| 0.62x |
253+ | 1000000| 103 ms||| 45 .9 ms| 0.45x |
252254| ** Double** ||||||
253- | 1| 457 ns||| 414 ns| 0.91x |
254- | 10| 3.94 μs||| 4.23 μs| 1.07x |
255- | 100| 40.3 μs||| 44.4 μs| 1.10x |
256- | 1000| 398 μs||| 436 μs| 1.10x |
257- | 10000| 5.65 ms||| 4.90 ms| 0.87x |
258- | 100000| 63.3 ms||| 45.1 ms| 0.71x |
259- | 1000000| 673 ms||| 436 ms| 0.65x |
255+ | 1| 456 ns||| 638 ns| 1.40x |
256+ | 10| 3.58 μs||| 6.52 μs| 1.82x |
257+ | 100| 36.2 μs||| 67.9 μs| 1.87x |
258+ | 1000| 367 μs||| 671 μs| 1.83x |
259+ | 10000| 5.17 ms||| 7.18 ms| 1.39x |
260+ | 100000| 59.0 ms||| 70.4 ms| 1.19x |
261+ | 1000000| 605 ms||| 689 ms| 1.14x |
0 commit comments