[Mono-dev] misc: C# request info
cr88192 at hotmail.com
Sat Feb 21 17:42:34 EST 2009
well, I was looking into C# some, and admittedly I have much less
fammiliarity with the language than with others...
(I have started looking at ECMA-334 some, but it is long and a little
awkward to answer specific questions from absent some digging...).
so, firstly, it is my guess that in order to compile C# properly, it is
required to load a whole group of files at once (I am uncertain whether the
term 'assembly' also applies to the collection of input source files, or
only to a produced DLL or EXE).
my guess is that it works like this:
the group of files is loaded;
each file is preprocessed and parsed (it is looking like C# uses a
all of the namespaces and declarations are "lifted out" of the parse trees;
each file's parse tree can then be compiled.
from what I can tell, types are like this:
type = <qualifiers>* <type-name>
so, I can type:
static Foo bar;
and the parser will know that 'Foo' is the type, even if the type for Foo is
not visible at the time of parsing (in C, this can't be done since there is
no clear distinction or ordering between types and qualifiers, and so one
would not know if 'Foo' is the type, or an intended variable name with the
type being assumed to be 'int').
so, in C we can have:
unsigned int i;
int unsigned i;
int volatile i;
_Complex float f;
double _Complex g;
short int j;
int long k;
so, my guess then is that C# code is "just parsed", with no need to lookup,
for example, is Foo a "struct or class or other typedef'ed type?" ...
as far as the parser is concerned 'int' or 'byte' is syntactically not
different from 'Foo' or 'Bar'?...
More information about the Mono-devel-list