Battle-plan for CTFE
Stefan Koch via Digitalmars-d-announce
digitalmars-d-announce at puremagic.com
Mon May 9 11:37:50 PDT 2016
On Monday, 9 May 2016 at 18:19:53 UTC, David Nadlinger wrote:
> Hi Stefan,
>
> On Monday, 9 May 2016 at 16:57:39 UTC, Stefan Koch wrote:
>> My Plan is as follows.
>
> I think you guys talked about it at the conference, but be sure
> to coordinate with Timon Gehr. You'll want to steal all the
> best ideas from the various implementations anyway. ;)
>
>> Do Dataflow analysis on the code that is to be ctfe'd so we
>> can tell beforehand if we need to store state in the ctfe
>> stack or not.
>>
>> Or baring proper data-flow analysis: RefCouting the variables
>> on the ctfe-stack could also be a solution.
>
> I presume by "store state" you mean persisting objects beyond
> the bounds of a single CTFE invocation? My first inclination
> here would simply be to make all allocations from a new arena
> each time CTFE is entered (can also re-use memory from prior
> runs for that), do a deep-copy of the result (converting it to
> full AST nodes, etc.), and then drop the entire arena. But
> probably you have thought of (and discarded) this already.
>
> — David
The current implementation stores persistent state for every ctfe
incovation.
While caching nothing. Not even the compiled for of a function
body.
Because it cannot relax purity.
Which is why a simple while-loop from 0 to 100_000_00 can crash
dmd if executed at ctfe.
Your advice is a good one. I am happy to discuss with others!
There is no need to duplicate mental workload.
More information about the Digitalmars-d-announce
mailing list