(Changes from alpha-1 release are marked with (new) and gone.)
Big news:
- Frontend, druntime and Phobos are at version 2.065.0.
- Building druntime/Phobos as shared libraries on Linux is now supported, but not enabled by default. Use
-DBUILD_SHARED_LIBS=ON
on the CMake command line to enable shared libraries. - On Linux, link-time stripping of dead code (
--gc-sections
) is now usable and enabled by default. Try-disable-linker-strip-dead
in case of mysterious linker issues/runtime crashes, as such problems might be caused by related issues (for example in third-party C libraries). - The deprecated
-noruntime
switch is now removed. The-nogc
switch now also shows a line number in the error message. - LLVM intrinsics
llvm.bswap.i#
,llvm.ctpop.i#
,llvm.ctlz.i#
andllvm.cttz.i#
are now builtins and can be used with CTFE. (#648) (new) - Deprecated version identifiers have been removed.
- Deprecated pragma names have been removed.
- An experimental switch
-template-depth
to control the maximum number of nested template instantiations has been added.
Platform support:
- The architectures ppc64le, amd64, amd64_be and armbe are available if built with LLVM 3.5.
- Some code for ARM and MIPS64 has been added.
- Support for LLVM 3.5 has been added.
Bug fixes:
- The shared libraries implementation fixes a couple of known issues. (#433, #291, #239, #194, #228)
- Fixed a problem in constructing a char representation of a type which resulted in an ICE. (#642)
- ldmd2: -defaultlib= works now. (#601)
- The -defaultlib/-debuglib was reworked including split between druntime and Phobos. (#416)
- Returning value transitively through assignment now works. (#629)
- A purity issue was fixed. (#575)
- GC spends too much time in marking phase. (#233)
- Avoid invalid *&ex -> ex optimizations. (Backport of a DMD regression) (#649)
- A missed optimization is fixed now. (#338)
- pragma(LDC_no_moduleinfo) now disables generation of module metadata. (#571)
- Fixed the signature of intrinsic
llvm.prefetch
and added new intrinsicllvm.clear_cache
(from LLVM 3.5). (new)
Building LDC:
- The build does not break if variable LLVM_LDFLAGS contains a newline. (#691)
- A missing
va_end
was added. (#695) (new) - The Win64 build was improved. It requires at least VS2012 and must be build against LLVM 3.5 with this patch from Twobit applied.
Internals:
- Some rarely used LLVM-internal switches are now hidden from command line
-help
. Use-help-hidden
to display all of them.
Known regressions:
- LDC emits too much code. This leads to spurious failures in the std.stdiobase unit test. Workaround is adding -lcurl to the commandline. (This seems to be related to #662.)
- Using nested structs with AAs can trigger an erroneous "cannot create associative array" error in some very specific circumstances (#407).
- Garbage collection does not work on Linux/PPC64 and other big-endian systems.