Big news:
- Frontend, druntime and Phobos are at version 2.063.2. Building druntime/Phobos as shared libraries is not supported yet, but will likely be in the next 2.064-based release.
-march
/-mcpu
now behave as intended:-march
selects the target architecture (x86, arm, …),-mcpu
the CPU model to optimize for. Use-mcpu=native
to optimize for the host CPU, like in earlier LDC versions.-release
no longer disables bounds checking in @safe code. Use-disable-boundscheck
to disable it for all functions (-noboundscheck
in (L)DMD).- Exception chaining is now properly supported (#409).
- Rudimentary support for
extern(C++)
has been implemented (#412).
Platform support:
- LDC builds druntime, Phobos and a Hello World program on Linux/ARM. If you are interested in helping to finish ARM support, please get in touch with us.
- Work on Linux/PPC32 has started.
- LDC now runs on FreeBSD (#451). Some issues are still unresolved (#495, #496).
Bug fixes:
- Debug info for static arrays, vectors and enums has been improved.
- Pure DDoc files (
.dd
) are now accepted. - Several issues regarding vector and static arary initialization have been fixed (#419, #420).
- Destructors for (rvalue) struct used in opApply are now called properly (#427).
- Packed structs are now emitted correctly (#430).
- String enums now work as AA keys (#440).
- T.init for static arrays no longer emits an instruction per element (#119).
- String constants are now emitted as unnamed_addr, allowing them to be combined during optimization.
- Fixed a nested function handling issue (#447).
- Fixed several
real
wrong-code bugs on Win32/MinGW (#441). assert(0)
now generates trap instructions in release mode (like DMD does).ldmd2 -c a.d b.d …
no longer creates a single object file.- LDMD now accepts (ignores) the
-quiet
flag as advertised. - LDMD now creates output directories if they do not already exist (#480).
Building LDC:
- LLVM 3.0 is no longer supported. LDC can be used with LLVM 3.1–3.4svn (at the time of release). On OS X, use LLVM 3.2 due to a regression in the 3.3 release (#492).
- The LLVM version detection mechanism has been updated to prefer newer LLVM versions on Debian derivatives (#376).
- The bash completion files are now installed to /usr/share/bash-completion on Gentoo.
Internals:
- Some violations of the C++11 standard have been fixed (#370).
- Fixed a LDMD linking problem. (#452)
- D
bool
s are now stored asi8
on the LLVM IR level (#386). This should have no user-visible consequences, but avoids a few latent misoptimization bugs. - Work has been started to align the frontend source code to the upstream DMD source. This will allow for faster frontend updates in the future.
- ModuleInfo data structures are now mangled as __ModuleInfoZ, like DMD does. This should have no user-visible consequences apart from support in demanglers, etc.
Known regressions:
- Using nested structs with AAs can trigger an erroneous "cannot create associative array" error (#407).
- Garbage collection does not work on Linux/PPC64.