No -c no main()
Yigal Chripun
yigal100 at gmail.com
Thu Mar 19 23:20:30 PDT 2009
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)
More information about the Digitalmars-d
mailing list