Request for comments: std.d.lexer

Dmitry Olshansky dmitry.olsh at gmail.com
Thu Feb 28 09:27:22 PST 2013


28-Feb-2013 13:09, Brian Schott пишет:
> On Saturday, 9 February 2013 at 07:55:04 UTC, Walter Bright wrote:
>> On 2/4/2013 7:19 PM, Brian Schott wrote:
>>> Still only half speed. I'm becoming more and more convinced that
>>> Walter is
>>> actually a wizard.
>>
>> I worship the Dark Arts.
>
> *recites incantations*
> *merges pull requests*
> *adds unit tests*
>
> http://hackerpilot.github.com/experimental/std_lexer/images/times4.png

Looking far better now. Keep in mind that we still don't use the 
original dmd's sentinel magic to avoid length check in std.d.lexer :)

Being that wizard who gave a couple of scrolls to Brain I'll outline 
some interesting data points collected while helping him out.

- D run-time takes some time to start up/shut down. It's on the order of 
1ms for me vs 1/10th of ms for plain C
- expanding on the previous point - GC.malloc takes sometime and 
triggers collections from time to time (2 collections to lex datetime, 
there is next to no garbage, but they run regardless).

Even simply disabling GC at first and re-enabling it at the end of 
program speeds up the whole time by roughly 5% on my machine.

- opApply is definitely slower then inlined range-based foreach loop 
even with scope delegate.

Other then this specifics the prime spells that give the performance are:

- don't use built-in AA or subtle allocations (avoid GC as far as you can)

- lean common path, keep there only the operations that are required in 
*every* code-path

- avoid ever doing the same work twice (redesign, hack and whatnot but 
don't do it)


-- 
Dmitry Olshansky


More information about the Digitalmars-d mailing list