Releases: ldc-developers/ldc
Releases · ldc-developers/ldc
LDC 0.14.0
(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.
Downloads
LDC 0.14.0 alpha 1
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. - 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)
Building LDC:
- The build does not break if variable LLVM_LDFLAGS contains a newline. (#691)
- 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 LLVM-internal switches are now hidden to clear up the 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.
Downloads
LDC 0.13.0
(Changes from beta-1 release are marked with (new) and gone.)
Big news:
- Frontend, druntime and Phobos are at version 2.064.2. Building druntime/Phobos as shared libraries is not supported yet, but will likely be in the next 2.065-based release. The new DSO infrastructure to support shared libraries is already implemented.
- Because of the new DSO infrastructure, the
-noruntime
switch is no longer supported. Now every module calls the runtime during initialization. Instead a new-nogc
switch is introduced which warns about implicit GC calls. The-noruntime
switch is still parsed but has no functionality and will be removed in next major version 0.14.0.
Platform support:
- A version identifier for Android has been added. Druntime/Phobos support is missing.
- A version identifier for NVPTX/NVPTX64 has been added.
- The architecture AArch64_be is available if built with LLVM 3.5.
- The version identifier for the used float ABI is now derived from the command line and default target value. It also defines the version identifier for the architecture (e.g. PPC_HardFloat).
- Version identifiers for the various MIPS ABIs have been added.
Bug fixes:
- The format failure on MingW32 is fixed. (#383)
- Fixed yet another compiler crash with vector types. (#424)
- LDC generates segfaulting code with nested functions. (#513)
- Added check to ensure that types from
object.di
exist before using them. (#551) - Do not emit bounds check code if the index is statically known to be within bounds. (#553)
- It is again possible to compile druntime/Phobos with MSVC-built LDC. (#570)
- LDC can now be build with MSVC in release mode. (#458)
__MODULE__
does not crash LDC. (#446)- LDC does not crash if using triple arm7-apple-darwin. (Reported in forum.)
- The vectorization passes are now enabled if LLVM 3.4/3.5 is used. (Reported in forum.)
- The option
-disable-simplify-libcalls
is available for LLVM 3.4+, too. - Option
-lib
ofldmd
creates a library with an object per module. (#579) - LDC builds on FreeBSD 10. (#584)
- The config file is now also searched in the current directory. (#589)
- Fixed ICE with extern(C) struct with ctor and field. (#624) new
- Some code emission fixes. new
Building LDC:
- LLVM 3.4.x is now supported.
- First changes for LLVM 3.5 are incorporated.
- The assembler file
core/threadasm.S
is excluded from the build if the CMake version is less than 2.8.5. This prevents a bunch of error messages. The assembler file is only required for non-x86 platforms. If you get linking errors on non-x86 platforms please consider upgrading your CMake installation. (#464) - LDC builds with -std=c++11. (#330)
- LDC builds on OS X Mavericks. (#544)
- LDC builds on FreeBSD 10. (#584)
- LDC builds on Solaris/x86 (compiler only, druntime/Phobos support missing)
- The unresolved symbols during linking of release build of unit test
std.uni
are gone. (#594)
Internals:
- LDC can now generate code instrumented for the address sanitizer, memory sanitizer and thread sanitizer. This requires
clang
to be used as linker. This is still experimental. You must link againstgcstub.o
in order to use the address sanitizer. It is recommened to built an instrumented version of druntime/Phobos before using this feature. - With LLVM 3.4 or later LDC generates
llvm.ident
metadata to identify object files as created by LDC. - Verbose output (
-v
) now prints the path to LDC binary and version information. Also all defined version identifiers are printed.
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.
- 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.
Downloads
LDC 0.13.0 beta 1
(Changes from alpha-2 release are marked with (new) and gone.)
Big news:
- Frontend, druntime and Phobos are at version 2.064. Building druntime/Phobos as shared libraries is not supported yet, but will likely be in the next 2.065-based release. The new DSO infrastructure to support shared libraries is already implemented.
- Because of the new DSO infrastructure, the
-noruntime
switch is no longer supported. Now every module calls the runtime during initialization. Instead a new-nogc
switch is introduced which warns about implicit GC calls. The-noruntime
switch is still parsed but has no functionality and will be removed in next major version 0.14.0.
Platform support:
- A version identifier for Android has been added. Druntime/Phobos support is missing.
- A version identifier for NVPTX/NVPTX64 has been added.
- The architecture AArch64_be is available if built with LLVM 3.5.
- The version identifier for the used float ABI is now derived from the command line and default target value. It also defines the version identifier for the architecture (e.g. PPC_HardFloat).
- Version identifiers for the various MIPS ABIs have been added. new
Bug fixes:
- The format failure on MingW32 is fixed. (#383)
- Fixed yet another compiler crash with vector types. (#424)
- LDC generates segfaulting code with nested functions. (#513)
- Added check to ensure that types from
object.di
exist before using them. (#551) - Do not emit bounds check code if the index is statically known to be within bounds. (#553)
- It is again possible to compile druntime/Phobos with MSVC-built LDC. (#570)
- LDC can now be build with MSVC in release mode. (#458)
__MODULE__
does not crash LDC. (#446)- LDC does not crash if using triple arm7-apple-darwin. (Reported in forum.)
- The vectorization passes are now enabled if LLVM 3.4/3.5 is used. (Reported in forum.)
- The option
-disable-simplify-libcalls
is available for LLVM 3.4+, too. - Option
-lib
ofldmd
creates a library with an object per module. (#579) - LDC builds on FreeBSD 10. (#584)
- The config file is now also searched in the current directory. (#589)
Building LDC:
- LLVM 3.4 is now supported.
- First changes for LLVM 3.5 are incorporated.
- The assembler file
core/threadasm.S
is excluded from the build if the CMake version is less than 2.8.5. This prevents a bunch of error messages. The assembler file is only required for non-x86 platforms. If you get linking errors on non-x86 platforms please consider upgrading your CMake installation. (#464) - LDC builds with -std=c++11. (#330)
- LDC builds on OS X Mavericks. (#544)
- LDC builds on FreeBSD 10. (#584)
- LDC builds on Solaris/x86 (compiler only, druntime/Phobos support missing) new
- The unresolved symbols during linking of release build of unit test
std.uni
are gone. (#594) new
Internals:
- LDC can now generate code instrumented for the address sanitizer, memory sanitizer and thread sanitizer. This requires
clang
to be used as linker. This is still experimental. You must link againstgcstub.o
in order to use the address sanitizer. It is recommened to built an instrumented version of druntime/Phobos before using this feature. - With LLVM 3.4 or later LDC generates
llvm.ident
metadata to identify object files as created by LDC. - Verbose output (
-v
) now prints the path to LDC binary and version information. Also all defined version identifiers are printed. new
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.
Downloads
LDC 0.13.0 alpha 2
(Changes from previous alpha release are marked with (new) and gone.)
Big news:
- Frontend, druntime and Phobos are at version 2.064. Building druntime/Phobos as shared libraries is not supported yet, but will likely be in the next 2.065-based release. The new DSO infrastructure to support shared libraries is already implemented.
- Because of the new DSO infrastructure, the
-noruntime
switch is no longer supported. Now every module calls the runtime during initialization. Instead a new-nogc
switch is introduced which warns about implicit GC calls. The-noruntime
switch is still parsed but has no functionality and will be removed in next major version 0.14.0.
Platform support:
- A version identifier for Android has been added. Druntime/Phobos support is missing.
- A version identifier for NVPTX/NVPTX64 has been added. (new)
- The architecture AArch64_be is available if built with LLVM 3.5. (new)
- The version identifier for the used float ABI is now derived from the command line and default target value. It also defines the version identifier for the architecture (e.g. PPC_HardFloat). (new)
Bug fixes:
- The format failure on MingW32 is fixed. (#383) (new)
- Fixed yet another compiler crash with vector types. (#424)
- LDC generates segfaulting code with nested functions. (#513)
- Added check to ensure that types from
object.di
exist before using them. (#551) - Do not emit bounds check code if the index is statically known to be within bounds. (#553)
- It is again possible to compile druntime/Phobos with MSVC-built LDC. (#570)
- LDC can now be build with MSVC in release mode. (#458)
__MODULE__
does not crash LDC. (#446)- LDC does not crash if using triple arm7-apple-darwin. (Reported in forum.) (new)
- The vectorization passes are now enabled if LLVM 3.4/3.5 is used. (Reported in forum.) (new)
- The option
-disable-simplify-libcalls
is available for LLVM 3.4+, too. (new) - Option
-lib
ofldmd
creates a library with an object per module. (#579) (new) - LDC builds on FreeBSD 10. (#584) (new)
- The config file is now also searched in the current directory. (#589) (new)
Building LDC:
- LLVM 3.4 is now supported.
- First changes for LLVM 3.5 are incorporated.
- The assembler file
core/threadasm.S
is excluded from the build if the CMake version is less than 2.8.5. This prevents a bunch of error messages. The assembler file is only required for non-x86 platforms. If you get linking errors on non-x86 platforms please consider upgrading your CMake installation. (#464) - LDC builds with -std=c++11. (#330)
- LDC builds on OS X Mavericks. (#544) (new)
- LDC builds on FreeBSD 10. (#584) (new)
Internals:
- LDC can now generate code instrumented for the address sanitizer, memory sanitizer and thread sanitizer. This requires
clang
to be used as linker. This is still experimental. You must link againstgcstub.o
in order to use the address sanitizer. It is recommened to built an instrumented version of druntime/Phobos before using this feature. - With LLVM 3.4 or later LDC generates
llvm.ident
metadata to identify object files as created by LDC.
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.
Known bugs (release blocker):
The unit test forcore.rt.aaA
has compile errors. This is an internal LDC problem and has no consequences (except that the unit test is not executed).- The release build of unit test
std.uni
has unresolved symbols during linking. (#594) The destructor of an object used in anassert
may be run even if the object was not constructed. The failing test case isrunnable/xtest46.d
.
Downloads
LDC 0.13.0 alpha 1
Big news:
- Frontend, druntime and Phobos are at version 2.064. Building druntime/Phobos as shared libraries is not supported yet, but will likely be in the next 2.065-based release. The new DSO infrastructure to support shared libraries is already implemented.
- Because of the new DSO infrastructure, the
-noruntime
switch is no longer supported. Now every module calls the runtime during initialization. Instead a new-nogc
switch is introduced which warns about implicit GC calls. The-noruntime
switch is still parsed but has no functionality and will be removed in next major version 0.14.0.
Platform support:
- A version identifier for Android has been added. Druntime/Phobos support is missing.
Bug fixes:
- Fixed yet another compiler crash with vector types. (#424)
- LDC generates segfaulting code with nested functions. (#513)
- Added check to ensure that types from
object.di
exist before using them. (#551) - Do not emit bounds check code if the index is statically known to be within bounds. (#553)
- It is again possible to compile druntime/Phobos with MSVC-built LDC. (#570)
- LDC can now be build with MSVC in release mode. (#458)
__MODULE__
does not crash LDC. (#446)
Building LDC:
- LLVM 3.4 is now supported.
- First changes for LLVM 3.5 are incorporated.
- The assembler file
core/threadasm.S
is excluded from the build if the CMake version is less than 2.8.5. This prevents a bunch of error messages. The assembler file is only required for non-x86 platforms. If you get linking errors on non-x86 platforms please consider upgrading your CMake installation. (#464) - LDC can now built with -std=c++11. (#330)
Internals:
- LDC can now generate code instrumented for the address sanitizer, memory sanitizer and thread sanitizer. This requires
clang
to be used as linker. This is still experimental. You must link againstgcstub.o
in order to use the address sanitizer. It is recommened to built an instrumented version of druntime/Phobos before using this feature. - With LLVM 3.4 or later LDC generates
llvm.ident
metadata to identify object files as created by LDC.
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.
Known bugs (release blocker):
- The unit test for
core.rt.aaA
has compile errors. This is an internal LDC problem and has no consequences (except that the unit test is not executed). - The release build of unit test
std.uni
has unresolved symbols during linking. - The destructor of an object used in an
assert
may be run even if the object was not constructed. The failing test case isrunnable/xtest46.d
.
Downloads
LDC 0.12.1
Big news:
- Improvements to the gc2stack pass which now allows to clean up allocations left behind by inlined closures.
- The inline assembler now parses all SSE4.1, SSE4.2, AES and SHA opcodes (#514).
Platform support:
- Added new LLVM 3.4 intrinsics to
ldc/intrinsics.di
. - Added LLVM 3.5 support in druntime and phobos.
Bug fixes:
- Signature of _d_newclass is now correct.
- Fixed a bug in the va_arg handling (affected Linux/PPC64 and other non-x86 platforms).
- Fixed duplicate definitions of vtables/interface (#535).
- Static immutable variables are now in read-only data segment (#543).
- Dmd is not mentioned anymore in the error message if
object.di
can not be found.
Building LDC:
- It is now possible to compile LDC with the AddressSanitizer enabled (clang only). Just specify
-DSANITIZE=ON
on the CMake command line. This is currently only helpful for debugging LDC itself.
LDC 0.12.0
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:
- Linux/OS X on x86/x86_64 are stable as usual, Win32/MinGW has received a several critical bug fixes and is ready for widespread testing. OS X requires LLVM 3.2 due to a regression in LLVM 3.3
- 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.
Downloads
LDC 0.12.0 beta 1
[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.
Downloads
LDC 0.12.0 alpha 1
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.