Mono 1.1.1 Development Release

Mono 1.1.1 is the first release on the development series
of Mono and it is not intended to be used for production as it
is undergoing internal changes. Those interested in a
production release should use the Mono 1.0.xx series.

The Mono 1.1.xx series will eventually lead to the next
stable milestone: Mono 1.2.

Important: Mono 1.1.1 can not be installed in
parallel with Mono 1.0.x series on the same prefix. To work
around this issue, you must use a different prefix at
configure time, for example:

$ ./configure --prefix=/devel

You can then setup your PATH to include /devel/bin to
access the Mono 1.1. Alternatively you can replace your Mono
installation with 1.1.1.

Installing Mono 1.1.1

Binary Packages:

Pre-compiled packages for SUSE 9, SUSE 9.1, Red Hat 9, SLES
8, Fedora Core 1, Fedora Core 2 and MacOS X are available from
our web site from the
download
section. A Red Carpet Mono channel is also available on these
platforms.

Changes since the Mono 1.0 release

The following is a high-level description of the changes in
the development release of Mono since the original Mono 1.0 release.

Mono Ports

The Mono JIT has been ported to two new architectures, and
another port has reached completion stage.

The engine is now 64-bit ready: the two new ports ports are
64-bit ports. Existing applications will automatically take
advantage of the larger address space on these systems.

AMD64: A 64 bit port done by Zoltan.

SPARC v9: Another 64 bit port done by
Zoltan.

S390: Neale has declared that the port is
now complete on the 1.1.1 branch.

Neale has also started a 64 bit port to the S390x
architecture, the code is included but it is not ready yet.

Runtime

Runtime detection: Implemented support for
side-by-side execution of applications that require
different runtime versions. Mono now will detect the
runtime version that an application requires (checking
the version number embedded in the assembly, or
looking at the application configuraion file if
available), and will load the appropiate mscorlib.dll
and machine.config. Thanks to this feature it is much
easier to test the new 2.0 libraries: an application
compiled with gmcs will be automatically executed in a
2.0 environment (Lluis).

ABC Elimination: A new, more complete and
more efficient implementation of the Array Bounds
Check Elimination has been checked in. Use the
-O=abcrem command line option to enable it.

KQueue support: KeventWatcher is a new
FileSystemWatcher backend for *BSD systems that will
default over the ManagedWatcher. The implementation
of this watcher gives significant performance gains
over the Managed watch in any place that a
FileSystemWatcher is used (ie; xsp/mod_mono).

Optimizations

Plenty of optimizations have been implemented at every
level: from low-level JIT optimizations to tuning and stress
testing the higher class libraries. For example, the C# compiler in the
1.1.x series is 20% faster over the 1.0.x series while doing
more work.

Some details:

Reduced GC roots: C static variables are no
longer GC roots. This greatly reduces the overhead of
garbage collection. It also reduces the false
retention of GC objects. This gave a few percent
improvement on MCS bootstrap. Also, it is a step
towards a precise GC. (Ben)

Fast path for GC: It now uses the thread
local cache, many allocations now can go through a
fast path (Ben).

Static Mono: Mono is now statically linked,
allowing the use of the special __thread compiler
directive in more places (Zoltan).

XSP: Performance of XSP has gone from 70
requests per second to 170 (and 220 for .ashx files. Also XSP
is no longer slower than Apache+mod_mono, it is now slightly
faster (Ben, Gonzalo)

XML: The DOM and XmlTextWriter performance
has also been improved (Atsushi).

C# Compiler: Ben solved a long-standing
optimization shortcoming in the compiler, now we
generate optimal code for ++ and -- operators.

Atsushi, Ben, Dick, Gonzalo, Paolo and Zoltan contributed
to many other tuneups.

Web Services

There are many improvements and bug fixes to the existing
core, in addition work has started on features from the .NET
2.0 stack:

WSDL improvements: New wsdl tool for the
2.x framwework, and a new option: -server to
support genreation of server-side skeletons in
addition to client-side stubs (Lluis)

In addition there is a new model for asynchronous calls and
a the new tool `sgen' to pre-generate serializers debuts, but
is still under development.

Security

Work on Code Access Security (CAS) from Sebastien
has started:

Evidences are now provided for AppDomains and assemblies.

System.Security.Permissions: is complete
(in mscorlib.dll). Most other permissions, in other assemblies, are also complete.

System.Security.Policy: is mostly complete and
basic security policies are supported.

Imperative demands: are now supported.
Declarative (attributes) are not yet supported.
Neither are Assert, Deny and PermitOnly.

Samples: MSDN library samples for
permissions and policies classes are now working.

SHA224 has been added to the Mono.Security assembly. The
certmgr tool is now able to manage the machine's store certificates in
addition to the user certificates.

monodis now support declarative security attributes in it's IL output.

C# language updates

We continue to ship two compilers: mcs and gmcs. The only
difference between those compilers is that the latter has
support for generics, but they share the rest of the features.

Static Classes: C# 2.0 feature, added by
Marek.

Partial Types: C# 2.0 feature, added by
Martin.

#pragma warning: C# 2.0 feature, added by
Marek.

We continue to improve the compiler to flag more errors for
incorrect constructs or provide more useful information to the
developer.

On this new release of the compiler, we have made the
warning level default to 4 from the regular 3.

Postgress: Npgsql

This update comes from Francisco: Added support for point,
box, lseg, path, polygon and
circle datatypes. Added NpgsqlDbType enumeration with all
supported types.

They are mapped to NpgsqlPoint, NpgsqlBox, NpgsqlLSeg,
NpgsqlPolygon and NpgsqlCircle respectively. Thanks Glen
Parker for help.

The following bugs have been fixed:

Added api documentation in code. Thanks Glen Parker. (No html generation
yet. This will be fixed in next release)

Fixed deserialization of NpgsqlException. There are some issues yet,
just the base message is being deserialized. Errors collection are null.
Thanks David Palmer (David dot Palmer at SensusTech dot com) for the
heads up and fix.

Improved Unicode encoding support. It was possible to characters in
unicode cross the stream buffer and be discarded. Now we use Decoders
which handle that situation. Thanks Oskars Ozols (oskars dot ozols at di
dot lv)

XQuery: It is based on the latest W3C
working draft and many of the XQuery expressions are
implemented as well as the early FLWOR support.
Operations on sequence types are not
supported. Functions won't work enough. It is still
highly unstable.

This work was done by Atsushi.

Basic Compiler

Anirban, Bernie, Jambunathan and Rafael have been making great
progress on the Basic compiler, at this point it is possible
to run ASP.NET applications, but work continues to refine the
compiler.

Unlike the C# case where we had a large body of code to
test against (the compiler, and later our class libraries),
there is less Visual Basic code to test against, so we depend
more on language tests for it, Sachin has been contributing to
this area.

Jochen Wezel provided quick feedback on the changes and
Rob Tillie helped with the VisualBasic.dll runtime.

C5 Class Library

We now distribute the C5 generics library created by Peter
Sestoft and Niels Jørgen. This library is currently used
mostly as large test case for the Generics edition of the C#
compiler as it is the largest body of template code for C#
available to this date.

We want to thank Peter and Niels for making their work
available under the MIT X11 license.

System.Drawing

Sanjay added support for multiple frames (gif and tiff) and
graphic control extension (gif). Animation along with
reduction in size of gif files saved.

ADO.NET

Suresh and Uma continued to fix the existing 1-0 API and
also have started on the 2.x API features:

Windows.Forms

A new implementation of Windows.Forms is in progress. This
new implementation is a completely managed implementation and
only uses a thin driver for interfacing with the host
windowing system. Two drivers are currently supported: Win32
and X11, volunteers are welcome to implement a driver for
Mac's CoreGraphics.

This team is currently composed of Jackson, Jordi, Peter
and Ravindra who are working exclusively on it.

Although the souce code is part of the distribution, no
binaries of the library can be distributed yet as it is not
complete enough to provide the APIs that other parts of the
class libraries require (this is only a build time issue for
us, it will be addressed in an upcoming version of the 1.1.x
series).

If you are interested in trying out the new version of
Windows.Forms, you should download the mcs package, configure,
and then do: