(Changes from 0.17.0-beta1 release are marked with (new) and gone.)
Big news:
- Frontend, druntime and Phobos are at version 2.068.2.
- The exception handling runtime now no longer allocates GC memory (although it still uses C
malloc
if there are more than 8 concurrent exceptions or nestedfinally
blocks per thread). Note: Creating theThrowable
s in user code (e.g.new Exception("…")
) and theRuntime.traceHandler
may GC-allocate still. (Thanks for this goes to our newest contributor, @philpax). - The
@ldc.attributes.section("…")
attribute can now be used to explicitly specify the object file section a variable or function is emitted to. - The
-static
option can be used to create fully static binaries on Linux (akin to the GCC option of the same name). core.atomic.atomicOp()
now exploits LLVM read-modify-write intrinsics instead of using a compare-and-swap loop. As side-effect, the atomic intrinsics in moduleldc.intrinsics
have been renamed:llvm_atomic_cmp_swap
=>llvm_atomic_cmp_xchg
llvm_atomic_swap
=>llvm_atomic_rmw_xchg
llvm_atomic_load_*
=>llvm_atomic_rmw_*
Platform support:
- The compiler now supports NetBSD. (#1247) (Thanks for this goes to @nrTQgc.) (new)
- The float ABI can now be derived from the second field of the triple. E.g. the hardfloat ABI is used if triple
armv7a-hardfloat-linux-gnueabi
is given. (#1253) (new) - Support for LLVM 3.8 and preliminary support for LLVM 3.9 (new)
Bug fixes:
- 0.16.0-beta1: Trivial program fails on FreeBSD. (#1119) (new)
- x86 ABI: Fix Solaris regression and work around MSVC byval alignment issue. (#1230)
- Atomic RMW operations emit subpar x86 assembly. (#1195)
- align() not respected for local variable declarations. (#1154)
- Codegen optimizations are no longer disabled when
-g
is given. (75b3270) - Debug information is now generated for
ref
andout
parameters. (#1177) core.internal.convert
tests do not depend onreal
padding bytes any longer. (#788)
Building LDC:
- LDC now requires LLVM 3.5–3.8 and thus also a C++11-capable compiler to build.
Internals:
- The LDC-specific parts of the source code have received a big overhaul to make use of some C++11 features and to unify the style (the LLVM style as per
clang-format
is now used). - The groundwork for a code generation test suite working on the LLVM IR level has been laid, together with some first test cases for alignment issues.
- LDC now emits more optional LLVM IR attributes for more optimization opportunities. (#1232)
Known issues:
- LDC does not zero the padding area of a real variable. This may lead to wrong results if the padding area is also considered. See #770. Does not apply to real members inside structs etc.
- Phobos does not compile on MinGW platform.