Why is D slower than LuaJIT?
Andrei Alexandrescu
SeeWebsiteForEmail at erdani.org
Thu Dec 23 06:25:58 PST 2010
On 12/23/10 6:22 AM, spir wrote:
> On Wed, 22 Dec 2010 20:16:45 -0600
> Andrei Alexandrescu<SeeWebsiteForEmail at erdani.org> wrote:
>
>> Thanks for posting the numbers. That's a long time, particularly
>> considering that the two map instances don't do anything. So the bulk of
>> the computation is:
>>
>> auto L = iota(0.0, 10000000.0);
>> auto V = reduce!"a + b"(L3);
>>
>> There is one inherent problem that affects the speed of iota: in iota,
>> the value at position i is computed as 0.0 + i * step, where step is
>> computed from the limits. That's one addition and a multiplication for
>> each pass through iota. Given that the actual workload of the loop is
>> only one addition, we are doing a lot more work. I suspect that that's
>> the main issue there.
>>
>> The reason for which iota does that instead of the simpler increment is
>> that iota must iterate the same values forward and backward. Using ++
>> may interact with floating-point vagaries, so the code is currently
>> conservative.
>
> There is a point I don't understand here: Iota is a range-struct template, with
> void popFront()
> {
> current += step;
> }
You need to look at this specialization:
http://www.dsource.org/projects/phobos/browser/trunk/phobos/std/range.d#L3800
and keep in mind Simen's explanation.
Andrei
More information about the Digitalmars-d
mailing list