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.
-
- * Extern declarations are missing.
-
+ 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.
-
- * Finish constant folding, it is complete enough
- to compile itself, but it is lacking error reporting.
+ If this tool is further expanded to perform constant folding
+ (not needed for our C# compiler, as it is already in there)
+ and dead code elimination, other compiler authors might be
+ able to use this generic CIL optimizer in their projects
+ reducing their time to develop a production compiler.
- * Redo the way we deal with built-in operators.
-
+* Open bugs
- Interesting and Fun hacks to the compiler:
+ See the bugs page for more information.
-