X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=web%2Fc-sharp;h=ffa0b574bef43950ccb928ef65edad10ff7409fe;hb=f0ec7f3bfaa78eadcf6a770735e543e6830342e4;hp=96cb836879875555fed53effc1c5bbab4d59a967;hpb=2bfb6c885de1a9b0378b1800d1c372db01c59a97;p=mono.git diff --git a/web/c-sharp b/web/c-sharp index 96cb8368798..ffa0b574bef 100644 --- a/web/c-sharp +++ b/web/c-sharp @@ -1,15 +1,42 @@ * 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. + 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. - 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. + The compiler is also fairly fast. On a IBM ThinkPad t40 it + compiles 18,000 lines of C# code per second. + + 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) + +** 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 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 @@ -42,62 +69,82 @@ 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: + 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. - + A test suite is maintained to track the progress of + the compiler and various programs are routinely compiled and + ran. - Critical tasks: +* Slides - +** History - Interesting tasks: + 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. - +Q: Does the Mono C# compiler support C# 2.0? -** Questions and Answers +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? @@ -123,6 +170,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 +184,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