2001-12-06 Miguel de Icaza <miguel@ximian.com>
[mono.git] / doc / c-sharp
index c11225d07e9129597848f351efaa9d20d1d823ab..b65be0db90c0e82c96a7b6d7f13e68122b7af469 100644 (file)
@@ -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
 
                  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.
+
        </ul>
 
 <a name="tasks">
        Simple tasks:
 
        <ul>
-               * Array declarations are currently being ignored, 
-
                * PInvoke declarations are not supported.
 
-               * Pre-processing is not supported.
-
-               * Attribute declarations and passing currently ignored.
+               * Extern declarations are missing.
 
-               * Compiler does not pass around line/col information from tokenizer for error reporting.
+               * 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 (bjepson@oreilly.com
-                 might have more information)
+                 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.
+
+               * Implement constant declarations.
        </ul>
 
        Interesting and Fun hacks to the compiler:
 
        <ul>
                * Finishing the JB port from Java to C#.  If you are
-                 interested in working on this, please contact Brian
-                 Jepson (bjepson at oreilly d-o-t com).
+                 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>
 
                  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>
                  features of C# that help reduce the number of bugs
                  in applications.  It is one interesting hack.
 
-               * TypeRefManager.  This exists currently in its infancy only. 
-
-               * Enum resolutions: it is another fun hack, as enums can be defined 
-                 in terms of themselves (<tt>enum X { a = b + 1, b = 5 }</tt>). 
-
        </ul>
 
 ** Questions and Answers
@@ -181,6 +187,5 @@ 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 <a href="faq.html#gcc">GCC</a>
 section on the main FAQ