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.093.0

previous version: 2.092.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.093.0 comes with 6 major changes and 42 fixed Bugzilla issues. A huge thanks goes to the 48 contributors who made 2.093.0 possible.

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

Compiler changes

  1. Add new builtin __traits(isCopyable, T) for some type T

    Changing Phobos' std.traits.isCopyable to make use of this new builtin trait will reduce memory usage and, in turn, improve the performance of the compiler checking whether a type is copyable or not.

  2. Properly check interface implementations

    In previous releases the check to verify that a class implements all methods of the interfaces it implements was performed late in the compilation phase. This caused the check to not be performed when code generation was skipped (compiling with the -o- flag).

    In this release the check has been moved to an earlier phase of the compilation, causing errors to be reported even when the -o- flag is used. This can cause some breakage if a piece of code has only been compiled with the -o- flag.

    The compiler will now properly report an error for the following code when the -o- flag is used:

    interface Foo
        void foo();
    class Bar : Foo

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");

Dub changes

  1. Improved CLI extensibility

    The code from the runDubCommandLine was moved to some other structs. The new CommandLineHandler structure takes care of the CLI state and commands, which allows DUB commands to be extended in other projects.

    The CommandArgs class now has new hasAppArgs and appArgs methods which allows you to get the app arguments. In addition, the extractAllRemainingArgs method will return all unused arguments and the app arguments.

List of all bug fixes and enhancements in D 2.093.0:

DMD Compiler regressions

  1. Bugzilla 19550: [REG 2.078] Massive compiler backend slowdown

DMD Compiler bugs

  1. Bugzilla 11292: Cannot re-initialize a const field in postblit
  2. Bugzilla 15235: inline asm: silent ICE (segfault) in asm_add_exp()
  3. Bugzilla 16971: Misleading error messages "break is not inside scope(exit) bodies" "continue is not inside scope(exit) bodies"
  4. Bugzilla 20719: Self referential struct definition causes stack overflow
  5. Bugzilla 20747: @live tracking of non-pointer owners not done
  6. Bugzilla 20771: va_arg doesn't work for structs with postblits
  7. Bugzilla 20772: va_arg doesn't work for structs with copy constructors
  8. Bugzilla 20775: Missing fail compilation test for passing types that need destruction
  9. Bugzilla 20780: Function parameter UDA not accepted in nested function declarations
  10. Bugzilla 20789: is(T: U) doesn't exclude deprecated alias calls with -de
  11. Bugzilla 20800: Error: cannot implicitly convert expression with bad diagnostic.
  12. Bugzilla 20825: the filename of the error messages generated by dmd build.d script miss the "src/" part of the path
  13. Bugzilla 20840: No deprecation when using template from deprecated selective import
  14. Bugzilla 20842: Structs with disabled default/copy ctors can't be initialized
  15. Bugzilla 20861: Interface implementations are not checked when code gen is skipped

DMD Compiler enhancements

  1. Bugzilla 20791: extern(C++ ) should allow a trailing comma
  2. Bugzilla 20796: protection attribute package(x.y) does not bind to one of ancestor packages of module x.y when declared in x/y/package.d

Phobos bugs

  1. Bugzilla 9298: some std.math functions not implemented for Win64
  2. Bugzilla 20426: doesPointTo with void[N] fails
  3. Bugzilla 20751: SortedRange with ref predicate parameters fails
  4. Bugzilla 20782: can't convert string to const enum
  5. Bugzilla 20783: std.string.lastIndexOf doesn't work correctly in CTFE
  6. Bugzilla 20836: std.math: reorder declarations from most visible to least
  7. Bugzilla 20850: Can't assign enum of Tuple
  8. Bugzilla 20874: std.json.assign requires '@safe' and 'pure'

Phobos enhancements

  1. Bugzilla 19525: Duration is not usable with zero-arg std.algorithm.sum
  2. Bugzilla 20496: chunkby should support ref predicates
  3. Bugzilla 20869: std.algorithm.mutation : move is overly trusting of opPostMove
  4. Bugzilla 20887: Improve speed of std.digest.digest!(Hash, Range) on non-array ranges

Druntime bugs

  1. Bugzilla 18011: core.sys.condition cannot be used as shared
  2. Bugzilla 20760: checkaction=context doesnt print floating point numbers correctly
  3. Bugzilla 20763: checkaction=context does not format pointers
  4. Bugzilla 20767: [DIP1014] __move_post_blt must only recursively call itself on a struct's fields not all members
  5. Bugzilla 20768: [DIP1014] __move_post_blt must recursively call itself on static arrays whose elements are structs or static arrays that recursively contain structs
  6. Bugzilla 20852: core.sys.posix.sys.wait missing definitions on FreeBSD

Druntime enhancements

  1. Bugzilla 20746: Change LCG in garbage collector treap to use full 64 bits of state instead of 48
  2. Bugzilla 20787: Add module core.sys.darwin.sys.attr with getattrlist, setattrlist, searchfs, and related definitions
  3. Bugzilla 20844: DMD compiler should take care of data alignment, after seeing the 'cas' call
  4. Bugzilla 20859: Add overloads of core.sync.rwmutex.ReadWriteMutex.Reader/Writer.tryLock that take a timeout duration enhancements

  1. Bugzilla 20882: Outdated examples in the documentation (std.stdio)

Installer bugs

  1. Bugzilla 20826: CI breakage: create_dmd_release attempts to copy the complete dmd repo.

Contributors to this release (48)

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

previous version: 2.092.0