Slower than Python

Steven Schveighoffer schveiguy at yahoo.com
Fri Mar 1 16:47:01 PST 2013


On Fri, 01 Mar 2013 19:19:35 -0500, cvk012c  
<cvk012c at motorolasolutions.com> wrote:

> On Friday, 1 March 2013 at 21:52:13 UTC, bearophile wrote:
>> cvk012c:
>>
>>> I think that similar Perl and Java scripts will outperform D easily.
>>> Thanks Andrei and simendsjo for a quick response though.
>>
>> Why don't you write a Java version? It takes only few minutes, and you  
>> will have one more data point.
>>
>
> You are right. Why not. But instead of using Java split() method I used  
> combination of indexOf() and substring() methods to do the same job. The  
> reason: Java split method implemented as a regular expression which will  
> be unfair to compare to D splitter. Again, I created a similar D version  
> of the script, compiled it with all suggested options:  -release -O  
> -inline -noboundscheck and this time D version is more then twice slower  
> than Java: 8.4 seconds vs 4.
> D experts, please, take a look at my code and tell me what is wrong with  
> it.

Try my hand-written version (elsewhere in thread).  I think it can be done  
better too (use pointers instead of arrays).

The issue is a combination of the fact that:
1. splitter is designed for any range, not just strings.  Not an excuse  
really, but a string-specific version could be written that does better  
(clearly).
2. dmd is not always the best optimizer.  I saw one other person who said  
using a different d compiler resulted in a quicker time.
3. Any time you are looping 10 million times, small insignificant  
differences will be magnified.

Note one other thing -- Be VERY wary of test cases that are fully-visible  
at compile time.  Very smart compilers are known to reduce your code to  
something that isn't realistic.  I remember seeing a similar comparison  
not too long ago where one wondered why g++ was so much faster (0.09  
seconds or something) than D (4 or more seconds).  Turns out, the g++  
compiler optimized out his ENTIRE program :).

You may want to read in the "message" string at runtime to avoid such  
issues.

-Steve


More information about the Digitalmars-d mailing list