Freedom The Open Source Way Contribute Articles or News to OSForgeOSForge HomeLogout from Forums
Contacting OSForgeOSForge HomeAbout OSForge
  

Root
Contribute News
Learning Corner
Linux Distributions
Linux Common FAQ's
Discussion Forums
Community Gallery
Links Directory
Search OSForge
Networking
Industry Updates
Linux & Open Source
Opinions
Press Release
Programming
Security
Web Development

White Paper
Plat'Home Unveils Winners of “Will Linux Work?” Contest
Zenoss Core Recognized as Best Open Source Network Monitoring Solution
LinMin™ Joins Intel® Certified Software Solutions Program
xTuple™ ERP 3.0 Wins “Best Business Application” At LinuxWorld Conference & Exp
Holland Computing Center - Rocks+Moab Provides Windows/Linux Cluster Solution
LogMeIn Launches Mobile Plug-in for Linux
FuseMail Selects Funambol’s Open Source Push Email and PIM Sync Solution
Zenoss Expands IT Management Solution for Managed Service Providers
Moab Workload Manager Claims Title as World’s First Petaflop Scheduler

View More

MCS, The Ximian C# Compiler.
By : Eric Lim [www] Find more article by Eric Lim on Programming
Saturday the 27th, April 2002 at 01:49 PM (EDT)
Send this Story to a Friend Readers TalkBack (0) - 2491 Reads

Printer Friendly Page Printable format
Send this Story to a Friend Foward to Email

MCS is now able to compile itself and many C# programs. The completion of the features will be shipped very soon due to a couple of areas haven't been covered by Mono compiler.

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?their compiler self hosting on March 12, 2002.

The Mono C# compiler is part of "mcs" module in the Mono CVS that you can get it from go-mono website, which are Anonymous CVS?and download page.

MCS is written in C# and uses heavily the .NET APIs. MCS runs on Linux (with the Mono runtime) and Windows (with the .NET framework runtime)

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.

The compiler has a number of phases:

  • Lexical analyzer: hand-coded lexical analyzer that provides tokens to the parser.

  • The Parser: the parser is implemented using Jay (A Berkeley Yacc port to Java, that I ported to C#). The parser does minimal work and syntax checking, and only constructs a parsed tree.

    Each language element gets its own class. The code convention is to use an uppercase name for the language element. So a C# class and its associated information is kept in a "Class" class, a "struct" in a "Struct" class and so on. Statements derive from the "Statement" class, and Expressions from the Expr class.

  • Parent class resolution: before the actual code generation, we need to resolve the parents and interfaces for interface, classe and struct definitions.

  • Semantic analysis: since C# can not resolve in a top-down pass what identifiers actually mean, we have to postpone this decision until the above steps are finished.

  • Code generation: The code generation is done through the System.Reflection.Emit API.

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.

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.

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.

http://www.go-mono.com/c-sharp.html


  
Reader Rating from 1-5

 

Poor very 

1

2

3

4

5
 very Excellent

Talkback

Post Your Talkback | View All Talkback (0 Posted)


 Currently there are no Talkback posted on "MCS, The Ximian C# Compiler.", Click here to be the first to post a talkback.


 
Scroll Up

   About | Term of Use | Privacy | Contact us | Tell a Friend | Advertise  

OSForge News RSS Feed