No -c no main()

Mike Parker aldacron at gmail.com
Fri Mar 20 04:11:38 PDT 2009


Yigal Chripun wrote:
> Mike Parker Wrote:
> 
>> Yigal Chripun wrote:
>>> On 19/03/2009 12:19, Walter Bright wrote:
>>>> It's a good idea. Please add to bugzilla as an enhancement request!
>>> another thing that can be done is provide a compiler flag to specify the 
>>> module that contains main() so the compiler will use that specific main 
>>> and ignore all others. this is similar to how you specify the class with 
>>> main() method in Java. Jar files have a manifest with this info and in 
>>> Eclipse you specify the class in the Run dialog. I don't remember how it 
>>> works with the command line (actually, I don't remember ever using the 
>>> command line with Java)
>> It's not something that happens at compile time. All existing main 
>> methods are compiled into their respective class files. From the command 
>> line, you execute the JRE (java or javaw in Sun's case) and pass it the 
>> name of the class you want to execute. If the class has a main method, 
>> it is called. If not, you get an error.
> 
> Java's model is complicated. it has the concept of class-loaders. 
> What I'm suggesting is this: 
> given three modules a,b and c all defining the main() function, you can do the following:
> dmd a.d b.d c.d --main=b.d 
> currently the compiler will complain about multiple definitions of main(), but with the above flag, it could skip over the main() functions in a and c. 
> 
> the next logical step would be to allow:
> dmd -c a.d
> dmd -c b.d 
> dmd -c c.d
> dmd a.obj b.obj c.obj --main=b.obj
> 
> in the above all three obj files have a main() method. this time it must be the *linker* that needs to understand the flag and only link the main() function into the executable. this requires changing the linker which is written in asm so less likely to happen. 
> 
> I was not suggesting D to use a VM or the class-loader concept as in Java. even if we want that concept in D it needs to have a different implementation than in Java since there are problems with the way Java does this. (that's besides the differences due to the JVM)

I understand what you were suggesting. My point is that in Java, which 
entry point to use is decided at run time, not compile time. From that 
perspective, it's a useful feature. For a statically compiled language 
like D, I don't see any obvious benefit. I mean, what is the benefit of 
this over delegating to a specific pseudo-main method based on a 
commandline arg or config file?



More information about the Digitalmars-d mailing list