Thread overview | |||||||||
---|---|---|---|---|---|---|---|---|---|
|
June 21, 2013 Tips for fast string 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? |
June 21, 2013 Re: Tips for fast string concatenation? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Gary Willoughby | 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: http://dlang.org/phobos/std_array.html#.Appender |
June 21, 2013 Re: Tips for fast string concatenation? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Gary Willoughby | 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
|
June 21, 2013 Re: Tips for fast string concatenation? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Gary Willoughby | 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.
|
June 21, 2013 Re: Tips for fast string concatenation? | ||||
---|---|---|---|---|
| ||||
Posted in reply to monarch_dodra | 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:
>> 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.
It's worth pointing out that Appender supports ~= so it's very easy to swap it in, replacing builtin concatenation.
|
June 21, 2013 Re: Tips for fast string concatenation? | ||||
---|---|---|---|---|
| ||||
Posted in reply to John Colvin | > 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.
|
June 21, 2013 Re: Tips for fast string concatenation? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jonathan M Davis | 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:
>> 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.
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.
-Steve
|
Copyright © 1999-2021 by the D Language Foundation