Writing/Creating files at compile-time

Rikki Cattermole via Digitalmars-d digitalmars-d at puremagic.com
Sun Aug 9 21:09:22 PDT 2015


On 10/08/2015 9:48 a.m., JDemler wrote:
> On Sunday, 9 August 2015 at 14:00:55 UTC, Rikki Cattermole wrote:
>> On 10/08/2015 1:57 a.m., cym13 wrote:
>>> On Sunday, 9 August 2015 at 13:51:21 UTC, Andrei Alexandrescu wrote:
>>>> On 8/9/15 5:07 AM, JDemler wrote:
>>>>> We can read files at compile-time:
>>>>>
>>>>>    enum file = import(fileName);
>>>>>
>>>>> But we cannot write to a file or create files at compile time.
>>>>>
>>>>> Generating code at compile-time and mixing it in is fun but has a few
>>>>> flaws.
>>>>> It isn't debuggable, the generated code cannot be directly
>>>>> inspected (we
>>>>> have to use pragma(msg, )) and it is not possible to manually tweak
>>>>> it.
>>>>>
>>>>> If we could generate source files (.d) at compile time and then import
>>>>> them using mixins or something else, these problems can be dealt with.
>>>>
>>>> I think this is an interesting pursuit that closes the circle on a
>>>> number of issues, such as debuggability and compilation speed of mixin
>>>> code. -- Andrei
>>>
>>> The moment this is added to D, we will have two complete languages in
>>> one: an interpreted one at compile-time and another at runtime.
>>>
>>> While I find this interesting, I wonder wether this is  a good idea
>>> or not.
>>
>> I'm actually at the point where I believe the addition of string
>> import was a bad one. No. I prefer preprocessing into a D file first.
>> It irks me, you have to be pretty careful with them, but at least a
>> preprocessed file you know _exactly_ where all files need to be for CT.
>
> Consider vibe.d's diet templates: They are compiled into d code using
> information of the types provided by the user.
> Without string imports at compile-time that would either result in a
> two-step compile process or would rely on run-time type information.
> Both is nothing I would like to use.
>
> Imagine the .dt files could be compiled into .dt.d files and then
> imported at compile-time. The development process would be much easier
> (debugging and examining the source files becomes trivial) and the usage
> would be more transparent (I see what my .dt file gets compiled into)
> and would have faster compile times (as Andrei mentioned).

Yeah this is the main use case. I just like being devils advocate a bit 
too much atm.


More information about the Digitalmars-d mailing list