Mono 0.10

Release date: 27 Mar 2002

Hello everyone!

Mono “Self Hosting” 0.10 is out! (Alex insisted I used the <blink> tag for “Self Hosting”, but was dissapointed when he realized most mailers dont support this).

Too many things have happened since the the 0.9 release, almost an entire month. The big news is that we are shipping a the self-hosting Mono C# compiler. This has been tested on Linux/x86 only.

Also, we delayed the release for one reason or other, but it turns out that as a extra bonus, Paolo fixed the last outstanding bug in the JIT engine, so the compiler now runs in the JIT engine instead of the interpreter.

The mono-0.10 release includes the libraries required to run the compiler as well as assorted .NET programs [1].

What is new

There is so much stuff in this release that is hard to keep track of it.

Jason, Kral and Duncan have done an amazing job with System.Xml, up to the point that it is even being used by gtk-sharp’s code generator (and it all comes with great test suites to verify that it works!). Ajay’s XmlSchema code is also shipped.

Martin worked on our debugging infrastructure (the JIT can load dwarf files, and our class libraries now generate dwarf debugging info; we are in the process of adding this to the compiler, the patch did not make it to this release though).

For the first time the System.Web assembly has built without all the excludes, so you can get your hands on Gaurav and Lee’s massive code base.

Lots of new tests to the runtime, class libraries and compiler are included. As always, big thanks go to Nick for continued guidance to new developers, and writing new tests.

Dan removed the System.PAL dependency, we now have moved to an internalcall setup for all the System.IO calls, and dropped the MonoWrapper shared library.

Porting wise: Sergey’s StrongARM port is included now; Jeff’s SPARC port and Radek’s PowerPC port have been updated to reflect the new changes in the engine.

Runtime wise: Dietmar also got us asyncronous delegates implemented. Dick continues his work on our foundation classes, and has resumed his work on the IO layer.

Paolo is the hero behind self hosting on Linux. Send your congrats (and wine) to him.

And without the help from Mike, Duco, David, Piers, Nick, Sergey, Mark, Jonathan, John, Adam and Dennis this release would have not been possible.

This release is mostly ECMA compatible. I did not expect this to happen so soon. I am very grateful to everyone who has made this happen

The goods

The runtime sources and binaries to the compiler/libraries:

The class and compiler sources:


You still need glib-2, and pkg-config. If you plan on compiling large applications, getting the Boehm GC is a plus (we will integrate this in a future version, for now it is an external requirement).

Boehm GC is available in packaged format for Debian and Red Hat systems.

To compile on Linux

Do your regular chores with mono-0.10.tar.gz, you know the drill. In the end, after you reach the make install phase, now you can do some cool stuff.

If you want to compile the compiler (just to try it out), untar the sources to the compiler (mcs-0.10.tar.gz) and do manually:

cd mcs-0.10
(cd jay; make)
(cd mcs; make monomcs)

Now you will end up with a nice mcs4.exe in the mcs/mcs directory, that is the compiler. If you want to use that, replace the mcs.exe we distribute with the mcs4.exe you got.


Man pages for mcs, mono and mint are included for your enjoyment.

Particularly of interest is mint --profile which is awesome to profile your application, the output is very useful.

Also, if you want to impress your friends, you might want to run the JIT with the `-d’ flag, that shows you how the JITer compiles the code (and shows the basic blocks and the forst of trees as it goes).

Next steps

More classes are missing. These are required so we can run nant and nunit natively. Once we achieve that, we will be able to ship a complete environment that compiles on Linux.

Currently our makefiles still use csc, as we still need nunit/nant to work.

[1] Of course, .NET programs that try to use classes we have not yet implemented, will be left wondering `why did this happen to me?’.