Utf8 to Utf32 cast cost

Marco Leise via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Wed Jun 10 11:02:27 PDT 2015


Am Mon, 8 Jun 2015 12:59:31 +0200
schrieb Daniel Kozák via Digitalmars-d-learn
<digitalmars-d-learn at puremagic.com>:

> 
> On Mon, 08 Jun 2015 10:41:59 +0000
> Kadir Erdem Demir via Digitalmars-d-learn
> <digitalmars-d-learn at puremagic.com> wrote:
> 
> > I want to use my char array with awesome, cool std.algorithm 
> > functions. Since many of this algorithms requires like slicing 
> > etc.. I prefer to create my string with Utf32 chars. But by 
> > default all strings literals are Utf8 for performance.
> > 
> > With my current knowledge I use to!dhar to convert Utf8[](or 
> > char[]) to Utf32[](or dchar[])
> > 
> > dchar[] range = to!dchar("erdem".dup)
> > 
> > How costly is this?
> 
> import std.conv;
> import std.utf;
> import std.datetime;
> import std.stdio;
> 
> void f0() {
>     string somestr = "some not so long utf8 string forbenchmarking";
>     dstring str = to!dstring(somestr);
> }
> 
> 
> void f1() {
>     string somestr = "some not so long utf8 string forbenchmarking";
>     dstring str = toUTF32(somestr);
> }
> 
> void main() {
>     auto r = benchmark!(f0,f1)(1_000_000);
>     auto f0Result = to!Duration(r[0]);
>     auto f1Result = to!Duration(r[1]);
>     writeln("f0 time: ",f0Result);
>     writeln("f1 time: ",f1Result);
> }
> 
> 
> /// output ///
> f0 time: 2 secs, 281 ms, 933 μs, and 8 hnsecs
> f1 time: 600 ms, 979 μs, and 8 hnsecs
> 

Please have the result of the transcode influence the program
output. E.g. Add the first character of the UTF32 string to
some global variable and print it out. At the moment - at
least in theory - you allow the compiler to deduce f0/f1 as
pure, return-nothing functions and you will benchmark anything
from your written code to an empty loop. I'm talking out of
experience here:
https://github.com/mleise/fast/blob/master/source/fast/internal.d#L99

-- 
Marco



More information about the Digitalmars-d-learn mailing list