Mono 0.7 has been released.
It has been a long time since the last release of Mono (almost three weeks). We have made an incredible ammount of work in the past three weeks.
Highlights of this release
The monoburg: BURS-instruction selector implemented (for our portable JIT engine).
JIT engine works for very simple programs (Fibonacci works for instance). It is about 30% faster running than the equivalent code compiled with Kaffe.
The interesting part is that this was accomplished with the a minimum register allocator, and very simple monoburg rules, so there is a lot of room to improve here.
The Interpreter has madured a lot. Value Types are fully supported now; We dropped the FFI dependency, as we now have our own code generator.
The runtime has been expanded and extended as to support real file I/O (including console I/O). So Hello World works in there.
The compiler can generate code for most statements now; It also performs semantic analysis on most expressions. Creation of new objects is supported, access to parameters, fields and local variables works. Method invocation works. Implicit type conversions, assignments and much more.
Operator overloading is implemented, but broken on this release, hopefully this will be fixed soon.
Delegates and Attributes are now declared and passed around, but no code generation for those exist yet.
More classes (look for details). Sergey and Paolo have been working on various classes in System.Reflection.Emit to get the compiler self-hosting.
NUnit is now part of the distribution, so it should be trivial to write test cases (and if you want to help out, this is one way to do it, we really need more tests cases).
I am going to try to switch to Nick’s JB for C# this week or next week. But the excitement of having the compiler deal with real C# programs is too much to be contained, and I can not keep my hands of the code generation in the compiler.
Class Library Changes
Many enumerations have been revamped to have the same value definitions as those in .NET as those cause problems. They were also missing the [Flags] attributes, so we got that right too.
- SerializableAttribute impl (Miguel)
- String updates (Jeff)
- System.Char (Ravi)
- ConfigurationSettings impl (Christopher Podurgiel)
- SingleTagSectionHandler impl (Christopher Podurgiel)
- DictionarySectionHandler impl (Christopher Podurgiel)
- NameObjectCollectionBase impl (Nick Drochak)
- StackFrame stubs (alexk)
- StackTrace stubs (alexk)
- File stubs (Jim Richardson)
- IOException impl (Paolo)
- StreamWriter impl (Dietmar)
- StreamReader stubs (Dietmar)
- ConnectionModes (Miguel)
- ProxyUseType (Miguel)
- WebStatus (Miguel)
- Assembly (stubs) (Paolo)
- MethodBase (Paolo)
- MethodInfo (Paolo)
- EventToken (Sergey)
- FieldToken (Sergey)
- FlowControl (Sergey)
- ILGenerator (stubbed) (Paolo)
- Label (Paolo)
- MethodToken (Sergey)
- OpCode.cs (Sergey)
- OpCodeType (Sergey)
- OpCodes.cs (Sergey)
- OperandType (Sergey)
- PEFileKinds (Paolo)
- PackingSize (Sergey)
- ParameterToken (Sergey)
- PropertyToken (Sergey)
- SignatureToken (Sergey)
- StackBehaviour (Sergey)
- StringToken (Sergey)
- TypeToken (Sergey)
- Most classes stubbed out by Dick Porter (Dick)
- HttpWorkerRequest stubs (Bob Smith)
- System.Web.Hosting (Bob Smith)
- AppDomainFactory stubs (Bob Smith)
- ApplicationHost stubs (Bob Smith)
- IAppDomainFactory stubs (Bob Smith)
- IISAPIRuntime stubs (Bob Smith)
- ISAPIRuntime stubs (Bob Smith)
- SimpleWorkerRequest stubs (Bob Smith)
- LiteralControl implemented (Bob * Smith)
- HtmlContainerControl bugfixes (Bob * Smith)
- HtmlAnchor impl (Leen Teolen)
- HtmlTextArea impl (Leen Teolen)
- WebControl.cs (Gaurav Vaish)
- Lots of enumerations (Miguel) (will add later)
- Add loads of enumerations throughout (Sergey) (will add later)
expression semantic analysis (Miguel)
constructor creation, chaining (Miguel)
Unified error reporting (Ravi)
initial attribute support (Ravi)
calling convention support (Miguel)
loop construct code generation (Miguel)
conditional statement code generation (Miguel)
indexer declarations (Ravi)
event declarations (Ravi)
try/catch parsing fixed (Ravi)
initial delegate support (Ravi)
operator overload (Ravi)
- Add NUnit windows binaries to distribution (Nick Drochak, Miguel)
First JIT implementation (Dietmar, Paolo)
value type size calculation (Dietmar)
full value type support (Paolo)
frequently used types cache (Paolo)
FileStream support (Paolo)
Console input/output support (Dietmar)
print arguments and exception name in stack trace (Paolo)
beginnings of virtual call support (Paolo)
reimplement pinvoke support (Dietmar)
remove libffi dependency (Dietmar)
IBURG code generator implementation (Dietmar)
new opcodes implemented: starg.s, ldobj, isinst, (Paolo, Miguel)
ldarg, starg, ldloc, ldloca, stloc, initobj, cpblk, sizeof, conv.i, conv.i1, conv.i2, conv.i4, conv.i8, conv.u1, conv.u2, conv.u4, conv.r4, conv.r8, ldelema, ceq, cgt, clt.
Parts of this list of features were compiled by Alex by following the CVS mailing list. My deepest thanks to Alex for helping me out with this. I want to apologize for the missing features that I did not document here, Mono is moving too fast to keep track of all the changes.