faster "stringification"

Nicholas Wilson via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sat Dec 10 18:46:58 PST 2016


On Sunday, 11 December 2016 at 02:09:41 UTC, Orut wrote:
> D nub here. I have a Python script that I'd like to implement 
> in D. For certain parts, the D equivalent was slower than 
> Python's. For example,
>
> Python code:
>
> #dummy code
> s = ["abc", "fjkd", "L", "qwa", "r", "uw", "tiro", "bc", "sg", 
> "k", "jds", "yd"];
>
> for i in range(10000000):  # a lot of array to string 
> conversions
>     '-'.join(s)    # not assigning this to a variable to 
> simplify comparison
>
>
> D code:
>
> import std.stdio;
> import std.array;
>
> void main(string[] args){
>     string[] s = ["abc", "fjkd", "L", "qwa", "r", "uw", "tiro", 
> "bc", "sg", "k", "jds", "yd"];
>     for(int i; i<10_000_000; i++) s.join("-"); //see Python 
> comments
>
> }
>
> Python was 2x faster.
>
> How should I implement this in D?

join performs allocations which is probably the reason for its 
slowness. There is joiner (in std.algorithm.iterations) that 
lazily performs the join, (though in the case of this "benchmark" 
will be cheating because you don't do anything with the result, 
print it to get a more fair comparison) avoiding allocation.

see also appender (in std.array) for fast concatenation.


More information about the Digitalmars-d-learn mailing list