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)
