digitalmars.D.learn - Tips for fast string concatenation?
- Gary Willoughby (11/11) Jun 21 2013 Have you any tips for using D when you need fast string
- Vladimir Panteleev (3/4) Jun 21 2013 You'll want to use appender, from std.array:
- Jonathan M Davis (7/23) Jun 21 2013 In general, ~= will be faster, beacause it won't create temporaries like...
- Steven Schveighoffer (6/25) Jun 21 2013 I believe the above is one call to the runtime.
- monarch_dodra (3/14) Jun 21 2013 Regardless of whether you end up using lots of ~=, or Appender
- John Colvin (3/22) Jun 21 2013 It's worth pointing out that Appender supports ~= so it's very
- Namespace (1/3) Jun 21 2013 This works since 2.062 AFAIK. So is still quite new.
Have you any tips for using D when you need fast string concatenation? I regularly use code like this: foreach (i, range) { foo ~= bar; } or: foo = foo ~ bar ~ baz ~ qux; I've used std.string.format(...) in some instances which sped things up which surprised me. Are there faster ways of appending strings?
Jun 21 2013
On Friday, 21 June 2013 at 10:09:10 UTC, Gary Willoughby wrote:Are there faster ways of appending strings?You'll want to use appender, from std.array:
Jun 21 2013
On Friday, June 21, 2013 12:09:09 Gary Willoughby wrote:Have you any tips for using D when you need fast string concatenation? I regularly use code like this: foreach (i, range) { foo ~= bar; } or: foo = foo ~ bar ~ baz ~ qux; I've used std.string.format(...) in some instances which sped things up which surprised me. Are there faster ways of appending strings?In general, ~= will be faster, beacause it won't create temporaries like concatenating a bunch of strings in a single expression would. However, if you want faster appending, generally the thing to use is std.array.Appender. And if you want to use format strings, it can be used with std.format.formattedWrite. - Jonathan M Davis
Jun 21 2013
On Fri, 21 Jun 2013 06:14:38 -0400, Jonathan M Davis <jmdavisProg gmx.com> wrote:On Friday, June 21, 2013 12:09:09 Gary Willoughby wrote:I believe the above is one call to the runtime. To answer the OP, using reserve will speed up the allocation quite a bit. Appender is certainly the fastest method. -SteveHave you any tips for using D when you need fast string concatenation? I regularly use code like this: foreach (i, range) { foo ~= bar; } or: foo = foo ~ bar ~ baz ~ qux; I've used std.string.format(...) in some instances which sped things up which surprised me. Are there faster ways of appending strings?In general, ~= will be faster, beacause it won't create temporaries like concatenating a bunch of strings in a single expression would.
Jun 21 2013
On Friday, 21 June 2013 at 10:09:10 UTC, Gary Willoughby wrote:Have you any tips for using D when you need fast string concatenation? I regularly use code like this: foreach (i, range) { foo ~= bar; } or: foo = foo ~ bar ~ baz ~ qux; I've used std.string.format(...) in some instances which sped things up which surprised me. Are there faster ways of appending strings?Regardless of whether you end up using lots of ~=, or Appender (possibly with formattedWrite), using reserve never hurts.
Jun 21 2013
On Friday, 21 June 2013 at 11:33:29 UTC, monarch_dodra wrote:On Friday, 21 June 2013 at 10:09:10 UTC, Gary Willoughby wrote:It's worth pointing out that Appender supports ~= so it's very easy to swap it in, replacing builtin concatenation.Have you any tips for using D when you need fast string concatenation? I regularly use code like this: foreach (i, range) { foo ~= bar; } or: foo = foo ~ bar ~ baz ~ qux; I've used std.string.format(...) in some instances which sped things up which surprised me. Are there faster ways of appending strings?Regardless of whether you end up using lots of ~=, or Appender (possibly with formattedWrite), using reserve never hurts.
Jun 21 2013
It's worth pointing out that Appender supports ~= so it's very easy to swap it in, replacing builtin concatenation.This works since 2.062 AFAIK. So is still quite new.
Jun 21 2013