[Changes marked ***** are new since the last pre-release version.]
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. This is different from the GCC convention, but matches the other LLVM tools. Use -mcpu=native to optimize for the host CPU (pre-0.11.0 LDC versions did this by default).-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:
- Assigning array literals to static arrays and certain immutable slices no longer triggers a GC allocation (#493). *****
- 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 several nested function handling issues (#447, #454, #497). *****
- Worked around a crash where the frontend generates an invalid AST for nested structs (#470). *****
- Fixed several
real
wrong-code bugs on Win32/MinGW (#441). assert(0)
now generates trap instructions in release mode (like DMD does).-mattr=help
and-mcpu=help
now displays the CPU targeting help even without source files given (#505). *****-disable-fp-elim
, which is no longer exposed by LLVM by default, is supported again, also fixing-gs
for LDMD (#502). *****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)
- Fixed an instance of reading uninitialized data in LDMD (#500). *****
- 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.
- The names of the ModuleInfo data structures now end in
__ModuleInfoZ
, like they do for DMD. 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 in some very specific circumstances (#407).
- Garbage collection does not work on Linux/PPC64.