Mono 3.0.4 released
Greetings to all of you open source patrons out there!
I've just received news of the latest release of Mono (3.0.4). The new release includes several major improvements and bug fixes. In this article, I'd like to provide a brief overview highlighting the major changes in the latest release of Mono.
So without further ado, here is a quick overview of what's offered in this version of the Mono project.
Improved garbage collection
The GC implementation has been given a makeover. These changes include:
A new approach called "cementing" has been added to the SGen concurrent garbage collector.
Mono allocates all new small objects in a defined memory space referred to as the nursery. When a collection occurs, the surviving objects become root objects and are copied to the major heap. Typically, few references that are allocated to the nursery survive to become roots, so the majority of the objects are instantly collected which leaves plenty of allocation space for new objects. These nursery collections minimize the work that must be done by the collector.
One of the problems with the garbage collection in previous versions of mono involved instances in which objects are "pinned" in the nursery (due to managed/unmanaged references or other operations). Objects that are "pinned" cannot be moved to the major heap.
Typically the collector must keep track of these "pinned" objects (and their relationships) and it rescans them on each collection attempt to try to see if they have been released and are able to be moved. This approach was an inefficient practice of the collector. This is where cementing comes in to play.
Cementing is a process by which references in the nursery that are pinned are simply marked as root objects, but they remain in the nursery since they can't be moved to the heap. This dramatically reduces overhead related to pinned nursery objects and their relationships.
There are also several bug fixes related to garbage collection including #9928 pointer free deadlock problem and bugs in mono_gc_weak_link_get
Improved StreamReader/StreamWritter asynchronous operations
The asynchronous operations have been rewritten to resolve bug #9761. Which caused the operations to fail on subsequent calls.
OSX Homebrew installation conflict resolution
Mono no longer installs a /usr/bin/pkg-config file on OSX, which resolves an issue that effected Homebrew installations.
The installation only contains the new Gtk+ stack that allows the new Xamarin Studio to run on OSX with 3.0.
This is exciting news!
Conclusion (for now)
Well that about wraps it up. Oh, one more thing..
In case you haven't heard, Xamarin has released Xamarian 2.0 which includes iOS development from within Visual Studio, a brand new IDE called Xamarin studio that is geared toward developing mobile apps for Android, and iOS. The IDE runs on Windows, Linux and OSX!
I would like to mention that I will be delivering a detailed refactorthis.net product review on the new and exciting features of Xamarin 2.0.
So check back for my review and thanks for reading!