Skip to content

Releases: ldc-developers/ldc

LDC 1.1.0 beta 2

09 Oct 12:05

Choose a tag to compare

LDC 1.1.0 beta 2 Pre-release
Pre-release

(Changes from 1.1.0-alpha1 release are marked with (new) and gone.)

Big news

  • Frontend, druntime and Phobos are at version 2.071.1.
  • Cross-module inlining (#1577, enabled from -O2, disable with -disable-cross-module-inlining)
  • Profile-guided optimization (#1219, "How To" article)
  • Experimental IR-to-obj caching with -ir2obj-cache=<cache dir> (#1572)
  • Accept bitcode files on commandline (#1539)
  • @ldc.attributes.fastmath for aggressive math optimization (#1472, #1438)
  • New traits __traits(targetCPU) and __traits(targetHasFeature, ) (#1434)
  • Binary distribution now bundles DUB (#1573)
  • Drastic reduction of large symbol name lengths with -hash-threshold (#1445)
  • @ldc.attributes.optStrategy(...) for per-function optimization setting (#1637) (new)

Platform support

Bug fixes

  • Strange compile time error. (#1638) (new)
  • LDC+DUB on Windows: folder separator is ignored. (#1621) (new)
  • Fix evaluation order issues. (#1620, #1623) (new)
  • ICE on returning struct with zero-length static array. (#1611)
  • Debug info generation fixes for LLVM >= 3.8. (#1598) (new)
  • ICE after return in the middle of a function on Win64/MSVC. (#1582)
  • Enums with referenced struct members result in floating point error. (#1581)
  • Static array initialization with single element misdetected as direct construction via sret. (#1548)
  • ICE on static typeid. (#1540)
  • super doesn't work. (#1450)
  • Sub-expression evaluation order fixes. (#1327)

Building LDC

  • LDC now requires a preinstalled D compiler.
  • On Unix-like systems we now use gcc for linking. (#1594) (new)

Internals

  • optimizer: Skip adding verifier function pass if -disable-verify is given. (#1591)
  • DValue refactoring. (#1562)
  • Several improvements to generated IR. (#1528, #1630)

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.

LDC 1.1.0 alpha 1

15 Jul 19:36

Choose a tag to compare

LDC 1.1.0 alpha 1 Pre-release
Pre-release

Big news

  • Frontend, druntime and Phobos are at version 2.071.1.
  • Cross-module inlining (#1577, enabled from -O2, disable with -disable-cross-module-inlining)
  • Profile-guided optimization (#1219)
  • IR-to-obj caching with -ir2obj-cache=<cache dir> (#1572)
  • Accept bitcode files on commandline (#1539)
  • @ldc.attributes.fastmath for aggressive math optimization (#1472, #1438)
  • New traits __traits(targetCPU) and __traits(targetHasFeature, ) (#1434)
  • Binary distribution now bundles DUB (#1573)
  • Drastic reduction of large symbol name lengths with -hash-threshold (#1445)

Platform support

Bug fixes

  • ICE on returning struct with zero-length static array. (#1611)
  • ICE after return in the middle of a function on Win64/MSVC. (#1582)
  • Enums with referenced struct members result in floating point error. (#1581)
  • Static array initialization with single element misdetected as direct construction via sret. (#1548)
  • ICE on static typeid. (#1540)
  • super doesn't work. (#1450)
  • Sub-expression evaluation order fixes. (#1327)

Building LDC

  • LDC now requires a preinstalled D compiler.

Internals

  • optimizer: Skip adding verifier function pass if -disable-verify is given. (#1591)
  • DValue refactoring. (#1562)
  • Several improvements to generated IR. (#1528)

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.

LDC 1.0.0

05 Jun 21:56

Choose a tag to compare

(Changes from 1.0.0-beta2 release are marked with (new) and gone.)

Big news

  • Frontend, druntime and Phobos are at version 2.070.2.

Platform support

  • Support for LLVM 3.5 - 3.8 and preliminary support for LLVM 3.9.
  • Objective-C Support. (#1419)
  • ARM platform is now fully supported. (#1283, #489)
  • Better support for Android. (#1447) (new)
  • Preliminary support for AArch64.

Bug fixes

  • Outdated Copyright notice in LICENSE file. (#1322) (new)
  • libconfig.so.8 not found (ubuntu 14.04) (#1460)
  • Wrong template filter on atomicOp. (#1454)
  • Runtime error on synchronized(typeid(SomeInterface)) { }. (#1377)
  • TypeInfo is stored read-only, but mutable from D. (#1337)
  • Inline assembly regression with local variable references. (#1292)
  • Compile error on Linux/PPC and Linux/PPC64 due to missing import in Phobos.

Building LDC

  • LDC now requires a preinstalled D compiler.
  • Building on OS X requires ld64-264 or above (shipping with Xcode 7.3). This avoid spurious crashes during exception handling. XCode 7.3.1 should be used to avoid linker errors. (#1444, #1512) (new)

Internals

  • Linking against LLVM shared library is now supported.

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.

LDC 1.0.0 beta 2

15 May 23:35

Choose a tag to compare

LDC 1.0.0 beta 2 Pre-release
Pre-release

(Changes from 1.0.0-alpha1 release are marked with (new) and gone.)

Big news

  • Frontend, druntime and Phobos are at version 2.070.2.

Platform support

  • Support for LLVM 3.8 and preliminary support for LLVM 3.9.
  • Objective-C Support. (#1419)
  • ARM platform is now fully supported. (#1283, #489)
  • Better support for Android. (#1447) (new)
  • Preliminary support for AArch64.

Bug fixes

  • libconfig.so.8 not found (ubuntu 14.04) (#1460) (new)
  • Wrong template filter on atomicOp. (#1454)
  • Runtime error on synchronized(typeid(SomeInterface)) { }. (#1377)
  • TypeInfo is stored read-only, but mutable from D. (#1337)
  • Inline assembly regression with local variable references. (#1292)
  • Compile error on Linux/PPC and Linux/PPC64 due to missing import in Phobos.

Building LDC

  • LDC now requires a preinstalled D compiler.

Internals

  • Linking against LLVM shared library is now supported.

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.

LDC 1.0.0 beta 1

25 Apr 06:38

Choose a tag to compare

LDC 1.0.0 beta 1 Pre-release
Pre-release

(Changes from 1.0.0-alpha1 release are marked with (new) and gone.)

Big news

  • Frontend, druntime and Phobos are at version 2.070.2. (new)

Platform support

  • Support for LLVM 3.8 and preliminary support for LLVM 3.9.
  • Objective-C Support. (#1419) (new)
  • ARM platform is now fully supported. (#1283, #489)
  • Better support for Android. (#1447) (new)
  • Preliminary support for AArch64.

Bug fixes

  • Wrong template filter on atomicOp. (#1454) (new)
  • Runtime error on synchronized(typeid(SomeInterface)) { }. (#1377)
  • TypeInfo is stored read-only, but mutable from D. (#1337)
  • Inline assembly regression with local variable references. (#1292)
  • Compile error on Linux/PPC and Linux/PPC64 due to missing import in Phobos.

Building LDC

  • LDC now requires a preinstalled D compiler.

Internals

  • Linking against LLVM shared library is now supported.

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.

LDC 0.17.1

24 Mar 21:14

Choose a tag to compare

This is a bug fix release only. Please refer to the 0.17.0 changelog for the complete set of changes in this version.

Big news

  • ARM platform is now a first class target for LDC. It passes most test cases (except 2 failures) and can successfully compile the D version of the compiler.

Platform support

  • ARM platform is now fully supported. (#1283, #489)
  • Preliminary support for AArch64.
  • Preliminary support for LLVM 3.9.

Bug fixes

  • Inline assembly regression with local variable references. (#1292)
  • Compile error on Linux/PPC and Linux/PPC64 due to missing import in Phobos.

Building LDC

  • Linking against LLVM shared library is now supported.

Internals

Known issues

LDC 1.0.0 alpha 1

26 Feb 21:09

Choose a tag to compare

LDC 1.0.0 alpha 1 Pre-release
Pre-release

Big news

  • Frontend, druntime and Phobos are at version 2.069.2.

Platform support

  • Support for LLVM 3.8 and preliminary support for LLVM 3.9.

Bug fixes

Building LDC

  • LDC now requires a preinstalled D compiler.

Internals

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.

LDC 0.17.0

14 Feb 17:29

Choose a tag to compare

(Changes from 0.17.0-beta2 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 nested finally blocks per thread). Note: Creating the Throwables in user code (e.g. new Exception("…")) and the Runtime.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 @ldc.attributes.target("…") attribute can now be used to explicitly specify CPU features or architecture for a function.
  • 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 module ldc.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:

  • Improved ARM support. (#1280) (new)
  • The compiler now supports NetBSD. (#1247) (Thanks for this goes to @nrTQgc.)
  • 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)
  • Support for fibers on AArch64. (new)
  • Support for LLVM 3.8 and preliminary support for LLVM 3.9

Bug fixes:

  • make install problem. (#1289) (new)
  • When a class contains a union, other fields are not statically initialized. (#1286) (new)
  • Compiling DCD with -singleobj causes segmentation fault. (#1275) (new)
  • 0.17.0-beta2: Cannot build DCD. (#1266) (new)
  • Invalid bitcast error. (#1211) (new)
  • 0.16.0-beta1: Trivial program fails on FreeBSD. (#1119)
  • Can't build gtk-d 3.1.4. (#1112) (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 and out parameters. (#1177)
  • core.internal.convert tests do not depend on real 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.

Downloads

LDC 0.17.0 beta 2

28 Jan 23:44

Choose a tag to compare

LDC 0.17.0 beta 2 Pre-release
Pre-release

(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 nested finally blocks per thread). Note: Creating the Throwables in user code (e.g. new Exception("…")) and the Runtime.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 module ldc.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 and out parameters. (#1177)
  • core.internal.convert tests do not depend on real 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.

Downloads

LDC 0.17.0 beta 1

14 Jan 20:29

Choose a tag to compare

LDC 0.17.0 beta 1 Pre-release
Pre-release

(Changes from 0.17.0-alpha1 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 nested finally blocks per thread). Note: Creating the Throwables in user code (e.g. new Exception("…")) and the Runtime.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 (new) 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 module ldc.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:

Bug fixes:

  • 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 and out parameters. (#1177)
  • core.internal.convert tests do not depend on real padding bytes any longer. (#788) (new)

Building LDC:

  • LDC now requires LLVM 3.5–3.7 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) (new)

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.

Downloads