X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=web%2Fc-sharp;h=ffa0b574bef43950ccb928ef65edad10ff7409fe;hb=feca28835d4e3cb2be67bdcbd4f54fee62c3797a;hp=d90a01602f7d3761693961ddbfee17913ed1839e;hpb=8d1912017aabfb274d5a47d663b46dd4d0c12763;p=mono.git diff --git a/web/c-sharp b/web/c-sharp index d90a01602f7..ffa0b574bef 100644 --- a/web/c-sharp +++ b/web/c-sharp @@ -1,22 +1,42 @@ * MCS: The Ximian C# compiler - MCS is currently able to compile many C# programs (there is - a test suite included that you can use). + The Mono C# compiler is considered feature C# 1.0 complete at + this point and mature. MCS is able to compile itself and many + more C# programs (there is a test suite included that you can + use). It is routinely used to compile Mono, roughly 1.7 + million lines of C# code. - 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. + The compiler is also fairly fast. On a IBM ThinkPad t40 it + compiles 18,000 lines of C# code per second. - The compiler can compile itself, but the resulting image contains - a few errors that we are quickly fixing. + Work on C# 2.0 has started: some pieces of it are available on + the standard compiler with the -2 switch (iterators, method + conversions) and some others are available on the `gmcs' + branch on CVS (generics) - MCS was able to parse itself on April 2001, MCS compiled itself - for the first time on December 28 2001. We hope to have the compiler - self hosting on Linux by the end of January. +** Obtaining MCS - A test suite is being built currently to track the progress of - the compiler and various programs are routinely compiled and - ran. + 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 on Windows with both the + .NET runtime and the Mono 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 @@ -51,49 +71,81 @@ * Code generation: The code generation is done through the System.Reflection.Emit API. - - -** Current pending tasks +** CIL Optimizations. - Simple tasks: + The compiler performs a number of simple optimizations on its input: + constant folding (this is required by the C# language spec) and + can perform dead code elimination. - + Other more interesting optimizations like hoisting are not possible + at this point since the compiler output at this point does not + generate an intermediate representation that is suitable to + perform basic block computation. - Larger tasks: + Adding an intermediate layer to enable the basic block + computation to the compiler should be a simple task, but we + are considering having a generic CIL optimizer. Since all the + information that is required to perform basic block-based + optimizations is available at the CIL level, we might just skip + this step altogether and have just a generic IL optimizer that + would perform hoisting on arbitrary CIL programs, not only + those produced by MCS. - +* Open bugs - Interesting and Fun hacks to the compiler: + See the bugs page for more information. - +** History + + 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. ** Questions and Answers +Q: Does the Mono C# compiler support C# 2.0? + +A: At this point the Mono C# compiler supports some of the features of + C# 2.0, but the support has not been completed. To enable 2.0 features + you must use the -2 flag to the compiler. + +Q: What features are available as of Feb 2004? + +A: Iterators have been implemented as well as method group implicit + conversion to delegates on the main compiler branch. + + We have a branch of the compiler in the module `mcs/gmcs' which is + where we are developing the Generics support for the compiler. Plenty + of tests work (see mcs/tests/gen-*.cs for a list of tests), but work + remains to be done. + +Q: Will the C# 2.0 features be part of the Mono 1.0 release? + +A: Only a few, the generic compiler will not be part of the 1.0 + stable release, but a beta preview will be distributed. + Q: Why not write a C# front-end for GCC? A: I wanted to learn about C#, and this was an exercise in this