This release features over 2 months of fixes a few nice features.
We're now back to do simultaneous releases to Windows, Linux and Mac.
The C# compiler has a lot of fixes for async related issues.
New static and dynamic hardware capabilities probing, mono can now exploit hardware caps in many more cases than before.
Blended v5/v7 mode for arm. Some ARM targets require binaries that support all the way from very old CPUs to the most modern ones. Previously we would fail to work on SMP machines when built for UP targets.
Added skeletons for both System.DirectoryServices and System.Windows.Forms.DataVisualization.Charting.
New server focused flag. Run mono with --server to tell the runtime to target performance. With this release, this means an aggressive threadpool scheduler that creates additional threads faster.
We put a lot of effort on windows for this release. Builds are now based on a recent mingw toolchain. We fixes a good number of build issues and bugs in the windows backed.
We have finally switched to use vectored exception handling on windows, which makes it possible, for those of us that like Inception, to debug mono's debugger.
And, finally, PCL has arrived. This means a few fixes in the runtime, class libraries and build tools. And, on Mac, we now ship PCL reference assemblies.
- 1782 - Check generic constraints for duplicates.
- 4141 - XmlSchemaImporter needs to consider attributeGroupRef in some case.
- 4344 - xsl:stylesheet always ignored xsl template contents.
- 4668 - C# compiler doesn't like decimal in custom attribute values, so use string.
- 6327 - Correctly install xbuild
- 7126 - Don't allow execution of dynamic assemblies without run access.
- 8637 - omit xml declaration for ToString().
- 8719 - Implements parsing of multi value User-Agent string.
- 8934 - Add more implicit generic array interfaces.
- 10001 - Do not use chunked encoding with CGI/FastCGI.
- 10194 - SetElementValue(nonExistentElementName, null) caused NRE.
- 11294 - Add more system assemblies remapping.
- 11778 - Fix Syscall.readlink() for non-ascii targets.
- 11910 - Implement character validation methods in XmlConvert.
- 12035 - xsi:nil='true' was ignored in some scenario.
- 12469 - Add more conversion methods to XmlAtomicValue.
- 12995 - Avoid an assert in mono_save_seq_point_info () if no seq points are generated for a method.
- 13050 - Properly null terminate strings in mono_dwarf_escape_path ().
- 13065 - Continue single stepping if the same line reached in all cases. Factor out some code code.
- 13191 - Avoid passing partially shared instances to the JIT.
- 13233 - Fix an overflow if MONO_ZERO_LEN_ARRAY is not 0.
- 13289 - Nested partial type inside generic class can have base type defined later than current type inflation happens.
- 13316 - Add nested partial types inside nested partial types to AST.
- 13318 - Schedule internal delay task on default scheduler only.
- 13324 - Lazy initialization of type parameters expanded interfaces.
- 13336 - Handle property with default values.
- 13340 - Another attempt at fixing mono_atomic_load_acquire() on MSVC.
- 13343 - Support FTP download where PWD starts with '\'.
- 13362 - Adds async handling to binary:emitbranchable.
- 13435 - Add some error checking to custom attr parsing and plug a memory leak.
- 13443 - Add clone for error expression.
- 13454 - Lift result of enum substraction when operation is lifted due to non-nullable enum type.
- 13466 - Add *CachePolicy to mobile profile.
- 13476 - Ignore space separators in nowarn arguments.
- 13488 - Add AssemblyAction.Save to the linker.
- 13497 - Check promoted value type binary equality operations against null too.
- 13501 - Correctly parse pragma headers.
- 13509 - Remove CultureInfo.CurrentCulture dependency from ordinal based string::EndsWith.
- 13523 - Write only import section from global namespaces before global attribute sections.
- 13544 - Fix overflow checking in newarray with 64 bit array lengths.
- 13549 - Correctly import nested non-generic types inside generic containers used within same generic container.
- 13552 - Grow underlying buffer only when necessary.
- 13603 - Quote path arguments to opt/llc.
- 13604 - STW handshake/thread shutdown race condition.
- 13626 - Rewrites RuntimeReflectionExtensions to actually do something.
- 13682 - Don't show internal error when default paramater expression cannot be converted to paramter type.
- 13708 - ASP.NET routing constraints should be treated as 'convertible to string'
- 13716 - use XmlSchemaSettings.XmlResolver to resolve schemas.
- 13729 - Fix cross compilation to windows. "Windows.h" should be "windows.h".
- 13731 - Handle partial class case when nested type of partial container depends on parent base type from another partial container.
- 13734 - Disable LLVM for async methods.
- 13736 - Create correct flow branching for single non-default switch section.
- 13742 - Always release DeflateStream unmanaged resources.
- 13767 - Handle custom attributes with nested array of enums.
- 13786 - Update named params parameter converted result expression.
- 13793 - Inflate default parameter expression without type checks
- 13813 - Thread teardown race condition.
- 13817 - Basic optional parameters support in binder.
- 13879 - Verifier support for IReadOnlyList<T> and IReadOnlyCollection<T>.
- 13890 - Relax the restriction on global methods visibility.
- 13892 - Add argument modifiers to generated base proxy when needed.
- 13951 - Avoid lookups in the AOT images during STW.
- 13952 - Don't crash when reporting invalid case label value.
- 13953 - Support OID names in RSACryptoServiceProvider.SignData().
- 13969 - Fix recursive check for non dependent return types during type inference.
- 13970 - Correct parsing of invalid 00000000-0000-0000-0000-000000000000 guid format.
- 13977 - Use the invariant culture calendar if the requested one is not available.
- 13996 - Type parameter inflated interfaces needs to be marked too.
- 14032 - Fixes GZipStream dispose order.
- 14053 - Report error for name collision between property and generic method.
- 14069 - Avoid the managed->copy for ref vtypes with an [In] attribute in n2m wrappers.
- 14077 - HashSet no longer grows in capacity on deserialize
- 14126 - Bad compiler interaction between anonymous method and async
- 14143 - xsl:import in included stylesheet caused compilation error.
- 14168 - Use IReflectType interface instead of TypeDelegator.
- 14185 - Fixes negative symbol definition for few locales to be simple -.
- 14194 - Fix yet another DISABLE_JIT bug in wrapper generation.
- 14217 - Fix an LLVM assertion on structs with unaligned size.
- 14245 - Invalid syntax during attribute target parsing can crash parser.
- 14289 - Probing of generic parameter needs to check both operands.
- 14339 - Clear out the ref fields from MonoDomain before calling mono_gc_clear_domain.
- 14347 - More thorough check for managed type parameters.
- 14351 - Bad compiler interaction between captured this, lambdas and async.
- 14384 - Don't resolve extension method expression when in probing mode.
- 14426 - Perform alignment checks for CAS on 32bits systems.
- 14503 - Add support for invoking interface methods.
- 14505 - Set empty string to TraceListeners for empty assert message.
- 14515 - Fixes parallel enumerable index counter.
- 14544 - Add System.ServiceModel.Activation assembly.
- 14555 - Make suspend work during thread cleanup.
New in Mono 3.2.2
This is a bugfix release.
Some edge cases in our garbage collector that were found in internal testing are now fixed. Multiple C# compiler issues fixed.
- TPL- Fix scheduling of non-inlined synchronous continuations.
- Weaken a race condition in object initialization
- Fix race conditions in finalizer/weak link staging
- Fixed System.Text.Decoder.GetChars(byte*,int,char*,int,bool) to copy output into the char* buffer
- Fixed configure.in to fail the __thread check with clang
- Fixed g_utf8_to_utf16_general() to handle invalid utf8
- 8934 Add more implicit generic array interfaces.
- 13050 Properly null terminate strings in mono_dwarf_escape_path ().
- 13191 Avoid passing partially shared instances to the JIT.
- 13362 Adds async handling to binary:emitbranchable.
- 13443 Add clone for error expression.
- 13454 Lift result of enum substraction when operation is lifted due to non-nullable enum type.
- 13466 Add *CachePolicy to mobile profile.
- 13476 Ignore space separators in nowarn arguments.
- 13497 Check promoted value type binary equality operations against null too.
- 13509 Remove CultureInfo.CurrentCulture dependency from ordinal based string::EndsWith.
- 13603 Quote path arguments to opt/llc.
- 13604 STW handshake/thread shutdown race condition.
- 13734 Disable LLVM for async methods to work around.
- 13951 Register the jit info for GC critical methods as soon as they are loaded
- 13952 Don't crash when reporting invalid case label value.
New in Mono 3.2.1
Mono 3.2.1 is a hot-fix release.
It fixes bug 13509, which causes a crash when the current culture is set to zh_TW.
New in Mono 3.2.0
LLVM updated to version 3.2, this brings better optimizations for mono.
Mono now defaults to the SGen Garbage Collector.
A lot of work went into making this the best performing and most stable release of our collector.
As part of making it broadly usable, two problematic workloads were addressed and make much faster.
One is the popular object workload, where a few pinned nursery objects are very popular with old generation objects, causing a lot of remembered sets to be created. To avoid that, popular objects are made immortal until the next major collection.
The other is the massive thread stacks workload, where a lot of threads with big stacks need to be conservatively scanned. This used to put a lot of pressure on the pinning stage since it would produce very big pin queues. To avoid that, we employ hash filtering on pin queues and that dramatically reduce their average size and we pin major blocks instead of individual objects.
In addition to that, we switched to lazy sweeping by default, which reduces major collection pause times and improves aggregate throughput.
Three new experimental modes for the garbage collection are now available.
Low pause mode
Under the low pause mode, SGen will execute major collections concurrently to your application and only briefly pause to finish it. To enable it pass major=marksweep-conc in the MONO_GC_PARAM environment variable.
Low promotion nursery
The low promotion nursery employs aging to reduce temporal effects on object promotion and reduce the pressure on the major heap. To enable it pass minor=split in the MONO_GC_PARAM environment variable.
Mostly precise stack scanning
Now it's possible to enable mostly precise stack scanning, that can speed up collections by reducing the volume of conservative scanning needed. This reduces pinning, leading to shorter minor collection pause times and increased space usage of the nursery.
Mono 3.2 Basic Class Libraries now can fully build Xamarin's mobile profile.
Multiple features can now be disabled for the classlibs to reduce the footprint on mobile devices. FullAOT targets now enjoy much better fallbacks and much more linker friendly code.
The FullAOT compiler can now generate much faster code for icalls and has support for generic valuetype sharing, ending issues with missing methods at runtime once and for all.
Performance of primitive parsing was greatly enhanced.
LINQ is now much faster with arrays.
Large object cloning and boxing is up to two times faster.
Optimize Marshal.Read/Write methods to avoid a trip to unmanaged when possible.
Google contributed ports of NaCl for ARM and Amd64. SGen now works on FreeBSD.