X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=doc%2Fc-sharp;h=b65be0db90c0e82c96a7b6d7f13e68122b7af469;hb=d8c00f792a886e5a2179b36c8aeb663c3a20d0aa;hp=62f3ebd7aac631ec5d6d4f6ca18650e2b3606b94;hpb=bcb98694451fb09a7e0b05de9b85aad73bf3cfdd;p=mono.git diff --git a/doc/c-sharp b/doc/c-sharp index 62f3ebd7aac..b65be0db90c 100644 --- a/doc/c-sharp +++ b/doc/c-sharp @@ -1,15 +1,19 @@ * MCS: The Ximian C# compiler - MCS began as an experiment to learn the features of C# by - writing a large C# program. MCS is currently able to parse C# - programs and create an internal tree representation of the - program. MCS can parse itself. + MCS is currently able to compile small C# programs (there is + a test suite included that you can use). + + All type, field, method, delegates definitions are now emitted + and the body of constructors and methods is being generated + for a subset of the language. Although MCS can parse itself, + it cant not yet compile itself. Most statements are generated + correctly and about 80% of the C# expressions are supported. Work is progressing quickly on various fronts in the C# - compiler. Recently I started using the System.Reflection API - to load system type definitions and avoid self-population of - types in the compiler and dropped my internal Type - representation in favor of using the CLI's System.Type. + compiler. + + A test suite is being built currently to track the progress of + the compiler. ** Phases of the compiler @@ -42,10 +46,9 @@ have to postpone this decision until the above steps are finished. - * Code generation: nothing done so far, but I do not - expect this to be hard, as I will just use - System.Reflection.Emit to generate the code. - + * Code generation: The code generation is done through + the System.Reflection.Emit API. + @@ -54,32 +57,50 @@ Simple tasks: - Critical tasks: + Larger tasks: + + Interesting and Fun hacks to the compiler: + + ** Questions and Answers @@ -118,19 +139,53 @@ A: No, currently I am using Jay which is a port of Berkeley Yacc to In the future I want to port one of the Bison/Java ports to C# for the parser. -Q: How do I compile it? +Q: Should someone work on a GCC front-end to C#? + +A: I would love if someone does, and we would love to help anyone that + takes on that task, but we do not have the time or expertise to + build a C# compiler with the GCC engine. I find it a lot more fun + personally to work on C# on a C# compiler, which has an intrinsic + beauty. + + We can provide help and assistance to anyone who would like to work + on this task. + +Q: Should someone make a GCC backend that will generate CIL images? + +A: I would love to see a backend to GCC that generates CIL images. It + would provide a ton of free compilers that would generate CIL + code. This is something that people would want to look into + anyways for Windows interoperation in the future. + + Again, we would love to provide help and assistance to anyone + interested in working in such a project. + +Q: What about making a front-end to GCC that takes CIL images and + generates native code? + +A: I would love to see this, specially since GCC supports this same + feature for Java Byte Codes. You could use the metadata library + from Mono to read the byte codes (ie, this would be your + "front-end") and generate the trees that get passed to the + optimizer. + + Ideally our implementation of the CLI will be available as a shared + library that could be linked with your application as its runtime + support. + + Again, we would love to provide help and assistance to anyone + interested in working in such a project. + +Q: But would this work around the GPL in the GCC compiler and allow + people to work on non-free front-ends? -A: Compiling MCS currently requires you to run my port of Jay to - C# on a Unix system to generate the parser, and then you need - to use Microsoft's .NET csc.exe compiler to compile the compiler. +A: People can already do this by targeting the JVM byte codes (there + are about 130 compilers for various languages that target the JVM). - You only need to compile the compiler compiler (C code), the - samples are Java samples that I did not port, and you do not need - them. +Q: Why are you writing a JIT engine instead of a front-end to GCC? - It might be simple to port Jay.cs to Windows, but I have not tried - this. +A: The JIT engine and runtime engine will be able to execute CIL + executables generated on Windows. You might also want to look at the GCC section on the main FAQ