X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=web%2Fc-sharp;h=fa4dad1d732fc629c355460e4055f62dd3ff55f6;hb=5bc50198763036923c94c011fa194b4707c27447;hp=96cb836879875555fed53effc1c5bbab4d59a967;hpb=2bfb6c885de1a9b0378b1800d1c372db01c59a97;p=mono.git diff --git a/web/c-sharp b/web/c-sharp index 96cb8368798..fa4dad1d732 100644 --- a/web/c-sharp +++ b/web/c-sharp @@ -1,15 +1,46 @@ * 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 itself and many more C# + programs (there is a test suite included that you can use). - 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. + We are in feature completion mode right now. There are still + a couple of areas that are not covered by the Mono compiler, but + they are very very few at this point. + + MCS was able to parse itself on April 2001, MCS compiled itself + for the first time on December 28 2001. MCS became self hosting + on January 3rd, 2002. + + The Mono Runtime and the Mono execution engine were able to make + our compiler self hosting on March 12, 2002. + + A test suite is maintained to track the progress of + the compiler and various programs are routinely compiled and + ran. + +** Obtaining MCS + + The Mono C# compiler is part of the `mcs' module in the Mono CVS + you can get it from our Anonymous CVS server, + or you can get nightly download page. + +** Running MCS + + MCS is written in C# and uses heavily the .NET APIs. MCS runs + on Linux (with the Mono runtime) and Windows (with the .NET + framework runtime) + +** Reporting Bugs in MCS + + When you report a bug, try to provide a small test case that would + show the error so we can include this as part of the Mono C# regression + test suite. + + If the bug is an error or a warning that we do not flag, write + a sample program called `csXXXX.cs' where XXXX is the code number + that is used by the Microsoft C# compiler that illustrates the + problem. That way we can also do regression tests on the invalid + input. ** Phases of the compiler @@ -42,59 +73,62 @@ 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. - -** Current pending tasks +** CIL Optimizations. - Simple tasks: - - + +** Current pending tasks - Critical tasks: + Simple tasks: - Interesting tasks: - + Larger tasks: ** Questions and Answers @@ -123,6 +157,10 @@ Q: If your C# compiler is written in C#, how do you plan on getting We will do this through an implementation of the CLI Virtual Execution System for Unix (our JIT engine). + Our JIT engine is working for the purposes of using the compiler. + The supporting class libraries are being worked on to fully support + the compiler. + Q: Do you use Bison? A: No, currently I am using Jay which is a port of Berkeley Yacc to @@ -133,5 +171,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: 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: People can already do this by targeting the JVM byte codes (there + are about 130 compilers for various languages that target the JVM). + +Q: Why are you writing a JIT engine instead of a front-end to GCC? + +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