* ILParser.jay: Add object to primative types
[mono.git] / web / c-sharp
index b65be0db90c0e82c96a7b6d7f13e68122b7af469..9d3499732e64f6a149864fee0e725613634228cc 100644 (file)
@@ -1,19 +1,49 @@
 * MCS: The Ximian C# compiler
 
-       MCS is currently able to compile small C# programs (there is
-       a test suite included that you can use).
+       MCS is currently 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 half a million
+       lines of C# code.
 
-       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.
+       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 (security attributes),
+       you can also browse the MCS <a href="http://bugzilla.ximian.com/buglist.cgi?product=Mono%2FMCS&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&email1=&emailtype1=substring&emailassigned_to1=1&email2=&emailtype2=substring&emailreporter2=1&changedin=&chfieldfrom=&chfieldto=Now&chfieldvalue=&short_desc=&short_desc_type=substring&long_desc=&long_desc_type=substring&bug_file_loc=&bug_file_loc_type=substring&keywords=&keywords_type=anywords&op_sys_details=&op_sys_details_type=substring&version_details=&version_details_type=substring&cmdtype=doit&newqueryname=&order=Reuse+same+sort+as+last+time&form_name=query">bugs</a> from Bugzilla.
 
-       Work is progressing quickly on various fronts in the C#
-       compiler.
+       A test suite is maintained to track the progress of
+       the compiler and various programs are routinely compiled and
+       ran.
 
-       A test suite is being built currently to track the progress of
-       the compiler.
+** Slides
+
+       Slides for the Mono C# Compiler presentation at .NET ONE are
+       available <a
+       href="http://primates.ximian.com/~miguel/slides-europe-nov-2002/Mono_C_Sharp_Overview_1007.sxi">here</a>
+       in StarOffice format.
+
+** Obtaining MCS
+
+       The Mono C# compiler is part of the `mcs' module in the Mono CVS
+       you can get it from our <a href="anoncvs.html">Anonymous CVS</a> server,
+       or you can get nightly <a href="download.html">download page</a>.
+
+** 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
 
 
                * Code generation: The code generation is done through
                  the System.Reflection.Emit API.
-
-       </ul>
-
-<a name="tasks">
-** Current pending tasks
-
-       Simple tasks:
-
-       <ul>
-               * PInvoke declarations are not supported.
-
-               * Extern declarations are missing.
-
-               * Pre-processing is not supported.
-
-               * Jay does not work correctly with `error'
-                 productions, making parser errors hard to point.  It
-                 would be best to port the Bison-To-Java compiler to
-                 become Bison-to-C# compiler. 
-                 
-                 Nick Drochak has started a project on SourceForge for this.
-                 You can find the project at: <a href="http://sourceforge.net/projects/jb2csharp/">
-                 http://sourceforge.net/projects/jb2csharp/</a>
        </ul>
 
-       Larger tasks:
-
-       <ul>
-               * Implement constant expression evaluator.
+** CIL Optimizations.
 
-               * Implement constant declarations.
-       </ul>
+       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.
 
-       Interesting and Fun hacks to the compiler:
+       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.  
 
-       <ul>
-               * Finishing the JB port from Java to C#.  If you are
-                 interested in working on this, please contact the project admin on SourceForge:
-                 <a href="http://sourceforge.net/projects/jb2csharp/">
-                 http://sourceforge.net/projects/jb2csharp/</a>
+       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.  
 
-                 More on JB at: <a href="http://www.cs.colorado.edu/~dennis/software/jb.html">
-                 http://www.cs.colorado.edu/~dennis/software/jb.html</a>
+       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. 
 
-                 JB will allow us to move from the Berkeley Yacc
-                 based Jay to a Bison-based compiler (better error
-                 reporting and recovery).
+** History
 
-               * Semantic Analysis: Return path coverage and
-                 initialization before use coverage are two great
-                 features of C# that help reduce the number of bugs
-                 in applications.  It is one interesting hack.
+       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. 
 
-       </ul>
+       The Mono Runtime and the Mono execution engine were able to make
+       our compiler self hosting on March 12, 2002.
 
 ** Questions and Answers
 
@@ -129,6 +141,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