DConf 2014 Day 1 Talk 4: Inside the Regular Expressions in D by Dmitry Olshansky

Colin via Digitalmars-d-announce digitalmars-d-announce at puremagic.com
Thu Jun 12 05:45:53 PDT 2014


On Thursday, 12 June 2014 at 12:31:09 UTC, Dicebot wrote:
> On Thursday, 12 June 2014 at 10:40:56 UTC, Colin wrote:
>> Maybe a change to the compiler to write any mixin'd string out 
>> to a temporary file (along with some identifier information 
>> and the line of code that generated it) and at the next 
>> compilation time try reading it back from that file iff the 
>> line of code that generated it hasnt changed?
>>
>> Then, there'd be no heavy work for the compiler to do, apart 
>> from read that file in to a string.
>
> Compiler can cache return value of function that get called 
> from inside mixin statement (for a given argument set). As CTFE 
> is implicitly pure (no global state at compile-time) later 
> generated code can be simply re-used for same argument set.
>
> Re-using it between compiler invocations is more tricky because 
> it is only legal if generator function and all stuff they 
> indirectly use have not changed too. Ignoring this requirement 
> can result in nasty build issues that are only fixed by clean 
> build. Too harmful in my opinion.

Yeah, it quite dangerous I agree. I was only thinking of a 
solution to the problem above where a ctRegex is compiled every 
time, whether it was changed or not.

I'm sure theres some way of keeping track of all dependent D 
modules filename, and if any of them have been changed in the 
chain, recalculate the string mixin.

Only trouble with that is, there'd be a good chunk of checking 
for every mixin, and would slow the compiler down in normal use 
cases.


More information about the Digitalmars-d-announce mailing list