Top 5
Sascha Katzner
sorry.no at spam.invalid
Sat Oct 11 03:16:43 PDT 2008
Benji Smith wrote:
> Actually, when it comes to string processing, D is decidedly *not* a
> "performance language".
>
> Compared to...say...Java (which gets a bum rap around here for being
> slow), D is nothing special when it comes to string processing speed.
>
> I've attached a couple of benchmarks, implemented in both Java and D
> (the "shakespeare.txt" file I'm benchmarking against is from the
> Gutenburg project. It's about 5 MB, and you can grab it from here:
> http://www.gutenberg.org/dirs/etext94/shaks12.txt )
>
> In some of those benchmarks, D is slightly faster. In some of them, Java
> is a lot faster. Overall, on my machine, the D code runs in about 12.5
> seconds, and the Java code runs in about 2.5 seconds.
>
> Keep in mind, all java characters are two-bytes wide. And you can't
> access a character directly. You have to retrieve it from the String
> object, using the charAt() method. And splitting a string creates a new
> object for every fragment.
>
> I admire the goal in D to be a performance language, but it drives me
> crazy when people use performance as justification for an inferior
> design, when other languages that use the superior design also
> accomplish superior performance.
I think your benchmark is not very meaningful. Without going into
implementation details of Tango (because I don't use Tango) here are
some notes:
- The D version uses UTF8 strings whereas the Java version uses
"wanna-be" UTF16 (Java has a lot of problems with surrogates). This
means you are comparing apples with pears (D has to *parse* an UTF8
string and Java simply uses an wchar array without proper surrogate
handling in *many* cases).
- At least in runCharIterateTest() you also convert the D UTF8 string
also additionally into an UTF32 string, in the Java version you did not
do this.
- The StringBuilder in the Java version is *much* faster because it
doesn't have to allocate a new memory block in each step. You can use a
similar class in D too, without the need of a special string class/object.
...
LLAP,
Sascha
More information about the Digitalmars-d
mailing list