D seems interesting, but...

foobar foo at bar.com
Mon Oct 15 07:29:41 PDT 2012


On Monday, 15 October 2012 at 13:11:29 UTC, bearophile wrote:
> Adam D. Ruppe:
>
>> You could just version it:
>>
>> version(foo_main)
>> void main() {}
>
> That's not good enough.
>
> What I as talking about is: when the D compilers know a module 
> is
> the main module, it defines a _standard_ version boolean flag,
> named like "is_main_module" as true. And it gives a compiler
> error if it can't find a main. Otherwise "is_main_module" is
> false.
>
> It's meant to be used as:
>
>
> module modulea;
> int foo() { return 0; }
> static if (is_main_module) {
>    unittest {}
>    void main() { // demo code
>      import std.stdio;
>      writeln(foo());
>    }
> }
>
>
>
> module moduleb;
> import modulea;
> int bar() { return 1; }
> static if (is_main_module) {
>    unittest {}
>    void main() { // demo code
>      import std.stdio;
>      writeln(foo());
>      writeln(bar());
>    }
> }
>
>
> When you compile modulea, defines its is_main_module as true, it
> runs its unittests (if you have used -unittest), and its main,
> that is a demo for the A module.
>
> If you compile the moduleb (with rdmd or something), it knows
> moduleb has to contain the main, it defines is_main_module=true
> in moduleb and defines is_main_module=false for modulea. So it
> compiles the main of moduleb and ignores the main of modulea. So
> it runs the demo code for moduleb only.
>
> Using a non-standard user-defined version as you suggest misses
> all this, and it's not good enough. Standardization and
> automation is important here.
>
> Bye,
> bearophile

I'm sorry to say but that *is* a _horrible_ _hack_. It looks 
almost as awful as it does in python with the underscores.

Java has the correct DRY solution - each class can define a 
static main method but the compiler only uses the one specified 
by a compiler switch.
The above basically asks the programmer to endlessly repeat the 
same trivial implementation boilerplate that should be written 
just once _in_ the compiler.


More information about the Digitalmars-d mailing list