Thread overview
Why does Reggae use mixins?
Apr 15, 2016
Nordlöw
Apr 16, 2016
Nordlöw
Apr 16, 2016
Atila Neves
April 15, 2016
Why does the build system Reggae use mixins everywhere in the D examples?

Doesn't this severly limit what the build rules are capable of in terms of run-time flexibility?

https://github.com/atilaneves/reggae
April 16, 2016
On Friday, 15 April 2016 at 13:18:46 UTC, Nordlöw wrote:
> Why does the build system Reggae use mixins everywhere in the D examples?
>
> https://github.com/atilaneves/reggae

Correction, it can do stuff either at CT or run-time as show here:

https://github.com/atilaneves/reggae/blob/master/doc/basics.md

Could somebody highlight when either is adviced?
April 16, 2016
On Saturday, 16 April 2016 at 13:04:24 UTC, Nordlöw wrote:
> On Friday, 15 April 2016 at 13:18:46 UTC, Nordlöw wrote:
>> Why does the build system Reggae use mixins everywhere in the D examples?
>>
>> https://github.com/atilaneves/reggae
>
> Correction, it can do stuff either at CT or run-time as show here:
>
> https://github.com/atilaneves/reggae/blob/master/doc/basics.md
>
> Could somebody highlight when either is adviced?

Mixins are used so a D build description can be written at module-scope, thereby looking like a scripting language. The only reason this is important is to enable builds that have run-time logic, which is pretty much all of the high-level rules (since they have to read the file system).
the build template mixin doesn't have to be used, the only thing reggae wants from a build description written in D is that there be one and exactly one function with the signature:

Build func();

That's the function that gets called to generate the build. Since I'm lazy I created a template mixin to write the function for me, which again means that all definitions can be at module-scope.
Basically it's so that the file looks like:

alias exe = executable!(...);
mixin build!(exe);

Instead of:

Build myBuild() {
    auto exe = executable(...);
    return Build(exe);
}


Atila