Report a bug
If you spot a problem with this page, click here to create a Bugzilla issue.
Improve this page
Quickly fork, edit online, and submit a pull request for this page. Requires a signed-in GitHub account. This works well for small changes. If you'd like to make larger changes you may want to consider using a local clone.

Change Log: 2.094.0

previous version: 2.093.0

Download D nightlies
To be released

This changelog has been automatically generated from all commits in master since the last release.

  • The full-text messages are assembled from the changelog/ directories of the respective repositories: dmd, druntime, phobos, tools,, installer, and dub.
  • See the DLang-Bot documentation for details on referencing Bugzilla. The DAutoTest PR preview doesn't include the Bugzilla changelog.
  • The pending changelog can be generated locally by setting up and running the pending_changelog target:
    make -f posix.mak pending_changelog

2.094.0 comes with 6 major changes and 21 fixed Bugzilla issues. A huge thanks goes to the 29 contributors who made 2.094.0 possible.

List of all upcoming bug fixes and enhancements in D 2.094.0.

Compiler changes

  1. Improve type determination for array literals

    There were some cases where DMD wasn't able to determine the common type for array literal elements. Mismatched enums and literals containing only mutable and immutable elements should now be correctly inferred.

  2. Exception-throwing code can now be used in debug blocks

    When writing debug code, one isn't interested statically ensuring that a function block doesn't throw, but a pleasant debugging experience as e.g. writing to the console or logfiles typically can't be nothrow. DMD already allowed to escape pure and @nogc within debug statement. With this release, exception-throwing code can be called from debug statements too:

    import std.stdio;
    void main() nothrow
        debug writeln("Your throwing log statement.");

Runtime changes

  1. add exit_group to core.sys.linux.unistd

    add exit_group to core.sys.linux.unistd, exits all threads in a process, present since linux 2.5.35

  2. Added module core.sys.darwin.mach.nlist and core.sys.darwin.mach.stab

    Those modules contains bindings for the 64 bits part of Mac OSX's <mach-o/nlish.h> and <mach-o/stab.h>, respectively, and can be used by users wishing to inspect binary data of Mach-O object files.

  3. Deprecated object.selector

    The public import of selector in the module object has been deprecated. Please explicitly import selector instead using: import core.attribute : selector;

    The following code has been deprecated:

    extern (Objective-C)
    extern class NSObject
        static NSObject alloc() @selector("alloc");

    Replace with:

    import core.attribute : selector;
    extern (Objective-C)
    extern class NSObject
        static NSObject alloc() @selector("alloc");
  4. Memory releated GC options can now be specified with higher accuracy

    Memory-related GC options stored in bytes instead of megabytes to provide fine-tune GC on low memory devices.

    Added ability to use suffixes B, K, M or G:

    extern(C) __gshared string[] rt_options =
        [ "gcopt=minPoolSize:4K maxPoolSize:2M incPoolSize:8K" ];

    Values without suffix treated as megabytes.

List of all bug fixes and enhancements in D 2.094.0:

DMD Compiler regressions

  1. Bugzilla 20958: incomplete semantic analysis when generating code for function
  2. Bugzilla 20981: Runtime segfault for inlined __simd_sto

DMD Compiler bugs

  1. Bugzilla 18748: bt instruction with immediate offset uses 64-bit variant for 32-bit data
  2. Bugzilla 18749: bt instruction using 64-bit register for 32-bit offset
  3. Bugzilla 20363: painting XMM registers as integers leads to codegen bugs
  4. Bugzilla 20761: __traits(isSame) for alias tuples is broken and underspecified
  5. Bugzilla 20831: __traits(getAttributes) failes to compile when used on a parameter with no name
  6. Bugzilla 20938: Cannot create const arrays mixing immutable and mutable structs with indirections
  7. Bugzilla 20995: Range violation with -preview=dip1021
  8. Bugzilla 21001: Private alias becomes public if used before declaration
  9. Bugzilla 21019: Azure pipelines Windows_VisualD win32-ldc fails with Heisenbug

DMD Compiler enhancements

  1. Bugzilla 19277: storage class used in alias statement has no effect
  2. Bugzilla 19705: Static foreach slow for numeric ranges
  3. Bugzilla 20990: Optimizer should move cold branches to the end of the function

Phobos bugs

  1. Bugzilla 20929: std.experimental.allocator.expandArray's range-based overload fails to instantiate for char and wchar arrays.
  2. Bugzilla 20949: std.range.popFront is unsafe in release mode
  3. Bugzilla 21021: std.variant confused by alias this when struct larger than maxDataSize

Phobos enhancements

  1. Bugzilla 20889: Support construction of std.bigint.BigInt from a sign and a byte-array magnitude

Druntime bugs

  1. Bugzilla 20910: Default unittest runner reports wrong unittest count
  2. Bugzilla 21029: Remove __ArrayEq which the compiler no longer uses as of DMD PR #11212

Druntime enhancements

  1. Bugzilla 21026: add core.bitop.byteswap(ushort)

Contributors to this release (29)

A huge thanks goes to all the awesome people who made this release possible.

previous version: 2.093.0