DMD Changelog

What's new in DMD 2.108.0

Apr 2, 2024
  • Compiler changes:
  • Added .nameSig field to TypeInfo_Class in object.d
  • Keywords like __FILE__ are always evaluated at the call site
  • Hex strings now convert to integer arrays
  • Add support for Interpolated Expression Sequences
  • Named arguments for functions have been implemented and documented
  • Library changes:
  • isForwardRange, isBidirectionalRange, and isRandomAccessRange now take an optional element type
  • std.uni has been upgraded from Unicode 15.0.0 to 15.1.0
  • Dub changes:
  • The fetch command now supports multiple arguments, recursive fetch, and is project-aware

New in DMD 2.107.1 (Mar 2, 2024)

  • DMD Compiler regression fixes:
  • Bugzilla 20802: [REG2.088.0] Link failure with writefln
  • Bugzilla 24371: [REG 2.104] String array concatenation does not respect operator precedence
  • DMD Compiler bug fixes:
  • Bugzilla 20297: ld: warning: no platform load command found for macOS
  • Bugzilla 21047: Linker error: GOT load reloc does not point to a movq instruction
  • Bugzilla 22556: Invalid GOT load reloc with -O on MacOS
  • Bugzilla 23517: dmd with -g flag fails to link on macOS with unaligned pointer
  • Bugzilla 24137: Link failure on macOS with symbol count from symbol table and dynamic symbol table differ
  • Bugzilla 24365: ICE when printing 'showCtfeContext' error
  • Bugzilla 24370: static array values in static AA initialise to dynamic arrays
  • Bugzilla 24399: Link failure on MacOS with address=0x0 points to section(2) with no content in config_a68_4c3.o
  • Bugzilla 24401: OSX: Linker error: GOT load reloc does not point to a movq instruction
  • Bugzilla 24402: OSX: Linker warning: pointer not aligned at __OBJC_PROTOCOL_$_Foo
  • Bugzilla 24407: OSX: ld: Assertion failed: (slot < _sideTableBuffer.size()), function addAtom
  • Bugzilla 24409: DMD crash for CTFE in stompOverlappedFields
  • Bugzilla 24422: ImportC: ICE: Segfault in cparseFunctionDefinition

New in DMD 2.107.0 (Feb 2, 2024)

  • Compiler changes:
  • A string literal as an assert condition is deprecated
  • Makefiles cleanup for the compiler
  • Unrecognized pragmas are no longer an error, but instead simply ignored
  • Added @standalone for module constructors
  • _d_newarray{mTX,miTX,OpT} are converted to a single template: _d_newarraymTX
  • Runtime changes:
  • Using an invalid MemoryOrder for core.atomic operations are now rejected at compile time
  • Makefiles cleanup for druntime
  • New addition of the C stdatomic header implemented in D
  • Library changes:
  • isForwardRange now takes an optional element type.
  • Makefiles cleanup

New in DMD 2.107.0 Beta 1 (Jan 2, 2024)

  • Compiler changes:
  • A string literal as an assert condition is deprecated
  • Makefiles cleanup for the compiler
  • Unrecognized pragmas are no longer an error, but instead simply ignored
  • Added @standalone for module constructors
  • _d_newarray{mTX,miTX,OpT} are converted to a single template: _d_newarraymTX
  • Runtime changes:
  • Makefiles cleanup for druntime
  • New addition of the C stdatomic header implemented in D
  • Library changes:
  • isForwardRange now takes an optional element type.
  • Makefiles cleanup

New in DMD 2.106.1 (Jan 2, 2024)

  • DMD Compiler regression fixes:
  • Bugzilla 22212: dmd version has -dirty suffix on windows
  • DMD Compiler bug fixes:
  • Bugzilla 22483: DMD generates invalid string sections that work by coincidence
  • Bugzilla 24281: Segfault with missing field after named argument
  • Bugzilla 24283: [SIMD][CODEGEN] Bad codegen with and not + AVX2 registers

New in DMD 2.106.1 (Jan 2, 2024)

  • DMD Compiler regression fixes:
  • Bugzilla 22212: dmd version has -dirty suffix on windows
  • DMD Compiler bug fixes:
  • Bugzilla 22483: DMD generates invalid string sections that work by coincidence
  • Bugzilla 24281: Segfault with missing field after named argument
  • Bugzilla 24283: [SIMD][CODEGEN] Bad codegen with and not + AVX2 registers

New in DMD 2.106.0 (Dec 3, 2023)

  • Compiler changes:
  • Catch clause must take only const or mutable exceptions
  • Improvements for the C++ header generation
  • A function with enum storage class is now deprecated, not an error
  • Add -nothrow Switch to Compiler
  • Added support for Intel CET (Control-flow Enforcement Technology) IBT (Indirect Branch Tracking) protection
  • Creating a scope class instance with a non-scope constructor is @system only with DIP1000
  • Global const variables can no longer be initialized from a non-shared static constructor
  • Global variables can now be initialized with Associative Arrays
  • _d_newarray{U,T,iT} are converted to templates
  • Runtime changes:
  • 4 core.memory.GC functions have been marked @safe
  • Library changes:
  • Undo etc.c.odbc deprecation and enable usage on non-Windows systems
  • isInputRange now takes an optional element type.
  • Add Unshared to std.traits.
  • Dub changes:
  • Added --deep= switch to dub build
  • Added default-config, configs, default-build, builds data to dub describe
  • Dub init now has a select menu for package format and license
  • Added --recipe= switch to DUB

New in DMD 2.105.3 (Nov 2, 2023)

  • DMD Compiler regression fixes
  • Bugzilla 24171: [REG 2.100] Segfault compiling an empty ddoc file
  • Bugzilla 24188: ICE (Illegal instruction) with missing imported symbol
  • DMD Compiler bug fixes
  • Bugzilla 23686: template instance reused with default alias arg
  • Bugzilla 23865: duplicate alias not detected

New in DMD 2.105.2 (Sep 16, 2023)

  • DMD Compiler regression fixes:
  • 'need this' when invoking outer method from inner method
  • Array comparison lowering apparently not handled properly in __traits(compiles)
  • ICE / regression from 2.103.1 - segfault on CTFE only code in 2.104.2 and 2.105.0
  • Silent file name index overflow
  • DMD Compiler bug fixes:
  • 'this' corruption in extern(C++) dtor when destructing via TypeInfo_Struct
  • Phobos bug fixes:
  • Int128.opBinary [+-*/%&|^] with negative long arguments gives wrong answers

New in DMD 2.105.1 (Sep 15, 2023)

  • A function with enum storage class is now deprecated, not an error

New in DMD 2.105.0 (Aug 2, 2023)

  • Compiler changes:
  • Assignment-style syntax is now allowed for alias this
  • Catch clause must take only const or mutable exceptions
  • Functions can no longer have enum storage class
  • Overloading extern(C) functions is now an error
  • Deprecation phase ended for access to private method when overloaded with public method.
  • Added predefined version identifier VisionOS
  • Runtime changes:
  • Linux input header translations were added to druntime
  • Integration with the Valgrind memcheck tool has been added to the garbage collector
  • Library changes:
  • Better static assert messages for std.algorithm.iteration.permutations
  • Added std.system.instructionSetArchitecture and std.system.ISA
  • Dub changes:
  • Exposed --d-versions CLI flag

New in DMD 2.104.2 (Jul 15, 2023)

  • DMD Compiler regression fixes:
  • Cannot use traits(getAttributes) with overloaded template
  • ImportC: ICE on nested C initializer 2
  • DMD Compiler bug fixes:
  • Segmentation fault on mixin template + using unknown type
  • "alias this" not properly dereferenced when the object being looked up is a field of a type
  • Error: instantiated from here: maxElement!("a.a", A[])
  • Druntime regression fixes:
  • "Warning: cannot inline function" in core.lifetime

New in DMD 2.104.1 (Jul 14, 2023)

  • DMD Compiler regression fixes:
  • Appending deprecated structs in deprecated function causes deprecation message
  • ICE: dip1021 memory corruption
  • ICE on failed alias this attempt on pointer expression
  • address of a __traits(getOverloads) item is not converted to a delegate anymore
  • DMD Compiler bug fixes:
  • Segfault for function contract -preview=dip1021
  • ICE: Invalid array access for invalid interface definition
  • ImportC: ICE on nested C initializer
  • segfault when printing scope inference failure
  • ICE: dip1021 asserts on typeof(null) parameter
  • Phobos regression fixes:
  • std.range.slide fails in dmd-2.104.0
  • std.algorithm.maxElement no longer works with array of BigInt

New in DMD 2.104.1 Beta (Jul 2, 2023)

  • DMD Compiler regression fixes:
  • Bugzilla 23978: [REG 2.103.0] ICE: dip1021 memory corruption
  • Bugzilla 23979: ICE on failed alias this attempt on pointer expression
  • DMD Compiler bug fixes:
  • Bugzilla 23986: ICE: dip1021 asserts on typeof(null) parameter

New in DMD 2.103.1 (Jun 2, 2023)

  • Compiler changes:
  • Better error message when attribute inference fails down the call stack
  • Using ; as an empty statement has been turned into an error
  • Using in parameters with non extern(D)/extern(C++) functions is deprecated
  • in ref on parameters has been deprecated in favor of -preview=in
  • Throwing qualified objects is now deprecated
  • User Defined Attributes now parse Template Arguments
  • Library changes:
  • Better static assert messages for std.algorithm.comparison.clamp
  • std.typecons.Rebindable now supports all types
  • Tools changes:
  • rdmd supports -shared
  • Dub changes:
  • Add new properties 'cSourcePaths' and 'cImportPaths' to SDL/JSON
  • The way packages are stored internally has changed

New in DMD 2.103.1 (May 2, 2023)

  • Compiler changes:
  • Deprecate invalid special token sequences inside token strings
  • List of all bug fixes and enhancements in D 2.103.1:
  • DMD Compiler regression fixes:
  • Bugzilla 20090: Header generation wrongfully outputs constructor bodies
  • Bugzilla 23816: Typing invalid mnemonic in asm{} block segfaults
  • DMD Compiler bug fixes:
  • Bugzilla 22739: Segmentation fault in CppMangleVisitor.headOfType
  • Bugzilla 22765: Assertion failure in CppMangleVisitor.template_args
  • Bugzilla 22857: Segfault for malformed static if in imported template
  • Druntime regression fixes:
  • Bugzilla 23859: [REG 2.103] Throwing while in a deep callstack causes memory corruption

New in DMD 2.103.0 (Apr 2, 2023)

  • Compiler changes:
  • Add __check(assign-expression) to ImportC
  • Alias this for classes is deprecated
  • -preview=dip25 has been enabled by default
  • export int a; now generates dllexport instead of dllimport
  • Deprecate traits(isVirtualFunction) and traits(getVirtualFunctions)
  • Library changes:
  • Unicode grapheme walking updated to conform to Unicode version 15
  • Better static assert messages for std.algorithm.iteration.joiner
  • Better static assert messages for std.algorithm.sorting.sort
  • Dub changes:
  • The --color argument now accepts values auto, never, always

New in DMD 2.102.2 (Mar 1, 2023)

  • DMD Compiler regression fixes:
  • Bugzilla 23732: Cannot create shared instance of class with -preview=nosharedaccess
  • Bugzilla 23745: Segfault with forward reference mismatched override with undeclared type
  • DMD Compiler bug fixes:
  • Bugzilla 23514: Incorrect compilation when adding a 64-bit constant to a link-time address
  • Bugzilla 23743: wrong code with foreach, ubyte, >=, ternary operator
  • Phobos bug fixes:
  • Bugzilla 23750: log1p for floats/doubles not actually providing extra accuracy
  • Druntime regression fixes:
  • Bugzilla 23608: [musl 32-bit] Time functions linked incorrectly on musl >=1.2.0 / 32-bit

New in DMD 2.102.2 Beta 1 (Feb 26, 2023)

  • DMD Compiler bug fixes:
  • Bugzilla 23514: Incorrect compilation when adding a 64-bit constant to a link-time address
  • Druntime regression fixes:
  • Bugzilla 23608: [musl 32-bit] Time functions linked incorrectly on musl >=1.2.0 / 32-bit

New in DMD 2.102.0 (Feb 2, 2023)

  • DMD Compiler regression fixes:
  • Bugzilla 19268: BetterC turns off .dup for CTFE
  • Bugzilla 20520: Runtime segfault when taking typeid of a class instanciated within an enum
  • Bugzilla 21301: Wrong values being passed in long parameter list
  • Bugzilla 23307: [REG][CODEGEN][SIMD] wrong codegen with inlined local functions + SIMD
  • Bugzilla 23539: [REG master] Scope C++ definition out of sync with D
  • Bugzilla 23548: [REG 2.098] C sources files have precedent over D modules in imports
  • Bugzilla 23569: [REG 2.081][ICE] Segmentation fault in in AggregateDeclaration::getType() (this=0x0) at src/dmd/aggregate.d:594
  • Bugzilla 23587: cast(void) doesn't work for noreturn
  • Bugzilla 23591: [REG 2.101] Invalid casts accepted by the compiler if from type is noreturn
  • Bugzilla 23607: invalid code leading to an ICE due to an error message that's not emitted anymore
  • Bugzilla 23626: [REG2.096] Template deduction with auto const ref Args... and delegate
  • DMD Compiler bug fixes:
  • Bugzilla 13060: @nogc reading an associative array
  • Bugzilla 15414: __traits(getAttributes) should error if the function has multiple overloads
  • Bugzilla 15712: extern(C) attribute inside extern(C) unittest is incorrectly ignored
  • Bugzilla 18026: Stack overflow in ddmd/dtemplate.d:6241, TemplateInstance::needsCodegen()
  • Bugzilla 19623: HERE string identifier cannot start with Unicode letter
  • Bugzilla 19649: Misleading error message for duplicate constraints
  • Bugzilla 21062: Confusing error when using a keyword as an identifier for a declaration
  • Bugzilla 21506: misalignment of _argptr for variadic functions
  • Bugzilla 21613: DMD crash: copy ctor + templated rvalue ctor
  • Bugzilla 22759: ImportC: cannot modify const expression from dereferencing const pointer declared within function.
  • Bugzilla 23122: enum member UDAs semantics are not checked properly
  • Bugzilla 23218: ICE: src/dmd/backend/cgxmm.d:1373: Assertion `0' failed.
  • Bugzilla 23412: void init member detection does not account for static arrays
  • Bugzilla 23418: double argument is passed on stack, but assumed to be in XMM0 register
  • Bugzilla 23447: wrong expression in error message when template instance doesn't match any overload
  • Bugzilla 23462: dmd: src/dmd/backend/cod2.d:2158: Assertion cast(int)tysize((*e).Ety) <= REGSIZE() failed
  • Bugzilla 23463: Don't count skipped function overloads when limiting overloads shown
  • Bugzilla 23465: Invalid token error points to wrong line
  • Bugzilla 23470: Backticks in diagnostic are confusing with wrong number of arguments passed
  • Bugzilla 23491: Nonsensical deprecation message when using delegate
  • Bugzilla 23531: [DIP1000] scope variable can be assigned as AA key
  • Bugzilla 23534: __traits(isZeroInit) is true for enums with explicit values
  • Bugzilla 23536: crt_constructors and crt_destructors should not be non-static member functions
  • Bugzilla 23568: Error: cannot implicitly convert expression 'a < b' of type 'float4' to 'int4'
  • Bugzilla 23578: Types are not matched to alias parameters in "is" expression
  • Bugzilla 23586: DMD forgets a variable was just declared.
  • Bugzilla 23593: core.thread: suspendAll doesn't wait for all if current thread has detached itself
  • Bugzilla 23614: ImportC: __int128 not supported
  • Bugzilla 23618: Right Shift equals expressions on unsigned shorts should be unsigned right shift
  • Bugzilla 23620: 'alias this' is not respected in static array length position
  • DMD Compiler enhancements:
  • Bugzilla 9848: Better diagnostic when type declaration was not expected
  • Bugzilla 15368: Improve error message for "auto" keyword inside "foreach"
  • Bugzilla 21338: Confusing error message for template overload resolution failure
  • Bugzilla 22306: scope array variable should be stack allocated
  • Bugzilla 23410: ImportC: binary constants not allowed
  • Bugzilla 23424: improve error when template instantiation doesn't match any overload
  • Bugzilla 23458: No template candidates listed when OverDeclaration or OverloadSet don't match
  • Bugzilla 23466: -verrors=context should not repeat same context for supplemental messages
  • Bugzilla 23480: non-empty ForStatement Increment clause should require a side effect
  • Bugzilla 23552: Function x does not override any function, but it actually does
  • Bugzilla 23566: ImportC: __PRETTY_FUNCTION__ is not defined
  • Phobos bug fixes:
  • Bugzilla 23319: std.range.Generator does not work with non-mutable elements
  • Bugzilla 23488: std.format.sformat mishandles char ranges
  • Bugzilla 23507: Socket.blocking property incorrect on new Socket on Windows
  • Bugzilla 23540: std.uni loadProperty aliases for C are incorrect
  • Bugzilla 23561: std.typecons.Unique!struct does not destroy struct instance
  • Bugzilla 23640: Nullable range iteration doesn't work with immutable values
  • Phobos enhancements:
  • Bugzilla 19737: [std.experimental.allocator] link table in docs has missing symbols
  • Bugzilla 23453: Generic iota should be a forward range
  • Druntime regression fixes:
  • Bugzilla 22616: Infinity loop instead of InvalidMemoryOperationError during GC routine
  • Bugzilla 23562: [REG master] Segmentation fault in core.demangle
  • Druntime bug fixes:
  • Bugzilla 16641: Infinite loop on InvalidMemoryOperationError in __dmd_personality_v0
  • Bugzilla 19467: Support EV_SET on OSX
  • Bugzilla 23572: OpenBSD: Add OpenBSD to the RTLD_DEFAULT list
  • Druntime enhancements:
  • Bugzilla 20650: Cryptic error message when GC called in finalizer
  • Bugzilla 23332: core.sync.condition notify methods should be @nogc
  • Dlang.org bug fixes:
  • Bugzilla 23382: Non-template requirement for copy constructors is undocumented
  • Bugzilla 23436: Spec falsely states mutable references in struct .init are forbidden
  • Bugzilla 23541: [ImportC] dlang.org contains incorrect links
  • Dlang.org enhancements:
  • Bugzilla 23426: Example Run button shows wrong line numbers for errors
  • Bugzilla 23432: document when array capacity is zero and capacity performance
  • Bugzilla 23511: Incrementing a not supported type in enum
  • Bugzilla 23553: opCmp spec is incomplete
  • Installer bug fixes:
  • Bugzilla 23623: On 64 bit Windows the path should point to 64 bit dmd.

New in DMD 2.101.2 (Jan 1, 2023)

  • DMD Compiler regression fixes:
  • Bugzilla 18646: [REG 2.079.0] Recursive template expansion incorrectly reported
  • Bugzilla 20811: Regression as of 2.066.0 - CTFE static variable retained across calls
  • Bugzilla 22638: [REG 2.096][ICE] cod4.d: Assertion cast(int)sz > 0 failed
  • Bugzilla 22646: [REG2.099] CT bounds checking ignores short circuit evaluation
  • Bugzilla 22813: [REG 2.079.1] recursive template expansion
  • Bugzilla 22854: static foreach byCodepoint segfault (2.099-rc.1)
  • Bugzilla 22975: 3 cyclic aliases with meaningful overloads not caught [ice]
  • Bugzilla 23391: [Reg 2.098.1] Segmentation fault with static foreach + range + inout
  • Bugzilla 23499: inliner crashes/asserts when building for 32-bit
  • Bugzilla 23564: [REG 2.099.0] SIGSEGV during compilation
  • Bugzilla 23567: pragma(printf) messes up with the vtable of extern(C++) classes
  • Bugzilla 23589: [REG2.095] Purity check special case gives circular reference error.
  • DMD Compiler bug fixes:
  • Bugzilla 14907: DMD crash when using template name as a default value of template's typed argument
  • Bugzilla 19585: Invalid recursive template expansion error
  • Bugzilla 23151: ICE: core.exception.AssertError@src/dmd/aggregate.d(678): Assertion failure
  • Bugzilla 23574: ICE: AssertError@src/dmd/optimize.d(866): Assertion failure

New in DMD 2.101.1 (Dec 15, 2022)

  • DMD Compiler regression fixes:
  • Bugzilla 23490: DMD creating corrupted vtable
  • Bugzilla 23497: Erroneous escape reference to parameter error.
  • Bugzilla 23532: Missing type properties for complex special enum types
  • Bugzilla 23549: assert(0) as default parameter causes segfault
  • DMD Compiler bug fixes:
  • Bugzilla 22587: ternary with function call and assert(0) leads to cod1 assertion
  • Bugzilla 23481: [inf loop] usertype enums opOpAssign cause an compile time infinite loop
  • Bugzilla 23516: Anonymous enum without base type causes segfault inferring member value
  • Bugzilla 23529: [ICE] Compiler segfaults on static array cast
  • Bugzilla 23533: Segmentation fault accessing enum.max with -preview=nosharedaccess
  • Phobos bug fixes:
  • Bugzilla 22745: std.parallelism.parallel fails to process empty range on a single CPU
  • Druntime enhancements:
  • Bugzilla 23498: OpenBSD: Fix core.sys.posix.sys.wait

New in DMD 2.101.0 (Nov 15, 2022)

  • Compiler changes:
  • Add bit fields to D
  • Added __traits(classInstanceAlignment)
  • Relaxed pragma(crt_constructor) / pragma(crt_destructor) linkage check
  • Add predefined version D_Optimized when compiling with -O
  • Throwing from contracts of nothrow functions has been deprecated
  • Using integers for version or debug conditions has been deprecated
  • Print deprecations for scope pointer errors
  • Improvements for the C++ header generation
  • Preview=fixImmmutableConv has been added
  • Returning a discarded void value from a function is now deprecated
  • ImportC now recognizes the typeof(...) operator
  • Removed the -transition=markdown and -revert=markdown switches
  • New can now allocate an associative array
  • Preview=in can now be used with extern(C++), disabled for other non-D linkage
  • The shortened method syntax is now available by default.
  • Source files may no longer contain Unicode directionality overrides
  • Double DMD stack limit to 16 MB
  • Runtime changes:
  • Added avx512f detection to core.cpuid
  • --DRT-oncycle=deprecate is removed
  • Posix (excl. Darwin): Switch default GC signals from SIGUSR1/2 to SIGRTMIN/SIGRTMIN+1
  • Library changes:
  • Added SafeRefCounted, that can be used in @safe with -preview=dip1000.
  • Move logger out of experimental.
  • Remove std.experimental.logger's capability to set the minimal LogLevel at compile time
  • Change std.experimental.logger.core.sharedLog to return shared(Logger)
  • Std.experimental.typecons has been removed
  • Std.digest.digest has been removed
  • Std.xml has been removed
  • Std.socket.Socket methods now accept only scope arrays.
  • Add custom fill value to std.outbuffer.OutBuffer class
  • Dub changes:
  • Building the special test runner configuration
  • Output will now be colorized
  • Dub will now warn on unrecognized fields in dub.json, settings, or selections file
  • The two new build types cov-ctfe and unittest-cov-ctfe have been added.
  • DUB settings & packages directory placement overhauled
  • DUB command exit codes have been made more consistent
  • 'install' and 'uninstall' commands have been removed
  • When copyFiles is used to copy read-only files, it now makes the copy writable.
  • The override system is deprecated
  • The shortcut syntax for "dub run" is now also available for sub packages.
  • Upgrading all sub packages at once

New in DMD 2.100.2 (Sep 10, 2022)

  • DMD Compiler regression fixes:
  • Bugzilla 23100: empty array literal passed to scope param not 'falsey' anymore
  • Bugzilla 23148: Missing invariant symbol with static library when template function declares struct with destructor and invariant that instantiates template with lambda, also main has a lambda
  • Bugzilla 23170: Array literal passed to map in lambda, then returned from nested function, is memory corrupted
  • Bugzilla 23172: [REG2.100] Wrong cast inserted for ternary operator and non-int enums
  • Bugzilla 23181: [REG 2.099] AssertError@src/dmd/e2ir.d(6094): Trying reference _d_arraysetctor
  • DMD Compiler bug fixes:
  • Bugzilla 20143: ICE in optimizer on real 0/0 returned as double
  • Bugzilla 21443: scope (failure) with a return breaks safety
  • Bugzilla 21723: Linker error: two module static library, main compiled inline, invariant that defines a function, type alias, and an alias lambda
  • Bugzilla 23082: stringof of template alias overloaded with function accessed by trait: segfault.
  • Bugzilla 23102: pinholeopt, "Conditional jump or move depends on uninitialised value(s)"
  • Bugzilla 23108: ICE: AssertError@src/dmd/clone.d(567): Assertion failure
  • Bugzilla 23109: ICE: AssertError@src/dmd/dclass.d(449): Assertion failure
  • Bugzilla 23114: Can't use noreturn operand in arithmetic expression
  • Bugzilla 23120: dmd illegal instruction throw expression
  • Bugzilla 23166: seg fault when compiling with -inline
  • Bugzilla 23177: ModuleInfo is not exported on Windows
  • Bugzilla 23234: Delegate literal with inferred return value that requires following alias-this uses class cast instead.
  • Bugzilla 23258: ICE on SumType of two arrays of classes
  • Phobos regression fixes:
  • Bugzilla 23132: "cannot access frame pointer" comparing two ranges for equality from v2.099.0
  • Bugzilla 23140: Array!T where T is a shared class no longer works
  • Bugzilla 23238: Cannot write a const Nullable(T, T nullValue)

New in DMD 2.100.0 (May 15, 2022)

  • Compiler changes:
  • End deprecation period for using alias this for partial assignment.
  • The deprecation period for D1-style operators has ended.
  • scope as a type constraint on class, struct, and enum declarations is deprecated.
  • The deprecation period of unannotated asm blocks has been ended.
  • The deprecation period of the delete keyword has been ended.
  • Improvements for the C++ header generation
  • The deprecation period for scope as a type constraint on interface declarations has ended.
  • The inout attribute no longer implies the return attribute
  • Support contract invariant version identifier.
  • Implement DIP 1038: @mustuse
  • Added .tupleof property for static arrays
  • Usage of this and super as types has been removed
  • A missed case of switch case fallthrough has been deprecated
  • Library changes:
  • New function bind in std.functional
  • Nullable in std.typecons can now act as a range
  • Zlib updated to 1.2.12
  • Tools changes:
  • rdmd now supports specifying the D compiler using the RDMD_DMD environment variable
  • Dub changes:
  • Builds dynamicLibrary targets as dynamic libraries instead of static libraries.
  • The $DUB_BUILD_PATH variable was added
  • Command environment variable substitution changed
  • Posix: use /etc/dub/settings.json if DUB is installed in /usr
  • Adds injection of source files from dependencies via injectSourceFiles command

New in DMD 2.099.1 (Apr 7, 2022)

  • DMD Compiler regression fixes:
  • Bugzilla 17434: [REG: 2.073] import lookup ignores public import.
  • Bugzilla 20015: [REG 2.086] Deprecated -preview, -revert, and -transition options not documented
  • Bugzilla 20717: Unsilenced bogus "undefined identifier" error from speculative collision
  • Bugzilla 21285: Delegate covariance broken between 2.092 and 2.094 (git master).
  • Bugzilla 22175: assert fail when struct assignment value is desired and struct size is odd
  • Bugzilla 22639: Copy constructors with default arguments not getting called
  • Bugzilla 22858: [REG2.099] Incorrect alignment of void*[0]
  • Bugzilla 22859: Error: forward reference of variable isAssignable for mutually recursed allSatisfy
  • Bugzilla 22860: Error: unknown with mutually recursive and nested SumType
  • Bugzilla 22863: [REG2.099] -main doesn't work anymore when used for linking only (without source modules)
  • Bugzilla 22969: Can't mixin name of manifest constant on right-hand side of alias declaration
  • DMD Compiler bug fixes:
  • Bugzilla 22852: importC: Lexer allows invalid wysiwyg and hex strings
  • Bugzilla 22853: importC: Lexer allows nesting block comments
  • Bugzilla 22868: __traits(parameters) returns parameters of delegate instead of function
  • Bugzilla 22871: Using an alias to __traits(parameters) causes unknown error
  • Bugzilla 22939: bad error message: Error: no property msg for type string
  • Bugzilla 22942: Invalid section type / offset for newer XCode versions
  • Bugzilla 22993: Missing quotes in octal literal hint
  • Druntime regression fixes:
  • Bugzilla 20778: exception messages with nulls within are treated inconsistently
  • Druntime enhancements:
  • Bugzilla 22908: OpenBSD: Add getpwnam_shadow and getpwuid_shadow function prototypes
  • Dlang.org bug fixes:
  • Bugzilla 21086: Wrong source link for core.thread.context

New in DMD 2.099.0 (Mar 8, 2022)

  • Compiler changes:
  • When ref scope return attributes are used on a parameter, and return scope appears, the return applies to the scope, not the ref.
  • __traits(parameters) has been added to the compiler.
  • Add ability to import modules to ImportC
  • Casting between compatible sequences
  • New command line switch -vasm which outputs assembler code per function
  • The '-preview=intpromote' switch is now set by default.
  • m32 now produces MS Coff objects when targeting windows
  • Ignore unittests in non-root modules
  • main can now return type noreturn and supports return inference
  • Falling through switch cases is now an error
  • Throw expression as proposed by DIP 1034 have been implemented
  • Added __traits(initSymbol) to obtain aggregate initializers
  • Runtime changes:
  • Add support for OpenBSD ioctls
  • Add support for @safe class opEquals
  • Library changes:
  • Move checkedint out of experimental.
  • chunkBy @safe with forward ranges and splitWhen fully @safe
  • std.csv can now optionally handle csv files with variable number of columns.
  • Change default log level for std.experimental.logger to LogLevel.warning
  • std.conv.to accepts std.typecons tuples
  • Dub changes:
  • Windows: Copy PDB files to targetPath, alongside executable/DLL

New in DMD 2.098.1 (Dec 20, 2021)

  • MD Compiler regression fixes:
  • Bugzilla 20133: [REG2.084.0] Bogus slice assignment in recursive CTFE call
  • Bugzilla 20236: spurious deprecation warnings on function calls within with(X) blocks while X has a deprecated alias this target
  • Bugzilla 20860: OpDispatch does not work for structs with constructor and destructor
  • Bugzilla 20998: error in static struct initialization causes wrong position for subsequent members, producing extra errors
  • Bugzilla 21039: alias this returns 'null' for ref types when put into array initializer
  • Bugzilla 21073: Rebindable does not work when class has alias this to inout property
  • Bugzilla 21380: A case of compiler crash when using auto ref
  • Bugzilla 21414: Spurious "non-constant expression" error with immutable constructors
  • Bugzilla 21438: Compiler segfault on static array in a struct at CTFE
  • Bugzilla 22004: [REG2.097] Error: mismatched function return type inference of void and noreturn
  • Bugzilla 22151: Compiler crash when attempting to assign to function
  • Bugzilla 22300: [REG 2.098-rc.2] -checkaction=context of a shared type with an opCast fails to compile
  • Bugzilla 22385: CTFE fails to iterate over associative array previously indexed with implicit conversion to enum base type
  • Bugzilla 22410: [REG2.094] function with tuple parameter with default argument fails if there's a qualifier
  • Bugzilla 22420: [REG2.098] Apparent CTFE regression wrt. alias this
  • Bugzilla 22472: Invalid error message for void return from non-void functions
  • Bugzilla 22512: importC: incomplete array type must have initializer
  • Bugzilla 22514: Invalid duplicate case error when the switched value has errors
  • Bugzilla 22516: Segfault for function literal in struct initializer with previous errors
  • Bugzilla 22529: wrong deprecation about empty statement
  • Bugzilla 22558: [REG 2.098] Error: function 'core.stdc.stdio.vfprintf' 'pragma(printf)' functions must be 'extern(C) int vfprintf([parameters...], const(char)*, va_list)'
  • Bugzilla 22570: more arguments than fields allowed in struct constructor
  • Bugzilla 22584: importC: Error: undefined reference to 'parameter' when no parameter names in forward declaration
  • Bugzilla 22585: importC: Error: variable 'var' extern symbols cannot have initializers
  • Bugzilla 22592: importC: Segmentation fault indexing global array at run-time
  • Bugzilla 22593: ICE on overloaded constructors
  • DMD Compiler bug fixes:
  • Bugzilla 16579: ReturnStatement[CallExp(DotVarExp)]: Corrupted runtime on missed manifest constant propagation
  • Bugzilla 18054: Wrong cast of float constant to bool
  • Bugzilla 19660: 'export' keyword on OSX/Linux globals causing segfaults
  • Bugzilla 21093: [ICE] AssertError@dmd/optimize.d(691): Assertion failure
  • Bugzilla 21794: Internal compiler assertion
  • Bugzilla 21930: ICE (illegal instruction) with bad code
  • Bugzilla 21950: cod1: Assertion failure for noreturn parameter
  • Bugzilla 21952: ice for global / tls variable of type noreturn
  • Bugzilla 21957: ice when dmd computes the alignment of an union containing a noreturn
  • Bugzilla 22104: importC: Parser accepts arrays with incomplete element types
  • Bugzilla 22315: ImportC: #pragma pack is not implemented
  • Bugzilla 22323: Link error for virtual destructor of C++ class in DLL
  • Bugzilla 22362: ImportC: error parsing compound literal with more than one value at function scope.
  • Bugzilla 22375: importC: Error: C non-array initializer not supported yet
  • Bugzilla 22376: importC: Error: cannot use non-constant CTFE pointer in an initializer
  • Bugzilla 22388: Wrong overload selected for @safe delegate
  • Bugzilla 22389: noreturn functions are allowed to return normally
  • Bugzilla 22398: importC: Error: unknown, when compiling source with non-constant initializer.
  • Bugzilla 22399: importC: Error: static variable cannot be read at compile time
  • Bugzilla 22400: importC: Error: unknown, when compiling source with typedef'd initializer
  • Bugzilla 22402: importC: Error: can't subtract '__tag2[1]' from pointer
  • Bugzilla 22403: importC: Error: cannot pass argument '0' of type 'int' to parameter 'const(char)*'
  • Bugzilla 22405: importC: Error: cannot modify 'const' expression '(*s).field'
  • Bugzilla 22406: importC: Error: 'switch' statement without a 'default'; use 'final switch' or add 'default: assert(0);' or add 'default: break;'
  • Bugzilla 22407: importC: Error: cannot implicitly convert expression of type 'extern (C) int(int a)' to 'const(extern (C) int function(int))'
  • Bugzilla 22409: importC: [ICE] Error: struct no size because of forward reference
  • Bugzilla 22411: importC: Error: cannot implicitly convert expression of type 'const(char*)' to 'char*'
  • Bugzilla 22413: importC: Error: array index 0 is out of bounds
  • Bugzilla 22422: ImportC: parse gnu attributes after a function parameter
  • Bugzilla 22428: importC: static variables/functions emit global symbols
  • Bugzilla 22432: ImportC: casting result of postfix operator on a parenthesized expression to a typedef’d type is parsed incorrectly
  • Bugzilla 22461: OpenBSD: Use fmodl
  • Bugzilla 22462: OpenBSD: bash lives in /usr/local
  • Bugzilla 22463: OpenBSD: Allow DMD to work on 32-bit OpenBSD
  • Bugzilla 22500: ImportC: Lots of errors when compiling tomlc99
  • Bugzilla 22513: ImportC: address of member of struct can’t be taken at compile time.
  • Bugzilla 22517: [REG 2.093][ICE] Bus error at dmd/lexer.d:398
  • Bugzilla 22530: Explicit cast between classes incorrectly goes through 'alias this' inside CTFE
  • Bugzilla 22531: importC: D name mangling applied to forward declaration of function inside function
  • Bugzilla 22534: ImportC: const pointer (not pointer to const) is treated as transitive const
  • Bugzilla 22538: importC: function 'func' conflicts with function 'func' when using static in forward declaration
  • Bugzilla 22549: importC: float literal should support leading zero
  • Bugzilla 22560: ImportC: extra semicolon not allowed outside of functions
  • Bugzilla 22573: DMD compiler errors on Illumos/Solaris
  • Bugzilla 22576: ImportC: cannot implicitly convert expression S(0) of type S to int in an S array
  • Bugzilla 22577: ImportC: decay of function to typedef'd const function pointer causes ICE.
  • Bugzilla 22589: importC: Error: undefined reference to '__builtin_va_start' and '__builtin_va_end'
  • Bugzilla 22591: importC: Debug information for C sources have DW_AT_language set to D.
  • Bugzilla 22597: importC: Segmentation fault initializing va_list with __builtin_va_start
  • Bugzilla 22602: importC: Error: cannot convert string literal to 'void*'
  • DMD Compiler enhancements:
  • Bugzilla 22474: OpenBSD: Add support to test/runnable/dhry.d
  • Bugzilla 22475: OpenBSD: Disable test/compilable/cdcmp.d on OpenBSD
  • Bugzilla 22476: OpenBSD: Add OpenBSD to the fail_compilation/fail21227_win.d ignore list
  • Bugzilla 22477: OpenBSD: Add to fail_compilation/fail3753.d ignore list
  • Bugzilla 22478: OpenBSD: Add to fail_compilation/invalid_lib.d
  • Phobos regression fixes:
  • Bugzilla 16705: [REG2.069] TaskPool.reduce fails to compile "cannot get frame pointer to D main"
  • Phobos bug fixes:
  • Bugzilla 22458: OpenBSD: Add OpenBSD to std/system.d OS list
  • Bugzilla 22487: Array!T.init.data crashes
  • Phobos enhancements:
  • Bugzilla 22393: OpenBSD: Add polyImpl implementation for x86
  • Bugzilla 22488: data should work with const/immutable Array's
  • Bugzilla 22511: Nullable is not copyable when templated type has elaborate copy ctor
  • Bugzilla 22557: std.traits.fqnType is missing support for typeof(null)
  • Druntime regression fixes:
  • Bugzilla 21656: [REG2.091] Wrong file read during exception stringification leads to SIGBUS
  • Bugzilla 22210: std.meta.allSatisfy in mutual recursion classes cannot be compiled
  • Bugzilla 22235: core.demangle does not support noreturn
  • Druntime bug fixes:
  • Bugzilla 21919: darwin: SEGV in core.thread tests on OSX 11
  • Bugzilla 22416: Unify polyImpl implementations
  • Bugzilla 22440: OpenBSD: Sync sysctl.d
  • Bugzilla 22443: OpenBSD: Fix Fiber support by adding MAP_STACK
  • Bugzilla 22453: OpenBSD: Add a dummy value for AI_V4MAPPED
  • Bugzilla 22455: Remove useless conditional assignment of DISABLED_TESTS in posix.mak
  • Bugzilla 22456: OpenBSD: timer_* functions don't exist on OpenBSD
  • Bugzilla 22485: OpenBSD: Fix core.sys.openbsd.unistd imports
  • Druntime enhancements:
  • Bugzilla 22395: OpenBSD: Add more OpenBSD-specific function prototypes in string.d and unistd.d
  • Bugzilla 22439: OpenBSD: Sync mman.d
  • Bugzilla 22448: OpenBSD: Add OpenBSD-specific alloc and free function prototypes from stdlib.h
  • Bugzilla 22454: OpenBSD: Add prototypes for pthread_np.h
  • Bugzilla 22457: OpenBSD: enableDwarf in opApply in runtime.d
  • Bugzilla 22542: Explicitly cast backtrace results to int
  • Bugzilla 22545: OpenBSD: Always use system backtrace

New in DMD 2.098.1 Beta 1 (Dec 14, 2021)

  • DMD Compiler regression fixes:
  • Bugzilla 20133: [REG2.084.0] Bogus slice assignment in recursive CTFE call
  • Bugzilla 20236: spurious deprecation warnings on function calls within with(X) blocks while X has a deprecated alias this target
  • Bugzilla 20860: OpDispatch does not work for structs with constructor and destructor
  • Bugzilla 20998: error in static struct initialization causes wrong position for subsequent members, producing extra errors
  • Bugzilla 21039: alias this returns 'null' for ref types when put into array initializer
  • Bugzilla 21073: Rebindable does not work when class has alias this to inout property
  • Bugzilla 21380: A case of compiler crash when using auto ref
  • Bugzilla 21414: Spurious "non-constant expression" error with immutable constructors
  • Bugzilla 21438: Compiler segfault on static array in a struct at CTFE
  • Bugzilla 22004: [REG2.097] Error: mismatched function return type inference of void and noreturn
  • Bugzilla 22151: Compiler crash when attempting to assign to function
  • Bugzilla 22300: [REG 2.098-rc.2] -checkaction=context of a shared type with an opCast fails to compile
  • Bugzilla 22385: CTFE fails to iterate over associative array previously indexed with implicit conversion to enum base type
  • Bugzilla 22410: [REG2.094] function with tuple parameter with default argument fails if there's a qualifier
  • Bugzilla 22420: [REG2.098] Apparent CTFE regression wrt. alias this
  • Bugzilla 22472: Invalid error message for void return from non-void functions
  • Bugzilla 22512: importC: incomplete array type must have initializer
  • Bugzilla 22514: Invalid duplicate case error when the switched value has errors
  • Bugzilla 22516: Segfault for function literal in struct initializer with previous errors
  • Bugzilla 22529: wrong deprecation about empty statement
  • Bugzilla 22570: more arguments than fields allowed in struct constructor
  • Bugzilla 22584: importC: Error: undefined reference to 'parameter' when no parameter names in forward declaration
  • DMD Compiler bug fixes:
  • Bugzilla 16579: ReturnStatement[CallExp(DotVarExp)]: Corrupted runtime on missed manifest constant propagation
  • Bugzilla 18054: Wrong cast of float constant to bool
  • Bugzilla 19660: 'export' keyword on OSX/Linux globals causing segfaults
  • Bugzilla 21093: [ICE] AssertError@dmd/optimize.d(691): Assertion failure
  • Bugzilla 21794: Internal compiler assertion
  • Bugzilla 21930: ICE (illegal instruction) with bad code
  • Bugzilla 21950: cod1: Assertion failure for noreturn parameter
  • Bugzilla 21952: ice for global / tls variable of type noreturn
  • Bugzilla 21957: ice when dmd computes the alignment of an union containing a noreturn
  • Bugzilla 22104: importC: Parser accepts arrays with incomplete element types
  • Bugzilla 22315: ImportC: #pragma pack is not implemented
  • Bugzilla 22323: Link error for virtual destructor of C++ class in DLL
  • Bugzilla 22362: ImportC: error parsing compound literal with more than one value at function scope.
  • Bugzilla 22375: importC: Error: C non-array initializer not supported yet
  • Bugzilla 22376: importC: Error: cannot use non-constant CTFE pointer in an initializer
  • Bugzilla 22388: Wrong overload selected for @safe delegate
  • Bugzilla 22389: noreturn functions are allowed to return normally
  • Bugzilla 22398: importC: Error: unknown, when compiling source with non-constant initializer.
  • Bugzilla 22399: importC: Error: static variable cannot be read at compile time
  • Bugzilla 22400: importC: Error: unknown, when compiling source with typedef'd initializer
  • Bugzilla 22402: importC: Error: can't subtract '__tag2[1]' from pointer
  • Bugzilla 22403: importC: Error: cannot pass argument '0' of type 'int' to parameter 'const(char)*'
  • Bugzilla 22405: importC: Error: cannot modify 'const' expression '(*s).field'
  • Bugzilla 22406: importC: Error: 'switch' statement without a 'default'; use 'final switch' or add 'default: assert(0);' or add 'default: break;'
  • Bugzilla 22407: importC: Error: cannot implicitly convert expression of type 'extern (C) int(int a)' to 'const(extern (C) int function(int))'
  • Bugzilla 22409: importC: [ICE] Error: struct no size because of forward reference
  • Bugzilla 22411: importC: Error: cannot implicitly convert expression of type 'const(char*)' to 'char*'
  • Bugzilla 22413: importC: Error: array index 0 is out of bounds
  • Bugzilla 22422: ImportC: parse gnu attributes after a function parameter
  • Bugzilla 22428: importC: static variables/functions emit global symbols
  • Bugzilla 22432: ImportC: casting result of postfix operator on a parenthesized expression to a typedef’d type is parsed incorrectly
  • Bugzilla 22461: OpenBSD: Use fmodl
  • Bugzilla 22462: OpenBSD: bash lives in /usr/local
  • Bugzilla 22463: OpenBSD: Allow DMD to work on 32-bit OpenBSD
  • Bugzilla 22500: ImportC: Lots of errors when compiling tomlc99
  • Bugzilla 22513: ImportC: address of member of struct can’t be taken at compile time.
  • Bugzilla 22517: [REG 2.093][ICE] Bus error at dmd/lexer.d:398
  • Bugzilla 22530: Explicit cast between classes incorrectly goes through 'alias this' inside CTFE
  • Bugzilla 22534: ImportC: const pointer (not pointer to const) is treated as transitive const
  • Bugzilla 22538: importC: function 'func' conflicts with function 'func' when using static in forward declaration
  • Bugzilla 22549: importC: float literal should support leading zero
  • Bugzilla 22560: ImportC: extra semicolon not allowed outside of functions
  • Bugzilla 22573: DMD compiler errors on Illumos/Solaris
  • Bugzilla 22577: ImportC: decay of function to typedef'd const function pointer causes ICE.
  • DMD Compiler enhancements:
  • Bugzilla 22474: OpenBSD: Add support to test/runnable/dhry.d
  • Bugzilla 22475: OpenBSD: Disable test/compilable/cdcmp.d on OpenBSD
  • Bugzilla 22476: OpenBSD: Add OpenBSD to the fail_compilation/fail21227_win.d ignore list
  • Bugzilla 22477: OpenBSD: Add to fail_compilation/fail3753.d ignore list
  • Bugzilla 22478: OpenBSD: Add to fail_compilation/invalid_lib.d
  • Phobos regression fixes:
  • Bugzilla 16705: [REG2.069] TaskPool.reduce fails to compile "cannot get frame pointer to D main"
  • Phobos bug fixes:
  • Bugzilla 22458: OpenBSD: Add OpenBSD to std/system.d OS list
  • Bugzilla 22487: Array!T.init.data crashes
  • Phobos enhancements:
  • Bugzilla 22393: OpenBSD: Add polyImpl implementation for x86
  • Bugzilla 22488: data should work with const/immutable Array's
  • Bugzilla 22511: Nullable is not copyable when templated type has elaborate copy ctor
  • Bugzilla 22557: std.traits.fqnType is missing support for typeof(null)
  • Druntime regression fixes:
  • Bugzilla 22210: std.meta.allSatisfy in mutual recursion classes cannot be compiled
  • Bugzilla 22235: core.demangle does not support noreturn
  • Druntime bug fixes:
  • Bugzilla 21919: darwin: SEGV in core.thread tests on OSX 11
  • Bugzilla 22416: Unify polyImpl implementations
  • Bugzilla 22440: OpenBSD: Sync sysctl.d
  • Bugzilla 22443: OpenBSD: Fix Fiber support by adding MAP_STACK
  • Bugzilla 22453: OpenBSD: Add a dummy value for AI_V4MAPPED
  • Bugzilla 22455: Remove useless conditional assignment of DISABLED_TESTS in posix.mak
  • Bugzilla 22456: OpenBSD: timer_* functions don't exist on OpenBSD
  • Bugzilla 22485: OpenBSD: Fix core.sys.openbsd.unistd imports
  • Druntime enhancements:
  • Bugzilla 22395: OpenBSD: Add more OpenBSD-specific function prototypes in string.d and unistd.d
  • Bugzilla 22439: OpenBSD: Sync mman.d
  • Bugzilla 22448: OpenBSD: Add OpenBSD-specific alloc and free function prototypes from stdlib.h
  • Bugzilla 22454: OpenBSD: Add prototypes for pthread_np.h
  • Bugzilla 22457: OpenBSD: enableDwarf in opApply in runtime.d
  • Bugzilla 22542: Explicitly cast backtrace results to int
  • Bugzilla 22545: OpenBSD: Always use system backtrace

New in DMD 2.098.0 (Oct 10, 2021)

  • Compiler changes:
  • Add Alias Assignment
  • Accessing C Declarations From D Via ImportC Compiler
  • Using the syntax (args) => {} now triggers a deprecation message
  • Improvements for the C++ header generation
  • -preview=dtorfields is now enabled by default
  • Add .min, .max, etc. properties for vector types.
  • Using a mutable variable as a switch case now triggers an error
  • Out of bounds array access now gives a better error message
  • Class allocators have been removed from the language
  • Initialization of immutable global data from static this now triggers an error
  • Add -target=<triple> for operating system, c, and c++ runtime cross compilation
  • Default initialization of union field that isn't the first member now triggers an error
  • Runtime changes:
  • TypeInfo names for aggregates are fully qualified and hence unique now
  • A concurrent GC for Posix systems
  • Improve POSIX imports
  • Library changes:
  • New function isValidCharacter in std.utf
  • Dub changes:
  • Added support for environment variables to use compilation and run(or test) option to the dub settings file and dub.json/dub.sdl.

New in DMD 2.098.0 Beta 3 (Oct 1, 2021)

  • Compiler changes:
  • Using the syntax (args) => {} now triggers a deprecation message
  • Improvements for the C++ header generation
  • Using a mutable variable as a switch case now triggers an error
  • Class allocators have been removed from the language
  • Runtime changes:
  • TypeInfo names for aggregates are fully qualified and hence unique now
  • A concurrent GC for Posix systems
  • Improve POSIX imports
  • Library changes:
  • New function isValidCharacter in std.utf
  • Dub changes:
  • Added support for environment variables to use compilation and run(or test) option to the dub settings file and dub.json/dub.sdl.

New in DMD 2.098.0 Beta 2 (Sep 8, 2021)

  • Compiler changes:
  • Using the syntax (args) => {} now triggers a deprecation message
  • Improvements for the C++ header generation
  • Using a mutable variable as a switch case now triggers an error
  • Class allocators have been removed from the language
  • Runtime changes:
  • A concurrent GC for Posix systems
  • Improve POSIX imports
  • Library changes:
  • New function isValidCharacter in std.utf
  • Dub changes:
  • Added support for environment variables to use compilation and run(or test) option to the dub settings file and dub.json/dub.sdl.

New in DMD 2.098.0 Beta 1 (Aug 31, 2021)

  • Compiler changes:
  • Using the syntax (args) => {} now triggers a deprecation message
  • Improvements for the C++ header generation
  • Using a mutable variable as a switch case now triggers an error
  • Class allocators have been removed from the language
  • Runtime changes:
  • A concurrent GC for Posix systems
  • Improve POSIX imports
  • Library changes:
  • New function isValidCharacter in std.utf
  • Dub changes:
  • Added support for environment variables to use compilation and run(or test) option to the dub settings file and dub.json/dub.sdl.

New in DMD 2.097.2 (Aug 9, 2021)

  • DMD Compiler regression fixes:
  • [REG2.097] Breaking change in DotTemplateExp type semantics leading to e.g. isInputRange regression
  • Bad diagnostic for static/non-static overload resolution conflict
  • Interface thunk doesn't set EBX to GOT
  • DMD Compiler bug fixes:
  • Delegate assigned to return scope variable needs closure
  • ICE(dcast.d): Floating point exception in castTo::CastTo::visit(Expression*) at dmd/dcast.d:1702
  • Core.stdcpp.utility is missing in dmd binary dist
  • Phobos regression fixes:
  • Nullable creates autogenerated opAssign, triggering invariants
  • Druntime regression fixes:
  • OOB memory access, safety violation
  • [REG 2.097] Compilers do not compile on Musl Libc
  • Druntime bug fixes:
  • On OpenBSD and Android make core.sys.posix.arpa.inet: htonl, htons, ntohl, & ntohs work correctly on big endian architectures
  • OpenBSD core.sys.posix.semaphore: sem_t should be a pointer to an opaque struct
  • Fix non-compiling ELF32_M_INFO & ELF64_M_INFO in core.sys..sys.elf32 & core.sys..sys.elf64 for DragonFlyBSD, FreeBSD, NetBSD, & OpenBSD

New in DMD 2.097.2 Beta (Aug 5, 2021)

  • DMD Compiler regression fixes:
  • Bugzilla 22133: [REG2.097] Breaking change in DotTemplateExp type semantics leading to e.g. isInputRange regression
  • DMD Compiler bug fixes:
  • Bugzilla 21912: delegate assigned to return scope variable needs closure
  • Bugzilla 22144: ICE(dcast.d): Floating point exception in castTo::CastTo::visit(Expression*) at dmd/dcast.d:1702
  • Druntime bug fixes:
  • Bugzilla 22166: On OpenBSD and Android make core.sys.posix.arpa.inet: htonl, htons, ntohl, & ntohs work correctly on big endian architectures
  • Bugzilla 22167: OpenBSD core.sys.posix.semaphore: sem_t should be a pointer to an opaque struct
  • Bugzilla 22168: Fix non-compiling ELF32_M_INFO & ELF64_M_INFO in core.sys..sys.elf32 & core.sys..sys.elf64 for DragonFlyBSD, FreeBSD, NetBSD, & OpenBSD

New in DMD 2.097.1 (Jul 21, 2021)

  • DMD Compiler regression fixes:
  • Bugzilla 22035: [REG 2097][ICE] Segmentation fault parsing invalid case statement
  • Bugzilla 22048: [REG2095] alias a = int p; compiles
  • Bugzilla 22084: [REG 2097] Segmentation fault passing non-pod struct as variadic argument
  • Bugzilla 22121: [REG 2097][ICE] Segmentation fault in in dmddsymbolScopeDsymboladdAccessiblePackage
  • Bugzilla 22122: [REG 2097][ICE] Segmentation fault in in dmdaccesshasPackageAccess
  • DMD Compiler bug fixes:
  • Bugzilla 21951: Segfault on noreturninit
  • Bugzilla 21993: Cannot cast to noreturn
  • Phobos regression fixes:
  • Bugzilla 22056: [Reg 2074] stdtraitsisFloatingPoint, isNumeric, isUnsigned, & isSigned should never be true for SIMD vectors
  • Bugzilla 22057: [Reg 2074] stdtraitsisNumeric & isUnsigned should not be true for enum types with character base types
  • Bugzilla 22058: [Reg 2074] stdtraitsisNumeric & isSigned should not be true for complex or imaginary types
  • Bugzilla 22093: [Reg 2097] stdtypeconsRefCounted!T for struct T without an explicit toString or alias this previously could be converted to string even when uninitialized but now cannot be
  • Bugzilla 22125: stdprocessConfig was changed to a struct but miss operator overloads, leading to user code breakage
  • Druntime bug fixes:
  • Bugzilla 21996: -checkaction=context triggers InvalidMemoryOperationError in finalizer
  • Bugzilla 22024: hashOf does not work on enum types whose base type is a SIMD vector
  • Bugzilla 22076: hashOf(S) can segfault if StoHash is forwarded via 'alias this' to a receiver which may be null
  • Bugzilla 22081: DWARF v5 support is utterly broken - 'illegal instruction' when throwing exceptions

New in DMD 2.097.1 Beta (Jul 14, 2021)

  • DMD Compiler regression fixes:
  • Bugzilla 22035: [REG 2.097][ICE] Segmentation fault parsing invalid case statement
  • Bugzilla 22048: [REG2.095] alias a = int p; compiles
  • Bugzilla 22084: [REG 2.097] Segmentation fault passing non-pod struct as variadic argument
  • DMD Compiler bug fixes:
  • Bugzilla 21951: Segfault on noreturn.init
  • Bugzilla 21993: Cannot cast to noreturn
  • Phobos regression fixes:
  • Bugzilla 22056: [Reg 2.074] std.traits.isFloatingPoint, isNumeric, isUnsigned, & isSigned should never be true for SIMD vectors
  • Bugzilla 22057: [Reg 2.074] std.traits.isNumeric & isUnsigned should not be true for enum types with character base types
  • Bugzilla 22058: [Reg 2.074] std.traits.isNumeric & isSigned should not be true for complex or imaginary types
  • Bugzilla 22093: [Reg 2.097] std.typecons.RefCounted!T for struct T without an explicit toString or alias this previously could be converted to string even when uninitialized but now cannot be
  • Druntime bug fixes:
  • Bugzilla 21996: -checkaction=context triggers InvalidMemoryOperationError in finalizer
  • Bugzilla 22024: hashOf does not work on enum types whose base type is a SIMD vector
  • Bugzilla 22076: hashOf(S) can segfault if S.toHash is forwarded via 'alias this' to a receiver which may be null
  • Bugzilla 22081: DWARF v5 support is utterly broken - 'illegal instruction' when throwing exceptions

New in DMD 2.097.0 (Jun 5, 2021)

  • Compiler changes:
  • Deprecation period for ambiguous ternary expressions has ended
  • Usage of the body keyword has been deprecated
  • Deprecate a case of using fully-qualified names to bypass imports
  • Explicit package visibility attribute is now always applied to new scopes
  • pragma(mangle) can now be applied to aggregates
  • Complex and imaginary types are now deprecated
  • while (auto n = expression) is now supported
  • Library changes:
  • Centering formatted output.
  • AllImplicitConversionTargets replaces ImplicitConversionTargets
  • Formatting integers with %e, %f, %g and %a is now possible.
  • Implementation of pow(f, -2) and f ^^ -2 changed
  • Deprecate std.format : enforceValidFormatSpec
  • Deprecate std.format : formatElement
  • Deprecate std.format : unformatElement
  • FieldnameTuple now returns an empty tuple for interfaces
  • Fields (formerly FieldTypeTuple) now returns an empty tuple for interfaces
  • Floating point numbers can be formatted at compile time
  • Formatting floating point numbers don't allocate with the GC anymore.
  • Some reals will be downcast to double when used with std.format.
  • std.typecons.Nullable: Remove deprecated alias get this.
  • Documentation of std.format has been completely reworked.
  • Module std.format has been split into smaller modules
  • Module std.math has been split into smaller modules
  • splitWhen added to std.algorithm.iteration
  • The old benchmarking functionality in std.datetime has been removed.
  • std.exception.enforceEx has been removed.
  • New module: std.sumtype
  • std.range.Transposed: Remove deprecated member save
  • Dub changes:
  • Added support for low memory compilation option to the dub settings file.

New in DMD 2.097.0 Beta 1 (May 13, 2021)

  • Compiler changes:
  • Deprecation period for ambiguous ternary expressions has ended
  • Usage of the body keyword has been deprecated
  • Deprecate a case of using fully-qualified names to bypass imports
  • Explicit package visibility attribute is now always applied to new scopes
  • pragma(mangle) can now be applied to aggregates
  • Complex and imaginary types are now deprecated
  • while (auto n = expression) is now supported
  • Library changes:
  • Centering formatted output.
  • AllImplicitConversionTargets replaces ImplicitConversionTargets
  • Formatting integers with %e, %f, %g and %a is now possible.
  • Implementation of pow(f, -2) and f ^^ -2 changed
  • Deprecate std.format : enforceValidFormatSpec
  • Deprecate std.format : formatElement
  • Deprecate std.format : unformatElement
  • FieldnameTuple now returns an empty tuple for interfaces
  • Fields (formerly FieldTypeTuple) now returns an empty tuple for interfaces
  • Floating point numbers can be formatted at compile time
  • Floating point numbers don't allocate with the GC anymore.
  • Some reals will be downcast to double when used with std.format.
  • std.typecons.Nullable: Remove deprecated alias get this.
  • Documentation of std.format has been completely reworked.
  • Module std.format has been split into smaller modules
  • Module std.math has been split into smaller modules
  • splitWhen added to std.algorithm.iteration
  • The old benchmarking functionality in std.datetime has been removed.
  • std.exception.enforceEx has been removed.
  • New module: std.sumtype
  • std.range.Transposed: Remove deprecated member save
  • Dub changes:
  • Added support for low memory compilation option to the dub settings file.

New in DMD 2.096.1 (Apr 26, 2021)

  • DMD Compiler regression fixes:
  • Bugzilla 21229: [REG 2.080.2] Constructor flow analysis doesn't understand unions
  • Bugzilla 21687: Confusing error message for CTFE pointer in static initializer
  • Bugzilla 21798: checkaction=context creates temporary of type void
  • Bugzilla 21806: Overload selection ignores slice
  • DMD Compiler bug fixes:
  • Bugzilla 19192: [wrong-code] [crashes] Covariant method interface <- abstract class <- class hierarchies
  • Bugzilla 20705: -preview=rvaluerefparam does not work with template deduction
  • Bugzilla 21799: CTFE doesn't call base class destructor for extern(D) classes
  • DMD Compiler enhancements:
  • Bugzilla 21845: Wrong ParameterStorageClass when -preview=in is used
  • Phobos regression fixes:
  • Bugzilla 20886: std.process.browse does not work with URLs 256 characters or longer
  • Bugzilla 21716: std.regex performance regression (additional GC allocation)
  • Bugzilla 21725: Specifying null as bitfields variable name now fails
  • Phobos bug fixes:
  • Bugzilla 21702: avoid quadratic template expansion in constraints of multiple search term versions of std.algorithm.searching.startsWith & endsWith
  • Bugzilla 21721: casting std.BigInts to built-in floating point types doesn't work without -preview=dip1000
  • Bugzilla 21724: std.algorithm.mutation.copy fails on overlapping arrays if the source array's pointer is less than the destination array's pointer
  • Bugzilla 21758: std.experimental.checkedint opBinaryRight with integer left-hand side does not compile for any operators except + and -
  • Bugzilla 21801: std.typecons.ReplaceType does not work for in parameters
  • Druntime regression fixes:
  • Bugzilla 21709: std.conv.emplace not usable in betterC - 2.096
  • Bugzilla 21712: [REG 2.096.0] sometimes coverage *.lst files are corrupted
  • Druntime bug fixes:
  • Bugzilla 21371: core.stdcpp.allocator: _Adjust_manually_vector_aligned checks for sentinel unconditionally (Windows only)
  • Bugzilla 21701: casWeak is not implemented
  • Druntime enhancements:
  • Bugzilla 21784: joining a detached thread results in segfault.

New in DMD 2.096.1 Beta 1 (Apr 14, 2021)

  • DMD Compiler regression fixes:
  • Bugzilla 21229: [REG 2.080.2] Constructor flow analysis doesn't understand unions
  • Bugzilla 21687: Confusing error message for CTFE pointer in static initializer
  • Bugzilla 21798: checkaction=context creates temporary of type void
  • Bugzilla 21806: Overload selection ignores slice
  • DMD Compiler bug fixes:
  • Bugzilla 19192: [wrong-code] [crashes] Covariant method interface <- abstract class <- class hierarchies
  • Bugzilla 20705: -preview=rvaluerefparam does not work with template deduction
  • Bugzilla 21799: CTFE doesn't call base class destructor for extern(D) classes
  • Phobos regression fixes:
  • Bugzilla 21716: std.regex performance regression (additional GC allocation)
  • Bugzilla 21725: Specifying null as bitfields variable name now fails
  • Phobos bug fixes:
  • Bugzilla 21702: avoid quadratic template expansion in constraints of multiple search term versions of std.algorithm.searching.startsWith & endsWith
  • Bugzilla 21721: casting std.BigInts to built-in floating point types doesn't work without -preview=dip1000
  • Bugzilla 21724: std.algorithm.mutation.copy fails on overlapping arrays if the source array's pointer is less than the destination array's pointer
  • Bugzilla 21758: std.experimental.checkedint opBinaryRight with integer left-hand side does not compile for any operators except + and -
  • Druntime regression fixes:
  • Bugzilla 21709: std.conv.emplace not usable in betterC - 2.096
  • Bugzilla 21712: [REG 2.096.0] sometimes coverage *.lst files are corrupted
  • Druntime bug fixes:
  • Bugzilla 21371: core.stdcpp.allocator: _Adjust_manually_vector_aligned checks for sentinel unconditionally (Windows only)
  • Bugzilla 21701: casWeak is not implemented
  • Druntime enhancements:
  • Bugzilla 21784: joining a detached thread results in segfault.

New in DMD 2.096.0 (Mar 11, 2021)

  • Compiler changes:
  • D ABI change on x86_64 Posix targets
  • Added __c_complex_float, __c_complex_double, and __c_complex_real types
  • Having both a copy constructor and a generated postblit is now deprecated
  • DMD's JSON output will now always include the protection level
  • DMD's JSON output now have distinct types for [shared] module constructor/destructor
  • Deprecate local templates that receive local symbols by alias
  • Improvements for the C++ header generation
  • Add -gdwarf=<version> switch for the DMD compiler.
  • Introduced __traits(getVisibility, Sym) as an alias to getProtection
  • Plain synchronized statements now use run-time allocated mutexes.
  • Allow shortened function implementations for single-expresssion functions.
  • Runtime changes:
  • The druntime option callStructDtorsDuringGC has been removed
  • FreeBSD declarations from statvfs that belong in mount have been removed
  • Experimental llvm-libunwind based backtrace printing was added
  • Library changes:
  • Deprecate std.math : approxEqual
  • Dub changes:
  • More 'linker dflags' with DMD
  • copyFiles can now be used in VisualD projects.

New in DMD 2.096.0 Beta 1 (Mar 2, 2021)

  • Compiler changes:
  • D ABI change on x86_64 Posix targets
  • Added __c_complex_float, __c_complex_double, and __c_complex_real types
  • Having both a copy constructor and a generated postblit is now deprecated
  • DMD's JSON output will now always include the protection level
  • DMD's JSON output now have distinct types for [shared] module constructor/destructor
  • Deprecate local templates that receive local symbols by alias
  • Improvements for the C++ header generation
  • Add -gdwarf=<version> switch for the DMD compiler.
  • Introduced __traits(getVisibility, Sym) as an alias to getProtection
  • Plain synchronized statements now use run-time allocated mutexes.
  • Runtime changes:
  • The druntime option callStructDtorsDuringGC has been removed
  • FreeBSD declarations from statvfs that belong in mount have been removed
  • Experimental llvm-libunwind based backtrace printing was added
  • Library changes:
  • Deprecate std.math approxEqual
  • Dub changes:
  • More 'linker dflags' with DMD
  • copyFiles can now be used in VisualD projects.

New in DMD 2.095.1 (Feb 22, 2021)

  • List of all bug fixes and enhancements in D 2.095.1:
  • DMD Compiler regressions:
  • Bugzilla 21177: printf check does not recognize GNU extensions
  • Bugzilla 21505: Function alias reported as conflicting function
  • Bugzilla 21513: [Reg 2.094.1] Slice assignment segmentation fault
  • Bugzilla 21590: assignment inside assert accepted if -checkaction=context is given
  • DMD Compiler bugs:
  • Bugzilla 21569: Unable to rebuild DMD build using win32.mak - v2.095.0
  • Bugzilla 21586: Struct dtor is called twice if struct is created inside ternary operator
  • Bugzilla 21591: Mangling problem wrt. backrefs and function types
  • Bugzilla 21614: compiled imports: core.exception.AssertError@src/dmd/semantic3.d(812): Assertion failure
  • DMD Compiler enhancements:
  • Bugzilla 21567: build.d install fails, can't find dmd.conf
  • Phobos enhancements:
  • Bugzilla 20552: Deprecated Nullable.get warning with Appenders
  • Druntime bugs:
  • Bugzilla 21578: core.atomic.atomicFetchSub for pointers incorrectly calls wrong function from core.internal.atomic

New in DMD 2.095.1 Beta 1 (Feb 13, 2021)

  • DMD Compiler regressions:
  • Bugzilla 21177: printf check does not recognize GNU etensions
  • Bugzilla 21505: Function alias reported as conflicting function
  • Bugzilla 21513: [Reg 2.094.1] Slice assignment segmentation fault
  • Bugzilla 21590: assignment inside assert accepted if -checkaction=contet is given
  • DMD Compiler bugs:
  • Bugzilla 21569: Unable to rebuild DMD build using win32.mak - v2.095.0
  • Bugzilla 21586: Struct dtor is called twice if struct is created inside ternary operator
  • Bugzilla 21591: Mangling problem wrt. backrefs and function types
  • DMD Compiler enhancements:
  • Bugzilla 21567: build.d install fails, can't find dmd.conf
  • Phobos enhancements:
  • Bugzilla 20552: Deprecated Nullable.get warning with Appenders
  • Druntime bugs:
  • Bugzilla 21578: core.atomic.atomicFetchSub for pointers incorrectly calls wrong function from core.internal.atomic

New in DMD 2.095 (Jan 2, 2021)

  • Compiler changes:
  • Deprecate bypassing of symbol visibility when doing overload resolution
  • Deprecation triggered inside of templates now show instantiation trace
  • Improvements for the C++ header generation
  • Diagnostics for conflicting function definitions within a module
  • extern(Pascal) has been removed
  • The compiler now accepts -extern-std=c++20
  • C++ compability standard now c++11 by default
  • Add -preview=inclusiveincontracts: in contracts must be an explicit superset of the parent in contracts
  • Add support for Objective-C protocols
  • Allow any compile-time argument in pragma(inline)
  • Add __traits(getCppNamespaces, symbol) to retrieve the C++ namespaces a symbol resides in
  • Runtime changes:
  • Variables suspendSignalNumber and resumeSignalNumber are now private
  • Library changes:
  • Return the number of characters consumed by stdconvparse
  • Deprecate stdstdiogetdelim and stdstdiogetline
  • Add integer conversions in JSONValueget
  • Dub changes:
  • All commands now accept a version specification
  • Dub will now automatically exclude mainSourceFile from other configurations
  • Add support for -betterC compiler flag to the visuald project generator
  • Caching of generated unittest runner (dub test)
  • Allow custom build settings to be defined for dependencies
  • DFLAGS and LFLAGS no longer propagate to nested dub invocations
  • Use DC environment variable as default D compiler
  • Fix #2051 "Running unit tests from DUB single file packages fails"
  • Improve ldc cross compilation
  • Filter ability for list command
  • Support for netrc file added

New in DMD 2.095 Beta 1 (Dec 21, 2020)

  • Compiler changes:
  • Template usage diagnostics via -vtemplates has been improved.
  • Deprecate bypassing of symbol visibility when doing overload resolution
  • Deprecation triggered inside of templates now show instantiation trace
  • Improvements for the C++ header generation
  • Diagnostics for conflicting function definitions within a module
  • extern(Pascal) has been removed
  • The compiler now accepts -extern-std=c++20
  • C++ compability standard now c++11 by default
  • Add -preview=inclusiveincontracts: in contracts must be an explicit superset of the parent in contracts.
  • Add support for Objective-C protocols
  • Allow any compile-time argument in pragma(inline)
  • Add __traits(getCppNamespaces, symbol) to retrieve the C++ namespaces a symbol resides in.
  • Runtime changes:
  • Variables suspendSignalNumber and resumeSignalNumber are now private
  • Library changes
  • Return the number of characters consumed by std.conv.parse
  • Deprecate std.stdio.getdelim and std.stdio.getline
  • Add integer conversions in JSONValue.get
  • Dub changes:
  • All commands now accept a version specification
  • Dub will now automatically exclude mainSourceFile from other configurations
  • Add support for -betterC compiler flag to the visuald project generator
  • Caching of generated unittest runner (dub test)
  • Allow custom build settings to be defined for dependencies
  • DFLAGS and LFLAGS no longer propagate to nested dub invocations
  • Use DC environment variable as default D compiler
  • Fix #2051 "Running unit tests from DUB single file packages fails"
  • Improve ldc cross compilation
  • Filter ability for list command
  • Support for .netrc file added

New in DMD 2.094.2 (Nov 22, 2020)

  • 2.094.2 comes with 1 major change and 14 fixed Bugzilla issues. A huge thanks goes to the 10 contributors who made 2.094.2 possible.
  • Runtime changes:
  • Support time64 changes for CRuntime_Musl
  • Up to v1.1.24, Musl used a 32 bits time_t on 32 bits architectures. Since v1.2.0, time_t is now always 64 bits. From this release, druntime will also default to a 64 bits time_t on 32 bits architecture, unless the CRuntime_Musl_Pre_Time64w is provided.
  • This change should only affect packagers for Musl-based systems who support 32 bits architectures (64 bits architectures already use 64 bits time_t), who now need to define CRuntime_Musl_Pre_Time64 both when building druntime / Phobos and in the default configuration, if the linked Musl is < 1.2.0.
  • DMD Compiler regressions:
  • Bugzilla 21285: Delegate covariance broken between 2.092 and 2.094 (git master).
  • Bugzilla 21372: False deprecation raised for templated overloaded struct method
  • DMD Compiler bugs:
  • Bugzilla 20324: Calling __traits(getUnitTests) on a template causes compiler segfault
  • Bugzilla 21330: __traits(getUnitTests) should include unittests from anonymous mixins
  • Bugzilla 21353: 'With()' statement ignores symbol visibility in some cases.
  • Bugzilla 21398: Name clash between import and method triggers a segfault
  • Phobos bugs:
  • Bugzilla 21256: Segfault with Appender!string.init.toString()
  • Bugzilla 21337: join can iterates ranges multiple times
  • Bugzilla 21383: std.random.uniform!T(urng) when T is dchar disregards urng and always uses a thread-local random
  • Bugzilla 21384: std.random.uniform!T() and std.random.uniform!T(urng) when T is dchar with any qualifiers can exceed dchar.max
  • Druntime bugs:
  • Bugzilla 21323: (64-bit Windows only) core.stdcpp.vector could not have core.stdcpp.vector as element
  • Bugzilla 21344: core.stdcpp.string.basic_string does not implement opEquals
  • Bugzilla 21346: core.stdcpp.vector.vector does not implement opEquals
  • Bugzilla 21365: TypeInfo.swap must not allow reachable memory to be freed if interrupted by a garbage collection pass

New in DMD 2.094.2 Beta 1 (Nov 13, 2020)

  • DMD Compiler regressions:
  • Bugzilla 21285: Delegate covariance broken between 2.092 and 2.094 (git master).
  • DMD Compiler bugs:
  • Bugzilla 20324: Calling __traits(getUnitTests) on a template causes compiler segfault
  • Bugzilla 21330: __traits(getUnitTests) should include unittests from anonymous mixins
  • Bugzilla 21353: 'With()' statement ignores symbol visibility in some cases.
  • Phobos bugs:
  • Bugzilla 21337: join can iterates ranges multiple times
  • Druntime bugs:
  • Bugzilla 21323: (64-bit Windows only) core.stdcpp.vector could not have core.stdcpp.vector as element
  • Bugzilla 21344: core.stdcpp.string.basic_string does not implement opEquals
  • Bugzilla 21346: core.stdcpp.vector.vector does not implement opEquals
  • Bugzilla 21365: TypeInfo.swap must not allow reachable memory to be freed if interrupted by a garbage collection pass

New in DMD 2.094.1 (Oct 19, 2020)

  • DMD Compiler regressions:
  • Bugzilla 21272: Overzealous and inconsistent foreach shadowing deprecations for nested functions
  • Bugzilla 21282: mixin of AliasSeq "cannot alias an expression"
  • DMD Compiler bugs:
  • Bugzilla 15909: Duplicate case error reports characters as numbers
  • Bugzilla 21283: [C++] Wrong mangling for ref of parameter pack
  • Bugzilla 21299: [LINK] undefined reference to dmd.root.stringtable.StringValue!(Type).StringValue.lstring()
  • Druntime bugs:
  • Bugzilla 21315: TypeInfo_StaticArray.swap is broken

New in DMD 2.094.1 Beta (Oct 11, 2020)

  • DMD Compiler regressions:
  • Bugzilla 21272: Overzealous and inconsistent foreach shadowing deprecations for nested functions
  • Bugzilla 21282: mixin of AliasSeq "cannot alias an expression"
  • DMD Compiler bugs:
  • Bugzilla 15909: Duplicate case error reports characters as numbers
  • Bugzilla 21283: [C++] Wrong mangling for ref of parameter pack

New in DMD 2.094 (Sep 25, 2020)

  • Compiler changes:
  • Add __traits(child, parent, member)
  • Improve type determination for array literals
  • Template usage diagnostics via -vtemplates has been improved.
  • C++ header generation omits Ignored ... comments by default
  • Exception-throwing code can now be used in debug blocks
  • Always inline pragma(inline, true) functions regardless of -inline compiler switch.
  • The deprecation period for implicit override has ended
  • Strict implicit conversion rules for Vector types
  • Parameters marked as in will now be properly displayed
  • DDoc Markdown support has been enabled by default
  • Added support for input parameters (in parameter, -preview=in)
  • Usage of vector types and operations on an unsupported -mcpu= will now error
  • Runtime changes:
  • Equality of arrays of structs is consistent again, as before v2.078
  • core.memory.GC.allocatedInCurrentThread() was added, which makes -profile=gc faster
  • Installer changes:
  • Installation script now supports get-path <compiler>
  • DMD binary releases are now built with LDC
  • Dub changes:
  • Added architecture x86_omf for windows-dmd
  • dub remove --non-interactive will now remove all packages by default
  • Running dub upgrade on a package-less folder is now a no-op
  • Support dependencies as git url with exact commit
  • All commands now support package[@<version-spec>], --version is deprecated

New in DMD 2.094.0 RC1 (Sep 19, 2020)

  • Compiler changes:
  • Add __traits(child, parent, member)
  • The allMembers trait behaves more correctly with imports
  • Improve type determination for array literals
  • C++ header generation omits Ignored ... comments by default
  • Exception-throwing code can now be used in debug blocks
  • Always inline pragma(inline, true) functions regardless of -inline compiler switch.
  • The deprecation period for implicit override has ended
  • Strict implicit conversion rules for Vector types
  • Parameters marked as in will now be properly displayed
  • DDoc Markdown support has been enabled by default
  • Added support for input parameters (in parameter, -preview=in)
  • Usage of vector types and operations on an unsupported -mcpu= will now error
  • Runtime changes:
  • Equality of arrays of structs is consistent again, as before v2.078
  • core.memory.GC.allocatedInCurrentThread() was added, which makes -profile=gc faster
  • Installer changes:
  • Installation script now supports get-path <compiler>
  • DMD binary releases are now built with LDC
  • Dub changes:
  • Added architecture x86_omf for windows-dmd
  • dub remove --non-interactive will now remove all packages by default
  • Running dub upgrade on a package-less folder is now a no-op
  • Support dependencies as git url with exact commit
  • All commands now support package[@<version-spec>], --version is deprecated

New in DMD 2.094.0 Beta (Sep 11, 2020)

  • Compiler changes:
  • Add __traits(child, parent, member)
  • The allMembers trait behaves more correctly with imports
  • Improve type determination for array literals
  • C++ header generation omits Ignored ... comments by default
  • Exception-throwing code can now be used in debug blocks
  • Always inline pragma(inline, true) functions regardless of -inline compiler switch.
  • The deprecation period for implicit override has ended
  • Strict implicit conversion rules for Vector types
  • Parameters marked as in will now be properly displayed
  • DDoc Markdown support has been enabled by default
  • Added support for input parameters (in parameter, -preview=in)
  • Usage of vector types and operations on an unsupported -mcpu= will now error
  • Runtime changes:
  • Equality of arrays of structs is consistent again, as before v2.078
  • core.memory.GC.allocatedInCurrentThread() was added, which makes -profile=gc faster
  • Installer changes:
  • Installation script now supports get-path <compiler>
  • DMD binary releases are now built with LDC
  • Dub changes:
  • Added architecture x86_omf for windows-dmd
  • dub remove --non-interactive will now remove all packages by default
  • Running dub upgrade on a package-less folder is now a no-op
  • Support dependencies as git url with exact commit
  • All commands now support package[@<version-spec>], --version is deprecated

New in DMD 2.093.1 (Aug 17, 2020)

  • DMD Compiler regressions:
  • Bugzilla 21063: getLinkage is wrong for forward reference extern(C++) class
  • Bugzilla 21074: const lost in mixin
  • Bugzilla 21095: [ICE] AssertError@dmd/expressionsem.d(5015): Assertion failure
  • DMD Compiler bugs:
  • Bugzilla 16400: naked variadic C function emits broken prologue
  • Bugzilla 17351: Static const array can't be evaluated at compile time when passed as ref argument
  • Bugzilla 21085: [glue] Only 9999 "hidden identifiers" can be generated
  • Bugzilla 21092: [ICE] Segmentation fault in ExpressionPrettyPrintVisitor::visit(CommaExp*) at dmd/hdrgen.d:2293
  • Bugzilla 21096: [ICE] Segmentation fault in dmd.hdrgen.sizeToBuffer at dmd/hdrgen.d:3153
  • Bugzilla 21122: __traits(getAttributes) wrong scope on enums
  • dlang.org bugs:
  • Bugzilla 21059: install.sh: posix_terminal returns false on Linux Mint 20

New in DMD 2.093.1 Beta 1 (Aug 11, 2020)

  • DMD Compiler regressions:
  • Bugzilla 21063: getLinkage is wrong for forward reference extern(C++) class
  • Bugzilla 21074: const lost in mixin
  • Bugzilla 21095: [ICE] AssertError@dmd/expressionsem.d(5015): Assertion failure
  • DMD Compiler bugs:
  • Bugzilla 21085: [glue] Only 9999 "hidden identifiers" can be generated
  • Bugzilla 21096: [ICE] Segmentation fault in dmd.hdrgen.sizeToBuffer at dmd/hdrgen.d:3153
  • Bugzilla 21122: __traits(getAttributes) wrong scope on enums
  • dlang.org bugs:
  • Bugzilla 21059: install.sh: posix_terminal returns false on Linux Mint 20

New in DMD 2.093.0 (Jul 9, 2020)

  • Compiler changes:
  • Add new builtin __traits(isCopyable, T) for some type T
  • Properly check interface implementations
  • Allow initialization of shared variables.
  • Add -vtemplates switch to collect and list template statistics
  • Runtime changes:
  • add exit_group to core.sys.linux.unistd
  • Added module core.sys.darwin.mach.nlist and core.sys.darwin.mach.stab
  • Deprecated object.selector
  • Memory releated GC options can now be specified with higher accuracy
  • Installer changes:
  • The install script now also works on the Windows command prompt.
  • Dub changes:
  • Dub root package target environment variables added
  • Improved CLI extensibility

New in DMD 2.0.93.0 Beta 1 (Jun 24, 2020)

  • Compiler changes:
  • Add new builtin __traits(isCopyable, T) for some type T
  • Properly check interface implementations
  • Allow initialization of shared variables.
  • Add -vtemplates switch to collect and list template statistics
  • Runtime changes:
  • add exit_group to core.sys.linux.unistd
  • Added module core.sys.darwin.mach.nlist and core.sys.darwin.mach.stab
  • Deprecated object.selector
  • Memory releated GC options can now be specified with higher accuracy
  • Installer changes:
  • The install script now also works on the Windows command prompt.
  • Dub changes:
  • Dub root package target environment variables added
  • Improved CLI extensibility

New in DMD 2.092.1 (Jun 12, 2020)

  • DMD Compiler regressions:
  • Bugzilla 20626: ICE when using typeof of unittest symbol without -unittest flag
  • Bugzilla 20830: Segfault for multiple duplicate interfaces
  • Bugzilla 20885: pointer rejected for the variable declared in a if condition
  • Bugzilla 20890: parameter corruption when other parameter is a static array of length 1
  • Bugzilla 20893: [REG 2.087] 32-bit arithmetic goes wrong
  • DMD Compiler bugs:
  • Bugzilla 12520: Comparing two TypeTuples with == does not compile for no arguments
  • Bugzilla 19344: Enum member UDAs & getUDAs throwing an error
  • Bugzilla 19728: AliasSeq in UDA errors
  • Bugzilla 20093: __traits(getAttributes) Error: cannot form tuple of tuples
  • Bugzilla 20710: ICE when statically accessing struct member containing empty array
  • Bugzilla 20758: __traits(getAttributes) as template argument results in broken template instances
  • Bugzilla 20835: Enum member attributes being evaluated in wrong scope.
  • Bugzilla 20875: [REG2.087.1] Enum template specialization ignored
  • Bugzilla 20884: Using getMember with a type as first argument can lose type qualifiers.
  • Bugzilla 20894: ICE: passing a member template mixin identifier as alias argument
  • Bugzilla 20919: DMD crash when '__traits' prints error involving a Parameter
  • DMD Compiler enhancements:
  • Bugzilla 20744: Using __parameters result in function definition causes wrong lookup
  • Phobos bugs:
  • Bugzilla 20785: std.file.setTimes: on macOS use setattrlist to avoid truncating timestamp precision to microseconds
  • Druntime bugs:
  • Bugzilla 20832: Fix ioctl request for TCSETS2

New in DMD 2.092.1 Beta 1 (Jun 5, 2020)

  • DMD Compiler regressions:
  • Bugzilla 20626: ICE when using typeof of unittest symbol without -unittest flag
  • Bugzilla 20830: Segfault for multiple duplicate interfaces
  • Bugzilla 20885: pointer rejected for the variable declared in a if condition
  • Bugzilla 20890: parameter corruption when other parameter is a static array of length 1
  • DMD Compiler bugs:
  • Bugzilla 12520: Comparing two TypeTuples with == does not compile for no arguments
  • Bugzilla 19344: Enum member UDAs & getUDAs throwing an error
  • Bugzilla 19728: AliasSeq in UDA errors
  • Bugzilla 20093: Error: cannot form tuple of tuples
  • Bugzilla 20758: __traits(getAttributes) as template argument results in broken template instances
  • Bugzilla 20835: Enum member attributes being evaluated in wrong scope.
  • Bugzilla 20875: [REG2.087.1] Enum template specialization ignored
  • Bugzilla 20884: Using getMember with a type as first argument can lose type qualifiers.
  • Bugzilla 20894: ICE: passing a member template mixin identifier as alias argument
  • DMD Compiler enhancements:
  • Bugzilla 20744: Using __parameters result in function definition causes wrong lookup
  • Phobos bugs:
  • Bugzilla 20785: std.file.setTimes: on macOS use setattrlist to avoid truncating timestamp precision to microseconds
  • Druntime bugs:
  • Bugzilla 20832: Fix ioctl request for TCSETS2

New in DMD 2.092.0 (May 12, 2020)

  • Compiler changes:
  • CLI switches -revert=import and -transition=checkimports have been removed
  • Added support for mangling C++'s GNU ABI tags
  • Module constructors and destructors which are not extern(D) are deprecated
  • DIP25 violations will now issue deprecations by default
  • Prototype Ownership/Borrowing System for Pointers
  • Added -preview=in to make the in storage class mean scope const.
  • Validate printf and scanf (variants too) arguments against format specifiers
  • Environment variable SOURCE_DATE_EPOCH is now supported
  • Runtime changes:
  • Added TypeInfo_Class/TypeInfo_Interface.isBaseOf that works like C#/Java isAssignableFrom.
  • Add core.memory.pageSize and minimumPageSize.
  • Library changes:
  • Add Date.isoWeekYear and Date.fromISOWeek in std.datetime.date
  • Deprecated module std.xml
  • The deprecated aliases in std.digest.digest were removed
  • Dub changes:
  • Hidden directories are now ignored.
  • Dub lint now supports --report-file argument.

New in DMD 2.092.0 RC1 (May 9, 2020)

  • Compiler changes:
  • CLI switches -revert=import and -transition=checkimports have been removed
  • Added support for mangling C++'s GNU ABI tags
  • Module constructors and destructors which are not extern(D) are deprecated
  • DIP25 violations will now issue deprecations by default
  • Prototype Ownership/Borrowing System for Pointers
  • Added -preview=in to make the in storage class mean scope const.
  • Validate printf and scanf (variants too) arguments against format specifiers
  • Environment variable SOURCE_DATE_EPOCH is now supported
  • Runtime changes:
  • Added TypeInfo_Class/TypeInfo_Interface.isBaseOf that works like C#/Java isAssignableFrom.
  • Add core.memory.pageSize and minimumPageSize.
  • Library changes:
  • Add Date.isoWeekYear and Date.fromISOWeek in std.datetime.date
  • Deprecated module std.xml
  • The deprecated aliases in std.digest.digest were removed
  • Dub changes:
  • Hidden directories are now ignored.
  • Dub lint now supports --report-file argument.

New in DMD 2.092.0 Beta1 (Apr 30, 2020)

  • Compiler changes:
  • CLI switches -revert=import and -transition=checkimports have been removed
  • Added support for mangling C++'s GNU ABI tags
  • Module constructors and destructors which are not extern(D) are deprecated
  • DIP25 violations will now issue deprecations by default
  • Prototype Ownership/Borrowing System for Pointers
  • Added -preview=in to make the in storage class mean scope const
  • Validate printf and scanf (variants too) arguments against format specifiers
  • Environment variable SOURCE_DATE_EPOCH is now supported
  • Runtime changes:
  • Added TypeInfo_Class/TypeInfo_InterfaceisBaseOf that works like C#/Java isAssignableFrom
  • Add corememorypageSize and minimumPageSize
  • Library changes:
  • Add DateisoWeekYear and DatefromISOWeek in stddatetimedate
  • Deprecated module stdxml
  • The deprecated aliases in stddigestdigest were removed
  • Dub changes:
  • Hidden directories are now ignored
  • Dub lint now supports --report-file argument

New in DMD 2.091.1 (Apr 19, 2020)

  • DMD Compiler regressions:
  • Bugzilla 20130: ICE when casting from string to other array type due to __ArrayCast not being written
  • Bugzilla 20730: [REG 2.091] __traits(compiles) fails if any ungagged errors occurred in compilation
  • DMD Compiler bugs:
  • Bugzilla 18651: ice: assert in glue.d:777 when building these three trivial files
  • Bugzilla 20610: const in a .tupleof loop is ignored
  • Bugzilla 20656: cannot compile live function without -preview=dip1021
  • Bugzilla 20692: Nested alias declarations and getMember trait can crash dmd
  • Bugzilla 20700: Forward references leads to extern(C++, class|struct) being ignored
  • Druntime regressions:
  • Bugzilla 20649: Trait isZeroInit gives false in certain scenarios
  • Druntime bugs:
  • Bugzilla 20731: checkaction=context fails for structs with 'alias this'

New in DMD 2.091.1 Beta1 (Apr 13, 2020)

  • DMD Compiler regressions:
  • Bugzilla 20130: ICE when casting from string to other array type due to __ArrayCast not being written
  • DMD Compiler bugs:
  • Bugzilla 18651: ice: assert in glue.d:777 when building these three trivial files
  • Bugzilla 20610: const in a .tupleof loop is ignored
  • Bugzilla 20656: cannot compile live function without -preview=dip1021
  • Bugzilla 20692: Nested alias declarations and getMember trait can crash dmd
  • Bugzilla 20700: Forward references leads to extern(C++, class|struct) being ignored
  • Druntime regressions:
  • Bugzilla 20649: Trait isZeroInit gives false in certain scenarios

New in DMD 2.091.0 (Mar 10, 2020)

  • Compiler changes:
  • Class deallocator have been removed from the language
  • Can now report line numbers in GNU error style
  • Added experimental C++ header generation from extern(C|C++) declarations
  • Runtime changes:
  • Added missing pthread_attr_destroy in some place.
  • Expanded bindings in core.sys.windows.security
  • Added core.stdcpp.memory.unique_ptr
  • Added TFD_TIMER_CANCEL_ON_SET.
  • Library changes:
  • std.bigint is now @safe
  • Replaced approxEqual by isClose in std.math.
  • Removed deprecated std.format.Mangle.
  • Removed deprecated structs ByLine, ByChunk, ByRecord from std.stdio.
  • Removed deprecated functions from std.string
  • std.algorithm.sorting.schwartzSort supports binary transform functions too
  • Added curry to std.functional
  • Installer changes:
  • The install script now runs on Windows
  • The Windows installation has received a couple of updates
  • Dub changes:
  • Environment variable SOURCE_FILES added
  • DUB now has zsh completion

New in DMD 2.091.0 Beta 1 (Feb 26, 2020)

  • Compiler changes:
  • D1-style operator now have a lower priority than D2-style
  • Class deallocator have been removed from the language
  • Can now report line numbers in GNU error style
  • Added experimental C++ header generation from extern(C|C++) declarations
  • Runtime changes:
  • Added missing pthread_attr_destroy in some place.
  • Expanded bindings in core.sys.windows.security
  • Added core.stdcpp.memory.unique_ptr
  • Added TFD_TIMER_CANCEL_ON_SET.
  • Library changes:
  • std.bigint is now @safe
  • Replaced approxEqual by isClose in std.math.
  • Removed deprecated std.format.Mangle.
  • Removed deprecated structs ByLine, ByChunk, ByRecord from std.stdio.
  • Removed deprecated functions from std.string
  • std.algorithm.sorting.schwartzSort supports binary transform functions too
  • Added curry to std.functional
  • Installer changes:
  • The install script now runs on Windows
  • The Windows installation has received a couple of updates
  • Dub changes
  • Environment variable SOURCE_FILES added
  • DUB now has zsh completion

New in DMD 2.090.1 (Feb 10, 2020)

  • Compiler changes:
  • D1-style operator now have a lower priority than D2-style
  • DMD Compiler regressions:
  • Bugzilla 20391: [REG 2.089] DMD compile times increased by 40% because ENABLE_RELEASE=0 in build
  • Bugzilla 20488: AA.length in multiple modules causes opDispatch failure
  • Bugzilla 20518: simple import ICE regression
  • DMD Compiler bugs:
  • Bugzilla 19542: Forward reference segfault with string namespace C++ syntax
  • Bugzilla 20530: is(<...> == module/package) does not work with string mixins
  • Bugzilla 20549: Initialization with a tuple of a module symbol referencing itself could crash dmd
  • Bugzilla 20559: Reference type + alias this + AA + AA.clear causes SEGV
  • Phobos regressions:
  • Bugzilla 19738: std.range.choose assignment breaks @safe-ty
  • Bugzilla 20511: Can't format JSONValue to OutputRange due to @safe
  • Phobos bugs:
  • Bugzilla 17441: std.traits.moduleName gives wrong answer for modules imported under a different name in a mixin
  • Bugzilla 20495: std.range.choose range is not safe when calling save
  • Bugzilla 20527: std.json CTFE cannot read integer
  • Druntime regressions:
  • Bugzilla 19902: hasElaborateCopyConstructor doesn't know about copy constructors
  • Bugzilla 20447: [REG 2.089] importing core.thread exposes unistd, hiding object.dup
  • Druntime bugs:
  • Bugzilla 20497: thread with limited stackspace crashes depending on size of TLS
  • dlang.org bugs:
  • Bugzilla 20500: running examples on the home page only displays '1 unittests passed'

New in DMD 2.090.1 Beta 1 (Feb 2, 2020)

  • DMD Compiler regressions:
  • Bugzilla 20391: [REG 2.089] DMD compile times increased by 40% because ENABLE_RELEASE=0 in build
  • Bugzilla 20488: AA.length in multiple modules causes opDispatch failure
  • Bugzilla 20518: simple import ICE regression
  • DMD Compiler bugs:
  • Bugzilla 19542: Forward reference segfault with string namespace C++ syntax
  • Bugzilla 20530: is(<...> == module/package) does not work with string mixins
  • Bugzilla 20549: Initialization with a tuple of a module symbol referencing itself could crash dmd
  • Phobos regressions:
  • Bugzilla 19738: std.range.choose assignment breaks @safe-ty
  • Bugzilla 20511: Can't format JSONValue to OutputRange due to @safe
  • Phobos bugs:
  • Bugzilla 17441: std.traits.moduleName gives wrong answer for modules imported under a different name in a mixin
  • Bugzilla 20495: std.range.choose range is not safe when calling save
  • Bugzilla 20527: std.json CTFE cannot read integer
  • Druntime regressions:
  • Bugzilla 19902: hasElaborateCopyConstructor doesn't know about copy constructors
  • Bugzilla 20447: [REG 2.089] importing core.thread exposes unistd, hiding object.dup
  • Druntime bugs:
  • Bugzilla 20497: thread with limited stackspace crashes depending on size of TLS
  • dlang.org bugs:
  • Bugzilla 20500: running examples on the home page only displays '1 unittests passed'

New in DMD 2.090.0 (Jan 6, 2020)

  • Compiler changes:
  • Can now extract delegate from lazy parameter
  • Runtime changes:
  • core.memory.GC.inFinalizer was added
  • Platform dependent execinfo introspection added
  • Added intrinsic toPrec to round to a specific float precision
  • Unittest default mode
  • Library changes:
  • Deprecated std.array.Appender.toString was removed
  • Deprecated std.functional.binaryReverseArgs was removed
  • Deprecated std.bitmanip.BitArray.toString was removed
  • Deprecated module std.experimental.all was removed
  • Added get!(T) getter to std.json

New in DMD 2.090.0 RC 1 (Dec 31, 2019)

  • Compiler changes:
  • Can now extract delegate from lazy parameter
  • Runtime changes:
  • core.memory.GC.inFinalizer was added
  • Platform dependent execinfo introspection added
  • Added intrinsic toPrec to round to a specific float precision
  • Unittest default mode
  • Library changes:
  • Deprecated std.array.Appender.toString was removed
  • Deprecated std.functional.binaryReverseArgs was removed
  • Deprecated std.bitmanip.BitArray.toString was removed
  • Deprecated module std.experimental.all was removed
  • Added get!(T) getter to std.json

New in DMD 2.090.0 Beta 1 (Dec 23, 2019)

  • Compiler changes:
  • Can now extract delegate from lazy parameter
  • Runtime changes:
  • core.GC.inFinalizer was added
  • Platform dependent execinfo introspection added
  • Added intrinsic toPrec to round to a specific float precision
  • Unittest default mode
  • Library changes:
  • Deprecated std.array.Appender.toString was removed
  • Deprecated std.functional.binaryReverseArgs was removed
  • Deprecated std.bitmanip.BitArray.toString was removed
  • Deprecated module std.experimental.all was removed
  • Added get!(T) getter to std.json

New in DMD 2.089.1 (Dec 16, 2019)

  • DMD Compiler regressions:
  • Bugzilla 15069: [REG2.064] nonsense struct template instantiations still compile
  • Bugzilla 19884: [regression] Error: alias op = op; cannot alias itself, use a qualified name to create an overload set
  • Bugzilla 20348: [Reg 2.089.0-rc.1] Bad debug info for enum forward references
  • Bugzilla 20349: [REG2.087] ICE with sqrt
  • Bugzilla 20376: @disable this(ref return scope Foo rhs) enables broken binaries (out-of-bounds access)
  • Bugzilla 20388: Parse error when compiling lambdas in mixins as template parameters
  • Bugzilla 20416: [Regression 2.073.2] compiler complains about escaping reference in certain cases
  • Bugzilla 20420: [REG2.067] inlining error with a valid function
  • DMD Compiler bugs:
  • Bugzilla 20092: void[1] auto slicing makes the compiler hang
  • Bugzilla 20253: bad debug line info for function without epilog
  • Bugzilla 20264: ICE on illegal cast to vector.
  • Bugzilla 20280: Compiler segfault when building two small files
  • Bugzilla 20366: CTFE foreach_reverse on array with utf characters crashes compiler
  • Bugzilla 20431: Allow a Mixin Type to resolve to an expression where it makes sense
  • Bugzilla 20441: Wrong code with -O -fPIC and pointer subtraction
  • DMD Compiler enhancements:
  • Bugzilla 20356: exceeding template expansion limits
  • Phobos regressions:
  • Bugzilla 20054: getSymbolsByUDA no longer works on modules
  • Bugzilla 20350: JSONType deprecations should be undeprecated
  • Bugzilla 20354: interface is not supported by CanCAS in core.internal.atomic
  • Druntime regressions:
  • Bugzilla 20438: [Reg 2.086] GC: memory not reusable when calling GC.collect after GC.free
  • Druntime bugs:
  • Bugzilla 20355: undefined identifier U in core.atomic
  • Tools bugs:
  • Bugzilla 20386: Test extractor shouldn't emit unit tests, but regular functions for @betterC tests

New in DMD 2.089.0 (Nov 3, 2019)

  • Compiler changes:
  • Deprecate allowing shadowing in foreach loops
  • IsExpressions now correctly match combinations of const, inout, and shared.
  • extern(C) declarations in template mixins now mangle as C symbols when mixed in at global scope
  • The default linker for the Digital Mars tool chain is now optlink.exe
  • New -Xcc compiler flag to address issue 6952
  • Runtime changes:
  • Added core.atomic.atomicFetchAdd and core.atomic.atomicFetchSub.
  • Make wstatus predicates pure and @safe
  • Library changes:
  • Added std.traits.Unconst
  • Dub changes:
  • Improved support for LDC, incl. cross-compilation
  • Lint command added
  • Added SemVer compatibility operator "^"

New in DMD 2.089.0 Beta 2 (Oct 24, 2019)

  • Compiler changes:
  • Deprecate allowing shadowing in foreach loops
  • IsExpressions now correctly match combinations of const, inout, and shared.
  • extern(C) declarations in template mixins now mangle as C symbols when mixed in at global scope
  • The default linker for the Digital Mars tool chain is now optlink.exe
  • New -Xcc compiler flag to address issue 6952
  • Runtime changes:
  • Added core.atomic.atomicFetchAdd and core.atomic.atomicFetchSub.
  • Make wstatus predicates pure and @safe
  • Library changes:
  • Added std.traits.Unconst
  • Dub changes:
  • Improved support for LDC, incl. cross-compilation
  • Lint command added
  • Added SemVer compatibility operator "^"

New in DMD 2.089.0 Beta 1 (Oct 17, 2019)

  • Compiler changes:
  • Deprecate allowing shadowing in foreach loops
  • IsExpressions now correctly match combinations of const, inout, and shared.
  • extern(C) declarations in template mixins now mangle as C symbols when mixed in at global scope
  • New -Xcc compiler flag to address issue 6952
  • Runtime changes:
  • Added core.atomic.atomicFetchAdd and core.atomic.atomicFetchSub.
  • Make wstatus predicates pure and @safe
  • Library changes:
  • Added std.traits.Unconst
  • Dub changes:
  • Improved support for LDC, incl. cross-compilation
  • Lint command added
  • Added SemVer compatibility operator "^"

New in DMD 2.088.1 (Oct 13, 2019)

  • DMD Compiler bugs:
  • Bugzilla 20223: C++, POSIX: Wrong mangling for const reference of callback
  • Bugzilla 20224: Segfault when using ref parameter on a templated struct (C++ mangling)
  • Druntime regressions:
  • Bugzilla 20219: Idle D programs keep consuming CPU in Gcx.scanBackground
  • Bugzilla 20227: "Aborting from src/core/sync/event.d(141) Error: pthread_mutex_destroy failed." after fork()
  • Bugzilla 20256: problem with signal handling and parallel GC on linux
  • Druntime bugs:
  • Bugzilla 20271: Handle forking in the GC

New in DMD 2.088.1 Beta (Oct 4, 2019)

  • DMD Compiler bugs:
  • Bugzilla 20223: C++, POSIX: Wrong mangling for const reference of callback
  • Bugzilla 20224: Segfault when using ref parameter on a templated struct (C++ mangling)
  • Druntime regressions:
  • Bugzilla 20219: Idle D programs keep consuming CPU in Gcx.scanBackground
  • Bugzilla 20227: "Aborting from src/core/sync/event.d(141) Error: pthread_mutex_destroy failed." after fork()

New in DMD 2.088.0 (Sep 3, 2019)

  • Compiler changes:
  • D1 operator overloads have been deprecated.
  • Deprecate allowing a constructor declaration in a static block
  • deprecated now applies to alias this as well
  • Double initialization of immutable fields inside constructor is now obsolete
  • add __traits(getLocation, symbol)
  • Suppress the "read-modify-write" error if type is a struct or a class
  • Postblit and destructors are no longer called on members of anonymous unions.
  • Runtime changes:
  • core.atomic : msync has been removed
  • Added overloads for core.atomic.cas which don't discard their result.
  • Added core.atomic.atomicExchange.
  • Non-POSIX CLOCK enum members have been removed from core.sys.posix.time
  • The druntime option callStructDtorsDuringGC has been deprecated.
  • core.sys.posix.dlfcn : dladdr, dlvsym, Dl_info have been removed
  • core.exception: Remove onHiddenFuncError / HiddenFuncError
  • core.exception : setAssertHandler has been removed
  • core.thread : Fiber.call(bool) has been removed
  • Module core.sys.linux.sys.netinet.tcp has been removed
  • core.runtime : Runtime.initialize, Runtime.terminate functions taking ExceptionHandler have been removed
  • Added core.stdcpp.string.
  • Added core.stdcpp.vector.
  • Library changes:
  • std.array.Appender and RefAppender: use .opSlice() instead of data()
  • ErrnoException.errno is now nothrow pure @nogc @safe
  • Nullable alias get this has been deprecated
  • Added the std.file.getAvailableDiskSpace functionality.
  • Allow std.json to overlook trailing comma
  • Installer changes:
  • Bundled libcurl is now built with DONT_USE_RECV_BEFORE_SEND_WORKAROUND
  • Dub changes:
  • Support for dub global settings file at the root package level

New in DMD 2.088.0 RC1 (Aug 29, 2019)

  • Compiler changes:
  • D1 operator overloads have been deprecated.
  • Deprecate allowing a constructor declaration in a static block
  • deprecated now applies to alias this as well
  • Double initialization of immutable fields inside constructor is now obsolete
  • add __traits(getLocation, symbol)
  • Suppress the "read-modify-write" error if type is a struct or a class
  • Postblit and destructors are no longer called on members of anonymous unions.
  • Runtime changes:
  • core.atomic : msync has been removed
  • Added overloads for core.atomic.cas which don't discard their result.
  • Added core.atomic.atomicExchange.
  • Non-POSIX CLOCK enum members have been removed from core.sys.posix.time
  • The druntime option callStructDtorsDuringGC has been deprecated.
  • core.sys.posix.dlfcn : dladdr, dlvsym, Dl_info have been removed
  • core.exception: Remove onHiddenFuncError / HiddenFuncError
  • core.exception : setAssertHandler has been removed
  • core.thread : Fiber.call(bool) has been removed
  • Module core.sys.linux.sys.netinet.tcp has been removed
  • core.runtime : Runtime.initialize, Runtime.terminate functions taking ExceptionHandler have been removed
  • Added core.stdcpp.string.
  • Added core.stdcpp.vector.
  • Library changes:
  • std.array.Appender and RefAppender: use .opSlice() instead of data()
  • ErrnoException.errno is now nothrow pure @nogc @safe
  • Nullable alias get this has been deprecated
  • Added the std.file.getAvailableDiskSpace functionality.
  • Allow std.json to overlook trailing comma
  • Installer changes:
  • Bundled libcurl is now built with DONT_USE_RECV_BEFORE_SEND_WORKAROUND
  • Dub changes:
  • Support for dub global settings file at the root package level

New in DMD 2.088.0 Beta 2 (Aug 27, 2019)

  • Compiler changes:
  • D1 operator overloads have been deprecated.
  • Deprecate allowing a constructor declaration in a static block
  • deprecated now applies to alias this as well
  • Double initialization of immutable fields inside constructor is now obsolete
  • add __traits(getLocation, symbol)
  • Suppress the "read-modify-write" error if type is a struct or a class
  • Postblit and destructors are no longer called on members of anonymous unions.
  • Runtime changes:
  • core.atomic : msync has been removed
  • Added overloads for core.atomic.cas which don't discard their result.
  • Added core.atomic.atomicExchange.
  • Non-POSIX CLOCK enum members have been removed from core.sys.posix.time
  • The druntime option callStructDtorsDuringGC has been deprecated.
  • core.sys.posix.dlfcn : dladdr, dlvsym, Dl_info have been removed
  • core.exception: Remove onHiddenFuncError / HiddenFuncError
  • core.exception : setAssertHandler has been removed
  • core.thread : Fiber.call(bool) has been removed
  • Module core.sys.linux.sys.netinet.tcp has been removed
  • core.runtime : Runtime.initialize, Runtime.terminate functions taking ExceptionHandler have been removed
  • Added core.stdcpp.string.
  • Added core.stdcpp.vector.
  • Library changes:
  • std.array.Appender and RefAppender: use .opSlice() instead of data()
  • ErrnoException.errno is now nothrow pure @nogc @safe
  • Nullable alias get this has been deprecated
  • Added the std.file.getAvailableDiskSpace functionality.
  • Allow std.json to overlook trailing comma
  • Installer changes:
  • Bundled libcurl is now built with DONT_USE_RECV_BEFORE_SEND_WORKAROUND
  • Dub changes:
  • Support for dub global settings file at the root package level

New in DMD 2.088.0 Beta 1 (Aug 19, 2019)

  • Compiler changes:
  • D1 operator overloads have been deprecated.
  • Deprecate allowing a constructor declaration in a static block
  • deprecated now applies to alias this as well
  • Double initialization of immutable fields inside constructor is now obsolete
  • add __traits(getLocation, symbol)
  • Suppress the "read-modify-write" error if type is a struct or a class
  • Postblit and destructors are no longer called on members of anonymous unions.
  • Runtime changes:
  • core.atomic : msync has been removed
  • Added overloads for core.atomic.cas which don't discard their result.
  • Added core.atomic.atomicExchange.
  • Non-POSIX CLOCK enum members have been removed from core.sys.posix.time
  • core.sys.posix.dlfcn : dladdr, dlvsym, Dl_info have been removed
  • core.exception: Remove onHiddenFuncError / HiddenFuncError
  • core.exception : setAssertHandler has been removed
  • core.thread : Fiber.call(bool) has been removed
  • Module core.sys.linux.sys.netinet.tcp has been removed
  • core.runtime : Runtime.initialize, Runtime.terminate functions taking ExceptionHandler have been removed
  • Added core.stdcpp.string.
  • Added core.stdcpp.vector.
  • Library changes:
  • std.array.Appender and RefAppender: use .opSlice() instead of data()
  • ErrnoException.errno is now nothrow pure @nogc @safe
  • Nullable alias get this has been deprecated
  • Added the std.file.getAvailableDiskSpace functionality.
  • Allow std.json to overlook trailing comma
  • Dub changes:
  • Support for dub global settings file at the root package level

New in DMD 2.087.1 (Aug 5, 2019)

  • Runtime changes:
  • Add all missing symbols to core.sys.darwin.mach.loader
  • DMD Compiler regressions:
  • Bugzilla 19295: ICE when taking address of member function passed as template parameter
  • Bugzilla 20011: [REG] modification of member of a manifest constant that's also a struct is allowed
  • Bugzilla 20022: POSIX: extern(C++, namespace) does not apply namespace to enum
  • Bugzilla 20056: DMD Segfault in 2.087
  • Bugzilla 20063: compiler segfaults on passing templates expression to lazy val
  • Bugzilla 20067: [REG2.086] foreach no longer works on range with alias front
  • DMD Compiler bugs:
  • Bugzilla 930: Templates inside templates used as mixins
  • Bugzilla 11856: DMD segfault with circular template constraints
  • Bugzilla 17828: [ICE] Internal error: ddmd/backend/cgcs.c 352 - CTFE appending to an array on a struct from a template
  • Bugzilla 17885: Unable to remove a tuple from associative array.
  • Bugzilla 19708: Can't use __traits(getAttributes, ...)[...] as a type
  • Bugzilla 19950: access violation at compile time, possibly via template constraint and alias interaction
  • Bugzilla 20019: Symbol not found: _dyld_enumerate_tlv_storage on macOS 10.15
  • Bugzilla 20025: alias this combined with a copy constructor seems to lead to undefined behaviour.
  • Bugzilla 20035: [ICE] Segmentation fault in ExpressionPrettyPrintVisitor::visit(IntegerExp*) at dmd/hdrgen.d:1775
  • Bugzilla 20039: ICE from double template instantiation with getMember of overload of class and template function
  • Bugzilla 20042: __vector CTFE crashes the compiler
  • Bugzilla 20044: Compiler crash when using an opaque struct as template parameter
  • Bugzilla 20045: bogus error: "integer constant expression expected instead of (uint).sizeof"
  • Bugzilla 20048: [Windows] Program segfaults when running tests
  • Bugzilla 20051: ICE in func literal used in __traits(compiles)
  • Bugzilla 20052: SIMD 32 bytes causes obscure segfault
  • Bugzilla 20072: [2.087.0] Mixin templates: no property somevar for type some.Type, did you mean some.Type.__anonymous.somevar?
  • DMD Compiler enhancements:
  • Bugzilla 20065: Empty AliasSeq can't be used to form compiletime array literal
  • Phobos bugs:
  • Bugzilla 16132: std.variant.VariantN does not work with a class that inherits from a template instantiation
  • Bugzilla 19696: ReplaceType replaces type with the type forwarding using alias this
  • Bugzilla 19697: ReplaceType fails to compile for self-referential inheritance chains
  • Bugzilla 20046: someAllocator.make!T doesn't compile if T is a shared value type
  • Bugzilla 20070: [2.087.0] std.conv.toImpl matches two functions when using static arrays as inout( T )
  • Phobos enhancements:
  • Bugzilla 19838: RefCounted fails to instantiate due to pureness of moveEmplace
  • Bugzilla 20043: Tuple.rename doesn't work with const
  • Druntime bugs:
  • Bugzilla 20026: retrying while pthread_cond_signal/pthread_cond_broadcast return EAGAIN
  • Bugzilla 20049: object.destroy doesn't propagate attributes

New in DMD 2.087.1 Beta 1 (Aug 1, 2019)

  • Runtime changes:
  • Add all missing symbols to core.sys.darwin.mach.loader

New in DMD 2.087.0 (Jul 4, 2019)

  • Compiler changes:
  • A new syntax is available to declare an alias to a function type
  • Add Markdown-inspired features to Ddoc
  • scope as a type constraint on class declarations is deprecated
  • Usage of this and super as types is obsolete
  • Turn deprecation into error for some invalid integer literals
  • fix Issue 16002 - Add is(sym == module) and is(sym == package)
  • Local templates can now receive local symbols
  • Windows: The mingw based runtime and platform import libraries can now be selected explicitly
  • Floating point types now use a quiet nan as the init value
  • Class allocators and deallocators are now obsolete
  • The deprecation phase for access checks is finished
  • Initialization of immutable global data from static this is deprecated
  • Struct constructors with all-default parameter will now error
  • Template alias parameters now match basic types as a conversion
  • 32 Bit Linux now uses XMM registers for float and double rather than the x87
  • Runtime changes:
  • Convert FreeBSD's sys/ttycomh into coresysposixsysttycom
  • GC now marks the heap with multiple threads
  • Add the clone and unshare functions to coresyslinuxsched
  • Library changes:
  • Added a table of control characters in ASCII table
  • Count processors via sched_getaffinity on Linux
  • Add overload stdalgorithmsortingschwartzSort!(alias transform, SwapStrategy ss, R)
  • Phobos is now compiled with -preview=dip1000

New in DMD 2.087.0 Beta 2 (Jun 24, 2019)

  • Compiler changes:
  • A new syntax is available to declare an alias to a function type
  • Add Markdown-inspired features to Ddoc
  • scope as a type constraint on class declarations is deprecated.
  • Usage of this and super as types is obsolete
  • Turn deprecation into error for some invalid integer literals.
  • fix Issue 16002 - Add is(sym == module) and is(sym == package)
  • Local templates can now receive local symbols.
  • Windows: The mingw based runtime and platform import libraries can now be selected explicitly
  • Floating point types now use a quiet nan as the .init value
  • Class allocators and deallocators are now obsolete
  • The deprecation phase for access checks is finished
  • Initialization of immutable global data from static this is deprecated
  • Struct constructors with all-default parameter will now error
  • Template alias parameters now match basic types as a conversion.
  • Bit Linux now uses XMM registers for float and double rather than the x87.
  • Runtime changes:
  • Convert FreeBSD's sys/ttycom.h into core.sys.posix.sys.ttycom
  • GC now marks the heap with multiple threads
  • Add the clone and unshare functions to core.sys.linux.sched
  • Library changes:
  • Added a table of control characters in ASCII table
  • Count processors via sched_getaffinity on Linux
  • Add overload std.algorithm.sorting.schwartzSort!(alias transform, SwapStrategy ss, R)
  • Phobos is now compiled with -preview=dip1000

New in DMD 2.086.1 (Jun 16, 2019)

  • DMD Compiler regressions:
  • Bugzilla 19584: Illegal optimization: Shift-or -> imul
  • Bugzilla 19631: Segfault on simple nested templated struct
  • Bugzilla 19871: Copy constructor rejects valid code if default construction is disabled
  • Bugzilla 19887: Segfault with void tuple default parameter
  • Bugzilla 19901: importing export symbols causes link errors
  • Bugzilla 19936: Deprecated alias get this falsely triggers on appending to array
  • DMD Compiler bugs:
  • Bugzilla 12950: Lexer interprets UFCS on hex integer as hex float literal
  • Bugzilla 13819: ICE: backendcg87.c with -O: "a % 2 != 0" for a double
  • Bugzilla 17258: Pass by name doesn't work reliably and can sometimes lead to memory corruption
  • Bugzilla 17793: [ICE] Internal error: ddmd/backend/cod1.c 3976 using simd.double4
  • Bugzilla 18439: Error: cannot use operator ~= in @nogc delegate 'main.test.__lambda1'
  • Bugzilla 18772: [ICE] Internal error: dmdbackendcgcod.c 607 no optimizations
  • Bugzilla 18784: Segfault due to dmd codegen interfacing with C++
  • Bugzilla 19002: __FUNCTION__ and __PRETTY_FUNCTION__ cannot be used as C string literals
  • Bugzilla 19386: Destructor not called when constructed inside if condition, leading to memory leak
  • Bugzilla 19557: extern(C++, ns) and extern(C++, class) interact weird
  • Bugzilla 19713: dmd crashes generating code for C++ template function
  • Bugzilla 19825: Memory corruption involving lazy variadic, stdio and json
  • Bugzilla 19831: throw/catch in scope(exit) crashes with illegal instruction
  • Bugzilla 19857: Name mangling mismatch when compiling with -dip1000
  • Bugzilla 19881: Escaping reference to local through return scope with -dip1000 and @safe
  • Bugzilla 19888: default parameters in templates with tuple parameters+defaults are thrown away
  • Bugzilla 19895: Floating point exception casting zero length array
  • Bugzilla 19897: dinterpret.d:6439: Internal Compiler Error: null field
  • Bugzilla 19898: ICE: in sizemask at dmd/mtype.d(2563): Assertion failure
  • Bugzilla 19911: ICE: Segmentation fault with struct object and variadic function
  • Bugzilla 19912: [module] No implicit import of object module when an object declaration exists.
  • Bugzilla 19913: ICE: Segmentation fault with mixin and enum
  • Bugzilla 19914: ICE: Segmentation fault with mixin and templated class
  • Bugzilla 19915: ICE: Segmentation fault with alias and templated class
  • Bugzilla 19922: ICE: Segmentation fault with typeid()
  • Bugzilla 19923: ICE: typesem.d(3809): Assertion failure with .classinfo
  • Bugzilla 19941: [ICE] Segmentation fault in ImplicitConvTo::visit(AddrExp*) at dmd/dcast.d(980)
  • Bugzilla 19942: [ICE] Segmentation fault in resolvePropertiesX at dmd/expressionsem.d:1112
  • Bugzilla 19954: ICE: Casting AliasSeq to array and passing to a function
  • Bugzilla 19955: [ICE] Segmentation fault in StatementSemanticVisitor::visit(SwitchStatement*) at dmd/statementsem.d:2558
  • Phobos bugs:
  • Bugzilla 19837: std.random.isUniformRNG(Rng, ElementType) should not require Rng.front to be annotated @property
  • Bugzilla 19850: double nested joiner .back falsely thinks the range is empty
  • Druntime regressions
  • Bugzilla 19701: undefined reference to `_D6object__T6hashOf
  • Druntime bugs
  • Bugzilla 17248: Multiple wrong function definitions in core.sys.windows.winldap (causing runtime issues)
  • Bugzilla 19847: no GC memory above 4GB reported with --DRT-gcopt=profile:1

New in DMD 2.086.1 Beta 1 (Jun 14, 2019)

  • Compiler changes:
  • Interface contracts retrieve arguments correctly

New in DMD 2.086.0 (May 5, 2019)

  • Compiler changes:
  • Turn deprecation into error for privately imported symbols inside aggregate declarations
  • Generated opEquals takes precedence over aliased this member opEquals
  • Copy Constructor
  • HexString literals are now obsolete
  • Turn deprecation into error for selectively imported symbols in imported modules.
  • Function literals can now return by reference
  • New command-line option -lowmem to reduce compiler memory requirements
  • Enable private member access for traits
  • Runtime changes:
  • New module core.sync.event
  • Library changes:
  • Fixed comparison bug in std.algorithm.comparison.levenshteinDistance
  • std.experimental.all has been moved to std
  • Installer changes:
  • The bundled LLD Linker has been upgraded to 8.0.0
  • Dub changes:
  • Support of custom dub init type
  • DUB will no longer use OPTLINK as default on Windows
  • dub run will now automatically fetch a package if it's not found locally
  • Remove dub list-installed command
  • DUB uses single API requests to upgrade/resolve dependencies.

New in DMD 2.086.0 RC 2 (May 2, 2019)

  • Compiler changes:
  • Turn deprecation into error for privately imported symbols inside aggregate declarations
  • Generated opEquals takes precedence over aliased this member opEquals
  • Copy Constructor
  • HexString literals are now obsolete
  • Turn deprecation into error for selectively imported symbols in imported modules.
  • Function literals can now return by reference
  • New command-line option -lowmem to reduce compiler memory requirements
  • Enable private member access for traits
  • Runtime changes:
  • New module core.sync.event
  • Library changes:
  • Fixed comparison bug in std.algorithm.comparison.levenshteinDistance
  • std.experimental.all has been moved to std
  • Installer changes:
  • The bundled LLD Linker has been upgraded to 8.0.0
  • Dub changes:
  • Support of custom dub init type
  • DUB will no longer use OPTLINK as default on Windows
  • dub run will now automatically fetch a package if it's not found locally
  • Remove dub list-installed command
  • DUB uses single API requests to upgrade/resolve dependencies.

New in DMD 2.086.0 RC 1 (Apr 30, 2019)

  • Compiler changes:
  • Turn deprecation into error for privately imported symbols inside aggregate declarations
  • Generated opEquals takes precedence over aliased this member opEquals
  • Copy Constructor
  • HexString literals are now obsolete
  • Turn deprecation into error for selectively imported symbols in imported modules.
  • Function literals can now return by reference
  • New command-line option -lowmem to reduce compiler memory requirements
  • Enable private member access for traits
  • Runtime changes:
  • New module core.sync.event
  • Library changes:
  • Fixed comparison bug in std.algorithm.comparison.levenshteinDistance
  • std.experimental.all has been moved to std
  • Installer changes:
  • The bundled LLD Linker has been upgraded to 8.0.0
  • Dub changes:
  • Support of custom dub init type
  • DUB will no longer use OPTLINK as default on Windows
  • dub run will now automatically fetch a package if it's not found locally
  • Remove dub list-installed command
  • DUB uses single API requests to upgrade/resolve dependencies.

New in DMD 2.086.0 Beta 1 (Apr 22, 2019)

  • Compiler changes:
  • Turn deprecation into error for privately imported symbols inside aggregate declarations
  • Generated opEquals takes precedence over aliased this member opEquals
  • Copy Constructor
  • HexString literals are now obsolete
  • Turn deprecation into error for selectively imported symbols in imported modules.
  • Function literals can now return by reference
  • New command-line option -lowmem to reduce compiler memory requirements
  • Enable private member access for traits
  • Runtime changes:
  • New module core.sync.event
  • Library changes:
  • Fixed comparison bug in std.algorithm.comparison.levenshteinDistance
  • std.experimental.all has been moved to std
  • Installer changes:
  • The bundled LLD Linker has been upgraded to 8.0.0
  • Dub changes:
  • Support of custom dub init type
  • DUB will no longer use OPTLINK as default on Windows
  • dub run will now automatically fetch a package if it's not found locally
  • Remove dub list-installed command
  • DUB uses single API requests to upgrade/resolve dependencies.

New in DMD 2.085.1 (Apr 6, 2019)

  • DMD Compiler regressions:
  • Bugzilla 19655: DMD generates wrong code for some circular dependencies
  • Bugzilla 19656: D compiler fails to resolve circular module dependency when modules are compiled separately
  • Bugzilla 19657: D compiler fails to resolve circular module dependency when modules are compiled together
  • Bugzilla 19691: ICE on null default value for struct parameter in constructor
  • Bugzilla 19718: DMD 2.085 changes to gsroa make DCD crashing
  • Bugzilla 19724: Regression: wrong order of linker arguments, again: -L-l before -L--start-group
  • Bugzilla 19730: if (auto x) {} isn't properly rejected
  • Bugzilla 19746: DMD fails to compile some circular dependencies spiced with is (T == super) condition
  • Bugzilla 19750: [Reg v2.070.2] DMD fails with some circular module refs with Template/Mixin instances
  • DMD Compiler bugs:
  • Bugzilla 13285: wrong codegen for destructor call of unnamed struct instance on 64 bit environments
  • Bugzilla 15875: case of undetected circular reference in function parameter
  • Bugzilla 17259: ICE with multiple mixin templates containing conflicting ctor declarations
  • Bugzilla 17285: Segfault when types are used in array literals
  • Bugzilla 17290: DMD crash due to circular reference in function return type
  • Bugzilla 19635: -checkaction=context not working with attributes
  • Bugzilla 19700: [2.085.0-beta.2] Obj-C wrong code overloading selectors and extern(D)
  • Bugzilla 19717: case of segfault due to undetected forward reference
  • Bugzilla 19755: Compiler crash
  • Bugzilla 19757: crash on invalid initializer at CTFE
  • Bugzilla 19762: ICE on invalid code
  • Phobos regressions:
  • Bugzilla 18818: VariantN has unittests that are compiled into user modules
  • Phobos bugs:
  • Bugzilla 19765: std.algorithm.searching.findAmong doesn't save like it should
  • Druntime bugs:
  • Bugzilla 19723: wrong time values in GC.profileStats

New in DMD 2.085.0 Beta 2 (Feb 25, 2019)

  • Compiler changes:
  • Add support for Objective-C classes
  • Add support for Objective-C instance variable
  • Add support for Objective-C super calls
  • Deprecate Objective-C interfaces
  • Context-aware assertion error messages
  • Avoid calling the struct constructor from const-casts
  • dmd now supports expressive diagnostic error messages with -verrors=context
  • memcmp() compares are no longer performed for struct equality tests, memberwise comparisons are done instead, per the spec
  • OSX 32-bit is no longer supported
  • preview and -revert command line switches have been introduced
  • Transition to C++11 character types
  • Runtime changes:
  • Added GC.profileStats() to core.memory
  • Added core.stdcpp.new_
  • Added core.sys.linux.sched.CPU_COUNT.
  • Added core.sys.linux.sched.CPU_ISSET.
  • Moved std.conv.emplace, std.algorithm.mutation.move, std.algorithm.mutation.moveEmplace, and std.functional.forward to core/lifetime.d
  • GC cleanup can now be configured as a DRT GC option
  • A garbage collector with precise heap scanning can now be selected
  • GC.realloc is now more consistent and robust
  • User supplied garbage collectors can now be linked with the runtime
  • Added core.stdcpp.allocator
  • char/wchar fields in most D runtime (core.* and rt.*) structs are now zero-initialized
  • Dub changes:
  • dub fetch now supports <package>@<version> as a shortcut
  • extraDependencyFiles attribute added
  • File system supplier enabled
  • toolchainRequirements recipe entry

New in DMD 2.084.1 Beta 1 (Feb 5, 2019)

  • DMD Compiler bugs:
  • Bugzilla 19549: -check=in=off doesn't work
  • Bugzilla 19551: corrupt ELF library when using pragma(crt_constructor)
  • DMD Compiler enhancements:
  • Bugzilla 19543: Shared object "libstdc++.so.6" not found, required by "dmd"

New in DMD 2.084.0 (Jan 2, 2019)

  • Compiler changes
  • Aliases can be created directly from a __trait.
  • Added -check switch to turn on and off each category of runtime checks.
  • Add -checkaction=D|C|halt compiler switch.
  • -color and -color=on will now always output colorized console output
  • The code generated by mixin statements can now be saved with -mixin
  • Deprecate invalid binary literals
  • Deprecated extern(Pascal) linkage
  • The deprecation phase for fully qualified names that bypassed private imports is finished
  • Templates are now mangled correctly on POSIX
  • Added __c_wchar_t as a correct mangling type for C's wchar_t
  • Runtime changes
  • Added core.stdcpp.array.
  • Add D header file core.sys.darwin.crt_externs for libc/crt_externs.h on Darwin.
  • Added initialize template argument to object.destroy().
  • Added core.stdcpp.string_view.
  • Library changes
  • Add overload std.random.unpredictableSeed!UIntType
  • Dub changes
  • Add Command
  • dub now supports $DUB variable
  • Pre/Post run commands added
  • Shebang without .d extension
  • Sort JSON
  • Added experimental feature to improve build cache efficiency

New in DMD 2.084.0 Beta 2 (Dec 27, 2018)

  • Compiler changes:
  • Aliases can be created directly from a __trait.
  • Added -check switch to turn on and off each category of runtime checks.
  • Add -checkaction=D|C|halt compiler switch.
  • color and -color=on will now always output colorized console output
  • The code generated by mixin statements can now be saved with -mixin
  • Deprecate invalid binary literals
  • Deprecated extern(Pascal) linkage
  • The deprecation phase for fully qualified names that bypassed private imports is finished
  • Templates are now mangled correctly on POSIX
  • Added __c_wchar_t as a correct mangling type for C's wchar_t
  • Runtime changes:
  • Added core.stdcpp.array.
  • Add D header file core.sys.darwin.crt_externs for libc/crt_externs.h on Darwin.
  • Added initialize template argument to object.destroy().
  • Added core.stdcpp.string_view.
  • Library changes:
  • Add overload std.random.unpredictableSeed!UIntType
  • Dub changes:
  • Add Command
  • dub now supports $DUB variable
  • Pre/Post run commands added
  • Shebang without .d extension
  • Sort JSON
  • Added experimental feature to improve build cache efficiency

New in DMD 2.084.1 Beta 1 (Dec 17, 2018)

  • Compiler changes:
  • Aliases can be created directly from a __trait.
  • Added -check switch to turn on and off each category of runtime checks.
  • Add -checkaction=D|C|halt compiler switch.
  • color and -color=on will now always output colorized console output
  • The code generated by mixin statements can now be saved with -mixin
  • Deprecate invalid binary literals
  • Deprecated extern(Pascal) linkage
  • The deprecation phase for fully qualified names that bypassed private imports is finished
  • Templates are now mangled correctly on POSIX
  • Added __c_wchar_t as a correct mangling type for C's wchar_t
  • Runtime changes:
  • Added core.stdcpp.array.
  • Add D header file core.sys.darwin.crt_externs for libc/crt_externs.h on Darwin.
  • Added initialize template argument to object.destroy().
  • Added core.stdcpp.string_view.
  • Library changes:
  • Add overload std.random.unpredictableSeed!UIntType
  • Dub changes:
  • Add Command
  • dub now supports $DUB variable
  • Pre/Post run commands added
  • Shebang without .d extension
  • Sort JSON
  • Added experimental feature to improve build cache efficiency

New in DMD 2.083.1 (Dec 10, 2018)

  • DMD Compiler regressions:
  • Bugzilla 19337: [Reg 2.082.0] Cannot call std.algorithm.sort twice
  • Bugzilla 19419: [REG2.080.1] @disabled this() will print wrong error if calling non-default constructor with wrong parameters
  • DMD Compiler bugs:
  • Bugzilla 19163: static/tuple foreach counted incorrectly in coverage analysis
  • Bugzilla 19393: Structure dtor isn't called after passed to T[]... argument. Memory leaks issue
  • Phobos regressions:
  • Bugzilla 19444: hasRawAliasing loops on class with static array, cannot swap class refs

New in DMD 2.083.0 RC 1 (Oct 30, 2018)

  • Compiler changes:
  • Add CppRuntime_* version identifiers.
  • Deprecated CLI switch -gc have been removed
  • Expose __traits(isZeroInit, T)
  • Implement new C++ mangling syntax
  • Add pragma(linkerDirective), to emit linker directives into object files.
  • fix Issue 14246 - RAII - proper destruction of partially constructed objects
  • Add __traits(getTargetInfo, "key") to query details about the compilation target.
  • Library changes:
  • std.algorithm.iteration.each is now capable of early-stopping
  • toHash function has been added to std.experimental.checkedint.Checked
  • Dub changes:
  • betterC build option has been added
  • Environment variable DUB_PACKAGE_VERSION added

New in DMD 2.083.0 Beta 1 (Oct 17, 2018)

  • Compiler changes:
  • Add CppRuntime_* version identifiers.
  • Deprecated CLI switch -gc have been removed
  • Expose __traits(isZeroInit, T)
  • Implement new C++ mangling syntax
  • Add pragma(linkerDirective), to emit linker directives into object files.
  • fix Issue 14246 - RAII - proper destruction of partically constructed objects
  • Add __traits(getTargetInfo, "key") to query details about the compilation target.
  • Library changes:
  • std.algorithm.iteration.each is now capable of early-stopping
  • toHash function has been added to std.experimental.checkedint.Checked
  • Dub changes:
  • betterC build option has been added
  • Environment variable DUB_PACKAGE_VERSION added
  • Dub now supports a minDubVersion field.

New in DMD 2.082.1 (Oct 12, 2018)

  • DMD Compiler regressions:
  • Bugzilla 19219: Could not CTFE with std.math.exp from 2.082.0
  • Bugzilla 19243: [REG 2.081] Can no longer override pragma(lib) with -L switch
  • Bugzilla 19266: Some source files names are no longer accepted
  • Phobos regressions:
  • Bugzilla 19252: Templated format with variable width allocates 2GB of RAM per call.
  • Phobos bugs:
  • Bugzilla 18851: std.net.curl.post cannot be used with !ubyte
  • Bugzilla 19207: std.algorithm.subsitute wrong results for single subrange substitution

New in DMD 2.082.1 Beta 1 (Oct 8, 2018)

  • DMD Compiler regressions:
  • Bugzilla 19219: Could not CTFE with std.math.exp from 2.082.0
  • Bugzilla 19243: [REG 2.081] Can no longer override pragma(lib) with -L switch
  • Bugzilla 19266: Some source files names are no longer accepted
  • Phobos regressions:
  • Bugzilla 19252: Templated format with variable width allocates 2GB of RAM per call.
  • Phobos bugs:
  • Bugzilla 18851: std.net.curl.post cannot be used with !ubyte

New in DMD 2.082.0 Beta 2 (Aug 24, 2018)

  • Compiler changes:
  • Support for comparing arrays of unsigned byte-sized types and structs has been added to -betterC
  • Added D_ModuleInfo, D_Exceptions, and D_TypeInfo version identifiers
  • Deprecate conditional expression followed by an assign expression
  • Unsafe code can now be used in debug blocks
  • Deprecate usage of opDot
  • D now supports deprecated, @disable and user-defined attributes on enum members
  • Deprecated C-style array declarations will now result in a compilation error
  • Mangling of extern(C++) template on Windows now correctly mangles const non-pointer template parameters.
  • .offsetof and .tupleof for fields of Objective-C classes have now been disabled
  • bit OS X: Revert C++ mangling of long to pre-2.079 to restore size_t interop
  • UDAs on function parameters are now supported
  • Runtime changes:
  • Exception trapping can now be disabled via --DRT-trapExceptions=0
  • Additional functions for associative arrays
  • TypeInfo.getHash now uses core.internal.hash.hashOf functions for hash computing
  • core.sys.posix.utsname.update renamed to version_
  • Library changes:
  • Single- and double-precision implementations for (a)tan and exp function families
  • std.algorithm.iteration.each is now capable of early-stopping
  • std.algorithm.iteration.joiner can now be used for bidirectional ranges
  • std.algorithm.searching.skipOver can now handle variadic arguments
  • Added staticArray to construct a static array from array / input rangeIncludes a length-inferring compile-time variant.
  • Deprecated functions for getting the timezone have been removed.
  • Installer changes:
  • Windows installer and binaries are now code-signed
  • Dub changes:
  • Variables such as $ARCH or $PLATFORM are now supported in the build settings.
  • DUB supports build type "syntax"
  • Enviroment variable expansion was improved
  • Dependency resolution has been reimplemented using a recursive algorithm
  • DUB accepts single file packages on STDIN
  • The regular upgrade check has been removed

New in DMD 2.082.0 Beta (Aug 17, 2018)

  • Compiler changes:
  • Support for comparing arrays of unsigned byte-sized types and structs has been added to -betterC
  • Added D_ModuleInfo, D_Exceptions, and D_TypeInfo version identifiers
  • Deprecate conditional expression followed by an assign expression
  • Unsafe code can now be used in debug blocks
  • Deprecatie usage of opDot
  • D now supports deprecated, @disable and user-defined attributes on enum members
  • Deprecated C-style array declarations will now result in a compilation error
  • Mangling of extern(C++) template on Windows now correctly mangles const non-pointer template parameters.
  • .offsetof and .tupleof for fields of Objective-C classes have now been disabled
  • 64-bit OS X: Revert C++ mangling of long to pre-2.079 to restore size_t interop
  • UDAs on function arguments are now supported
  • Runtime changes:
  • Exception trapping can now be disabled via --DRT-trapExceptions=0
  • Additional functions for associative arrays
  • TypeInfo.getHash now uses core.internal.hash.hashOf functions for hash computing
  • core.sys.posix.utsname.update renamed to version_
  • Library changes:
  • Single- and double-precision implementations for (a)tan and exp function families
  • std.algorithm.iteration.joiner can now be used for bidirectional ranges
  • std.algorithm.searching.skipOver can now handle variadic arguments
  • Added staticArray to construct a static array from array / input range. Includes a length-inferring compile-time variant.
  • Deprecated functions for getting the timezone have been removed.
  • Dub changes:
  • Variables such as $ARCH or $PLATFORM are now supported in the build settings.
  • DUB supports build type "syntax"
  • Enviroment variable expansion was improved
  • Dependency resolution has been reimplemented using a recursive algorithm
  • DUB accepts single file packages on STDIN
  • The regular upgrade check has been removed

New in DMD 2.081.2 (Aug 13, 2018)

  • DMD Compiler regressions:
  • Bugzilla 19074: [REG 2.080] SIGSEGV in el_ptr (s=0x15) at dmd/backend/el.c:1760
  • Bugzilla 19076: dmd 2.081 crashed by getVirtualFunctions for a interface extended interface
  • DMD Compiler bugs:
  • Bugzilla 19112: Associative array opIn with static array key fails with dynamic array
  • Phobos bugs:
  • Bugzilla 19082: Cannot inline "...Slides.numberOfFullFrames", "...Slides.gap"
  • Druntime bugs:
  • Bugzilla 19092: __delete doesn't work with immutable

New in DMD 2.081.2 Beta 1 (Aug 7, 2018)

  • DMD Compiler regressions:
  • Bugzilla 19074: [REG 2.080] SIGSEGV in el_ptr (s=0x15) at dmd/backend/el.c:1760
  • Bugzilla 19076: dmd 2.081 crashed by getVirtualFunctions for a interface extended interface
  • DMD Compiler bugs:
  • Bugzilla 19112: Associative array opIn with static array key fails with dynamic array
  • Phobos bugs:
  • Bugzilla 19082: Cannot inline "...Slides.numberOfFullFrames", "...Slides.gap"
  • Druntime bugs:
  • Bugzilla 19092: __delete doesn't work with immutable

New in DMD 2.081.1 Beta (Jul 9, 2018)

  • DMD Compiler regressions:
  • Bugzilla 19064: [REG2.081] getOverloads traits returns empty tuples for void functions

New in DMD 2.081.0 Beta 1 (Jun 18, 2018)

  • Compiler changes:
  • Deprecate allowing a constructor declaration in a static block
  • Deprecate usage of this and super as types
  • Implement DIP 1009 - Add Expression-Based Contract Syntax
  • Support for iterating template overloads
  • __traits(getLinkage, ...) now works on structs, classes, and interfaces.
  • Implicit catch statements will now result in an error
  • Implicit comparison of different enums will now result in an error
  • Implicit string concatenation will now result in an error
  • IRETQ is now supported in inline assembler.
  • extern (C++) now mangles class constructor's correctly.
  • extern (C++) is now able to mangle typeof(null) (aka: nullptr_t) which often appears in C++ API's.
  • extern (C++) operators now mangle correctly.
  • Interfaces and classes can be used without the runtime if only static fields are utilized
  • Specifying redundant storage classes will now result in a compiler error
  • Runtime changes:
  • Filenames and line numbers have been added to stacktraces on macOS
  • object.destroy() supports extern(C++) classes.
  • Add missing declarations to core.sys.darwin.mach.getsect
  • Library changes:
  • The deprecated std.c package has been removed.
  • std.algorithm.mutation.remove now only accepts integral values or pair of integral values as offset
  • Changed semantics of std.math.{fmin,fmax} wrt. NaNs.
  • Dub changes:
  • DUB supports "customCachePaths" for providing read-only package paths

New in DMD 2.080.1 (Jun 8, 2018)

  • DMD Compiler regressions:
  • Bugzilla 17968: [REG 2.073] object initializer omitted when it should be included.
  • Bugzilla 18115: [REG2.078-b1] case where && is not shortcut anymore in CTFE
  • Bugzilla 18821: DMD segfault when doing unsafe operation outside of any function
  • DMD Compiler bugs:
  • Bugzilla 17819: static foreach segfaults on __traits(allMembers)
  • Bugzilla 18211: Access violation when generating JSON on static foreach
  • Bugzilla 18819: DMD compilation crash
  • Bugzilla 18902: -lib crashes on static libraries in the command line
  • Phobos regressions:
  • Bugzilla 18822: [REG 2.080.0] Compiling byGrapheme Fails
  • Bugzilla 18871: DMD "illegal hardware instruction" crash
  • Bugzilla 18884: getSymbolsByUDA fails on AliasSeq members
  • Druntime bugs:
  • Bugzilla 18904: core.internal.string has issues with radix

New in DMD 2.080.1 Beta 1 (Jun 4, 2018)

  • DMD Compiler regressions:
  • Bugzilla 17968: [REG 2.073] object initializer omitted when it should be included.
  • Bugzilla 18115: [REG2.078-b1] case where && is not shortcut anymore in CTFE
  • DMD Compiler bugs:
  • Bugzilla 17819: static foreach segfaults on __traits(allMembers)
  • Bugzilla 18211: Access violation when generating JSON on static foreach
  • Bugzilla 18819: DMD compilation crash
  • Bugzilla 18902: -lib crashes on static libraries in the command line
  • Phobos regressions:
  • Bugzilla 18822: [REG 2.080.0] Compiling byGrapheme Fails
  • Bugzilla 18871: DMD "illegal hardware instruction" crash
  • Bugzilla 18884: getSymbolsByUDA fails on AliasSeq members
  • Druntime bugs:
  • Bugzilla 18904: core.internal.string has issues with radix

New in DMD 2.080.0 (May 2, 2018)

  • Compiler changes:
  • Class allocators and deallocators have been deprecated
  • Deprecate double initialization of immutable fields inside constructor
  • Issue 18736 - constructor calls allowed after case labels
  • fix Issue 5227 - X ^^ FP at compile-time
  • add __traits(isReturnOnStack, func)
  • Support for calling Objective-C class (static) methods has been added.
  • Deprecate the use of a const/immutable/shared postblit
  • The deprecation for read-modify-write operations on shared variables has ended
  • The deprecation for switch cases which skip the declaration of a variable has ended
  • Library changes:
  • std.typecons.BitFlags now supports opDispatch-based property access
  • std.math.rndtonl has been deprecated
  • Added the SharedBitmappedBlock, as the thread-safe version of the regular BitmappedBlock.
  • Implemented a new allocator, AlignedBlockList and its thread-safe version SharedAlignedBlockList
  • std.exception.enforceEx was deprecated in favor of std.exception.enforce
  • Fixed digits grouping for floating point number without decimal part
  • std.functional.binaryReverseArgs was deprecated in favor of std.functional.reverseArgs
  • apply was added to std.typecons.
  • Tools changes:
  • rdmd can now be used as a shell in makefiles

New in DMD 2.080.1 Beta (Apr 18, 2018)

  • Compiler changes:
  • Class allocators and deallocators have been deprecated
  • Deprecate double initialization of immutable fields inside constructor
  • Issue 18736 - constructor calls allowed after case labels
  • fix Issue 5227 - X ^^ FP at compile-time
  • add __traits(isReturnOnStack, func)
  • Support for calling Objective-C class (static) methods has been added.
  • Deprecate the use of a const/immutable/shared postblit
  • The deprecation for read-modify-write operations on shared variables has ended
  • The deprecation for switch cases which skip the declaration of a variable has ended
  • Library changes:
  • std.typecons.BitFlags now supports opDispatch-based property access
  • std.math.rndtonl has been deprecated
  • Added the SharedBitmappedBlock, as the thread-safe version of the regular BitmappedBlock.
  • Implemented a new allocator, AlignedBlockList and its thread-safe version SharedAlignedBlockList
  • std.exception.enforceEx was deprecated in favor of std.exception.enforce
  • Fixed digits grouping for floating point number without decimal part
  • std.functional.binaryReverseArgs was deprecated in favor of std.functional.reverseArgs
  • apply was added to std.typecons.
  • Tools changes:
  • rdmd can now be used as a shell in makefiles

New in DMD 2.079.1 (Apr 16, 2018)

  • DMD Compiler regressions:
  • Bugzilla 17512: [REG 2.073] [DIP1000] Error on bad interplay of 'auto ref' and 'return' attribute deduction.
  • Bugzilla 18645: DMD segmentation fault
  • DMD Compiler bugs:
  • Bugzilla 17942: Enums are evaluated differently in global scope
  • Bugzilla 18670: compiler segfault if new on a union type with dip1000
  • DMD Compiler enhancements:
  • Bugzilla 18647: Use of delete should be allowed without a deprecation in a deprecated scope
  • Phobos regressions:
  • Bugzilla 18565: std.regex Captures opAssign returns void since v2.079.0
  • Bugzilla 18624: getSymbolsByUDA produces wrong result if one of the symbols having the UDA is a function
  • Bugzilla 18691: assigning a std.regex.Captures with 3 or more groups causes double free
  • Phobos bugs:
  • Bugzilla 18548: [2.079] std.format ignores templated toString if another toString is not a template
  • Phobos enhancements:
  • Bugzilla 18648: Document the type of std.stdio.stdin and friends
  • Druntime regressions:
  • Bugzilla 18530: [Reg 2.079] src/rt/tracegc.d(43): Deprecation: The delete keyword has been deprecated

New in DMD 2.079.1 Beta 1 (Apr 10, 2018)

  • DMD Compiler regressions:
  • Bugzilla 17512: [REG 2.073] [DIP1000] Error on bad interplay of 'auto ref' and 'return' attribute deduction.
  • Bugzilla 18645: DMD segmentation fault
  • DMD Compiler bugs:
  • Bugzilla 17942: Enums are evaluated differently in global scope
  • Bugzilla 18670: compiler segfault if new on a union type with dip1000
  • DMD Compiler enhancements:
  • Bugzilla 18647: Use of delete should be allowed without a deprecation in a deprecated scope
  • Phobos regressions:
  • Bugzilla 18565: std.regex Captures opAssign returns void since v2.079.0
  • Bugzilla 18624: getSymbolsByUDA produces wrong result if one of the symbols having the UDA is a function
  • Bugzilla 18691: assigning a std.regex.Captures with 3 or more groups causes double free
  • Phobos bugs:
  • Bugzilla 18548: [2.079] std.format ignores templated toString if another toString is not a template
  • Phobos enhancements:
  • Bugzilla 18648: Document the type of std.stdio.stdin and friends
  • Druntime regressions:
  • Bugzilla 18530: [Reg 2.079] src/rt/tracegc.d(43): Deprecation: The delete keyword has been deprecated

New in DMD 2.079.0 (Mar 3, 2018)

  • Compiler changes:
  • Argument mismatch errors have been improved
  • The deprecation period of using the result of comma expression has ended
  • Function parameters with default values are now allowed after variadic template parameters
  • The delete keyword has been deprecated.
  • The deprecation period of the -dylib flag on OSX has ended. Use -shared
  • Experimental @nogc Exception throwing with -dip1008
  • A compiler trait used to detect if a function is marked with @disable has been added.
  • Fix Issue 17630 - selective imports find symbols in private imports of other modules
  • Fix issue 17899 - Allow delegates to be initialised at compile time
  • Fix Issue 18053 - mangle long/ulong as int64_t/uint64_t
  • Fix Issue 18219 - Private import inside struct leaks symbols when used as VarDeclaration types
  • Fix issue 18361 - Ddoc ability to opt-out of automatic keyword highlighting in running text
  • D ABI change on Win32 and OSX targets
  • HexString literals are deprecated.
  • Added the -i command line option to automatically include imports
  • Added -Xi=<name> to include more fields in the JSON output
  • Lambda comparison using __traits(isSame, ...)
  • Windows: Visual C++ and the Windows SDK are no longer required to build 64-bit executables
  • Using D with no/minimal/custom runtime implementation in a pay-as-you-go fashion
  • macOS deployment target was increased to 10.9
  • Deprecate the use of selectively imported private members
  • .ptr on arrays can no longer be used in @safe code
  • Runtime changes:
  • core.memory.__delete has been added
  • The garbage collector is now lazily initialized on first use
  • Library changes:
  • std.format with strings passed during compile-time has been optimized
  • Changed std.conv.hexString to return an immutable string literal
  • Nullable!C.nullify no longer calls .destroy when C is a class or interface
  • std.algorithm.searching.substitute was added
  • divMod was added to std.bigint.
  • getDigit Was Added To std.bigint
  • std.exception.enforce can now be used as an eponymous template to create your own enforce function
  • import std.experimental.all as a global convenience import
  • Replace std.experimental.allocator.IAllocator with std.experimental.allocator.RCIAllocator
  • Replace std.experimental.allocator.ISharedAllocator with std.experimental.allocator.RCISharedAllocator
  • readText now checks BOMs
  • fold is added to std.parallelism.TaskPool
  • nullSink was added to std.range
  • std.range.slide (a fixed-size sliding window range) was added
  • std.string.strip now accepts a string of characters to be stripped
  • isSomeString and isNarrowString are now false for enums
  • toString Can Now Use Output Ranges
  • DMD Compiler regressions:
  • Bugzilla 17605: [REG2.066.0] __traits(compiles, closure) adds link-time reference to _d_allocmemory
  • Bugzilla 17970: shared struct destructor doesn't compile anymore
  • Bugzilla 18030: Segmentation fault with __traits(getProtection) on template function.
  • Bugzilla 18093: [Reg 2.071] MSCOFF: dmd crashes when overriding a C++ method in a mixin template
  • Bugzilla 18097: [REG2.077] Unittest function is undefined identifier
  • Bugzilla 18296: [Reg2.078.1] invalid code with coverage and copy construction
  • Bugzilla 18322: void fun(string file=__FILE_FULL_PATH__)() returns relative path (pointing to nowhere)
  • Bugzilla 18430: isSame is wrong for non global lambdas
  • Bugzilla 18469: [REG 2.079-b1] Segfault when trying to get type of __dtor.opCall
  • Bugzilla 18480: [Reg 2.079] dmd hangs with self-alias declaration
  • DMD Compiler bugs:
  • Bugzilla 8207: OS X: Should extern(D) symbols include another underscore?
  • Bugzilla 8687: Variadic templates do not work properly with default arguments
  • Bugzilla 9433: Deprecate delete
  • Bugzilla 12511: static overloaded function is not accessible
  • Bugzilla 12901: Assignments to outside members in in/out contracts shouldn't be allowed
  • Bugzilla 14147: Compiler crash on identical functions in a single module
  • Bugzilla 14907: DMD crash when using template name as a default value of template's typed argument
  • Bugzilla 15777: Premature expansion of overload set in tuples
  • Bugzilla 16042: Identifier on template arguments should consider eponymous member lookup
  • Bugzilla 17437: Incorrect range check when implicitly converting integer literals to float/double
  • Bugzilla 17570: Misleading error message illegal conditional function definition
  • Bugzilla 17625: Confusing error message for private functions in different modules
  • Bugzilla 17630: selective imports find symbols in private imports of other modules
  • Bugzilla 17663: header generation (-H) is broken with public override of private default
  • Bugzilla 18014: DMD test suite fails to link on Linux distros where PIC/PIE is enforced
  • Bugzilla 18057: [ICE] Segmentation fault (stack overflow) in Expression::ctfeInterpret()
  • Bugzilla 18083: -w doesn't work for the ddoc build
  • Bugzilla 18143: in/out contracts should be implicitly 'this' const
  • Bugzilla 18190: [asan] heap-buffer-overflow in Module.load.checkModFileAlias
  • Bugzilla 18212: Usage of cfloat,cdouble,cfloat,ifloat,idouble,ireal shouldn't trigger an error in deprecated code
  • Bugzilla 18218: __traits(isDeprecated, creal) should return true
  • Bugzilla 18219: Private import inside struct leaks symbols when used as VarDeclaration types
  • Bugzilla 18225: Wrong condition in VRP
  • Bugzilla 18232: Union methods fail to initialize local variables to .init
  • Bugzilla 18243: selective import + overload = private visibility
  • Bugzilla 18261: Linkage information isn't part of the json output
  • Bugzilla 18312: string concatenation with -betterC fails with linker errors
  • Bugzilla 18335: The D_ObjectiveC version identifier is not printed in verbose mode
  • Bugzilla 18364: header file generation doesn't print the package name in package(XXX)
  • Bugzilla 18367: dmd should not segfault on -X with libraries, but no source files
  • Bugzilla 18429: alias this enum causes segmentation fault
  • Bugzilla 18468: cannot use synchronized {} in @safe code
  • DMD Compiler enhancements:
  • Bugzilla 6549: Implement contracts without implementation.
  • Bugzilla 11529: Unclear error message when rvalue is passed as `ref'
  • Bugzilla 11714: Improve error message for wrongly initialized thread-local class instances
  • Bugzilla 13855: Allow multiple selective imports from different modules in a single import statement
  • Bugzilla 16492: support @nogc in debug{} blocks
  • Bugzilla 17899: Cannot initialise contextless delegate at compile time
  • Bugzilla 18053: Use stdint.h mangling for int64_t/uint64_t when mangling D long/ulong
  • Bugzilla 18149: Add a compiler trait to detect if a function is @disable
  • Bugzilla 18273: Better C: wrong exit code from main()
  • Bugzilla 18361: Ddoc: support ability to opt out of automatic keyword highlighting in text
  • Bugzilla 18427: Symbol FOO is not visible because it is privately imported => compiler should show how to import it
  • Phobos regressions:
  • Bugzilla 18114: [Reg 2.078] regex performance regression
  • Bugzilla 18316: std.net.curl.SMTP.mailTo fails to compile
  • Phobos bugs:
  • Bugzilla 7054: format() aligns using code units instead of graphemes
  • Bugzilla 10879: std.variant Variant/Algebraic: Can't store static arrays > 32(/16) bytes
  • Bugzilla 15157: std.experimental.allocator.building_blocks docs
  • Bugzilla 15391: Problems loading libcurl.so and running datetime unittest on NixOS package build
  • Bugzilla 17832: std.random.choice cannot be used with other random generators
  • Bugzilla 18092: Can't combine take and takeExactly
  • Bugzilla 18124: std.regex.RegexMatch's front property is under-documented
  • Bugzilla 18153: deprecate public symbols ByLine, ByRecord, ByChunk
  • Bugzilla 18224: BigInt modulo uint must return long.
  • Bugzilla 18229: Misleading documentation of std.process.environment.get
  • Bugzilla 18259: allocatorObject's CAllocatorImpl should store the passed allocator within
  • Bugzilla 18278: writef documentation 404 error
  • Bugzilla 18285: std.algorithm.comparison.cmp for strings with custom predicate compares lengths wrong
  • Bugzilla 18286: std.algorithm.comparison.cmp for string with custom predicate fails if distinct chars can compare equal
  • Bugzilla 18288: std.algorithm.comparison.cmp for wide strings should be @safe
  • Bugzilla 18299: std.datetime.date.cmpTimeUnits does not throw a DateTimeException
  • Bugzilla 18328: algorithm.startsWith can compare narrow string lengths in more circumstances
  • Bugzilla 18349: std/math.d(543,33): Deprecation: integral promotion not done for -x
  • Bugzilla 18384: std.net.isemail is slow to import due to regex
  • Bugzilla 18397: Poor implementation of std.conv.hexString results in unintended bloat
  • Bugzilla 18434: BigInt gcd asserts when one argument is zero.
  • Bugzilla 18492: DLang STL links are broken
  • Phobos enhancements:
  • Bugzilla 5489: std.typecons tuples dynamically iterable
  • Bugzilla 10828: datetime toString functions should accept sink
  • Bugzilla 11084: std.algorithm.scan
  • Bugzilla 11555: std.algorithm.reverse should return the just-reversed range
  • Bugzilla 11747: Better error message with @disabled toString
  • Bugzilla 13632: Second argument for std.string.strip
  • Bugzilla 14767: Support CTFE of BigInt under x86
  • Bugzilla 15949: Improve readtext handling of byte order mark (BOM)
  • Bugzilla 17249: Make BigInt data visible (not modifiable!)
  • Bugzilla 17440: Nullable.nullify() resets referenced object
  • Bugzilla 18086: BigInt DivMod
  • Bugzilla 18096: Add fold() to std.parallelism
  • Bugzilla 18116: to!wchar([string, dstring]), and to!char([wstring, dstring]) don't compile
  • Bugzilla 18152: std.format.formattedRead should work with rvalues.
  • Bugzilla 18186: std.array.replaceSlice should be usable in @safe
  • Bugzilla 18214: TemplateOf should return void for non-templated symbols
  • Bugzilla 18217: Don't repeatedly call unpredictableSeed to initialize rndGen
  • Bugzilla 18230: multiwayUnion sets wrong pred lambdas
  • Bugzilla 18239: std.experimental.allocator fillWithMemcpy could use memset when T.sizeof==1
  • Bugzilla 18280: std.algorithm.comparison.cmp for non-strings should call opCmp only once per item pair
  • Bugzilla 18329: std.algorithm.startsWith & endsWith can sometimes statically determine decoding unnecessary
  • Druntime regressions:
  • Bugzilla 15482: new uuid.d forbids to link statically with other libraries
  • Druntime bugs:
  • Bugzilla 18240: core.stdc.wchar_ wmemset, etc. should be pure
  • Bugzilla 18247: core.stdc.math functions that never set errno should be pure
  • Bugzilla 18279: rt.util.utf does not properly reserve buffer in toUTF16/toUTF16z
  • Bugzilla 18300: core.demangle demangling of really long symbol fails
  • Bugzilla 18409: DScanner SEGFAULTS on CircleCI
  • Bugzilla 18531: core.exception.RangeError@src/core/demangle.d(216): Range violation
  • dlang.org bugs:
  • Bugzilla 13844: core.stdc.config isn't listed in the docs
  • Bugzilla 14475: man page is outdated
  • Bugzilla 16490: Usage of attributes in inline asm blocks is not documented
  • Bugzilla 18306: No compliation errors shown when running modified examples
  • Bugzilla 18319: std.exception: enforce example does not compile
  • Bugzilla 18341: Documentation for std.array.split is confusing/incorrect
  • Bugzilla 18355: [Areas of D usage]
  • dlang.org enhancements:
  • Bugzilla 17998: Document Options for install.sh
  • Bugzilla 18202: Show TOC overview in the dlang specification pages
  • Bugzilla 18337: https://dlang.org/spec/operatoroverloading.html missing opIn/opIn_r
  • Bugzilla 18379: [404 Not Found] Foundation Donate page not found
  • Bugzilla 18383: Front page blog section is only partially filled.
  • Tools bugs:
  • Bugzilla 18208: demangle RangeError@src/core/demangle.d(230)
  • Installer bugs:
  • Bugzilla 15131: curl.lib is not available in 32 bit mscoff format
  • Bugzilla 18510: [Beta 2.079] lld-link.exe fails to open obj file in subpath

New in DMD 2.079.0 Beta 2 (Feb 26, 2018)

  • Compiler changes:
  • The deprecation period of using the result of comma expression has ended
  • Function parameters with default values are now allowed after variadic template parameters
  • The delete keyword has been deprecated
  • The deprecation period of the -dylib flag on OSX has ended Use -shared
  • Experimental @nogc Exception throwing with -dip1008
  • A compiler trait used to detect if a function is marked with @disable has been added
  • Fix Issue 17630 - selective imports find symbols in private imports of other modules
  • Fix issue 17899 - Allow delegates to be initialised at compile time
  • Fix Issue 18053 - mangle long/ulong as int64_t/uint64_t
  • Fix Issue 18219 - Private import inside struct leaks symbols when used as VarDeclaration types
  • Fix issue 18361 - Ddoc ability to opt-out of automatic keyword highlighting in running text
  • D ABI change on Win32 and OSX targets
  • HexString literals are deprecated
  • Added the -i command line option to automatically include imports
  • Added -Xi=<name> to include more fields in the JSON output
  • Lambda comparison using __traits(isSame, )
  • Windows: Visual C++ and the Windows SDK are no longer required to build 64-bit executables
  • Using D with no/minimal/custom runtime implementation in a pay-as-you-go fashion
  • macOS deployment target was increased to 109
  • Deprecate the use of selectively imported private members
  • ptr on arrays can no longer be used in @safe code
  • Runtime changes:
  • corememory__delete has been added
  • The garbage collector is now lazily initialized on first use
  • Library changes:
  • stdformat with strings passed during compile-time has been optimized
  • Changed stdconvhexString to return an immutable string literal
  • Nullable!Cnullify no longer calls destroy when C is a class or interface
  • stdalgorithmsearchingsubstitute was added
  • divMod was added to stdbigint
  • getDigit Was Added To stdbigint
  • stdexceptionenforce can now be used as an eponymous template to create your own enforce function
  • Replace stdexperimentalallocatorIAllocator with stdexperimentalallocatorRCIAllocator
  • Replace stdexperimentalallocatorISharedAllocator with stdexperimentalallocatorRCISharedAllocator
  • import stdexperimentalscripting as a global convenience import
  • readText now checks BOMs
  • fold is added to stdparallelismTaskPool
  • nullSink was added to stdrange
  • stdrangeslide (a fixed-size sliding window range) was added
  • stdstringstrip now accepts a string of characters to be stripped
  • isSomeString and isNarrowString are now false for enums
  • toString Can Now Use Output Ranges

New in DMD 2.079.0 Beta 1 (Feb 19, 2018)

  • The deprecation period of using the result of comma expression has ended
  • Function parameters with default values are now allowed after variadic template parameters
  • The delete keyword has been deprecated.
  • The deprecation period of the -dylib flag on OSX has ended. Use -shared
  • A compiler trait used to detect if a function is marked with @disable has been added.
  • Fix Issue 17630 - selective imports find symbols in private imports of other modules
  • Fix issue 17899 - Allow delegates to be initialised at compile time
  • Fix Issue 18053 - mangle long/ulong as int64_t/uint64_t
  • Fix Issue 18219 - Private import inside struct leaks symbols when used as VarDeclaration types
  • Fix issue 18361 - Ddoc ability to opt-out of automatic keyword highlighting in running text
  • D ABI change on Win32 and OSX targets
  • HexString literals are deprecated.
  • Added the -i command line option to automatically include imports
  • Added -Xi=<name> to include more fields in the JSON output
  • Lambda comparison using __traits(isSame, ...)
  • Using D with no/minimal/custom runtime implementation in a pay-as-you-go fashion
  • Allow multiple selective imports from different modules in a single import statement
  • macOS deployment target was increased to 10.9
  • Deprecate the use of selectively imported private members
  • .ptr on arrays can no longer be used in @safe code

New in DMD 2.078.3 (Feb 16, 2018)

  • DMD Compiler regressions:
  • Bugzilla 18403: [REG2.078.2] Access violation when dmd tries to print highlighted code
  • DMD Compiler bugs:
  • Bugzilla 17752: Switch skips over declaration issued for explicitly uninitialized variables

New in DMD 2.078.2 Beta (Feb 5, 2018)

  • Druntime regressions:
  • Bugzilla 18252: [Reg 2.078] comparison of arrays of associative arrays no longer compiles

New in DMD 2.078.1 (Jan 22, 2018)

  • DMD Compiler regressions:
  • Bugzilla 16621: [REG2.060] DMD hang in semantic3 on alias this
  • DMD Compiler bugs:
  • Bugzilla 13742: undefined reference to __coverage
  • Bugzilla 18111: unittests get different names depending on how the files are passed to dmd
  • Bugzilla 18233: building with -m64 doesn't work with sc.ini from the zip distribution and VS2017
  • Phobos bugs:
  • Bugzilla 18215: std.array.replace throws a range violation if the from range is longer than the array
  • Bugzilla 18244: Generic functions in std.math cannot be overloaded
  • Druntime regressions:
  • Bugzilla 18193: module config is in file 'rt/config.d' which cannot be read
  • dlang.org bugs:
  • Bugzilla 16017: package functions show up in std.experimental.allocator.common docs

New in DMD 2.078.1 Beta (Jan 16, 2018)

  • DMD Compiler regressions:
  • Bugzilla 16621: [REG2.060] DMD hang in semantic3 on alias this
  • DMD Compiler bugs:
  • Bugzilla 18111: unittests get different names depending on how the files are passed to dmd
  • Bugzilla 18233: building with -m64 doesn't work with sc.ini from the zip distribution and VS2017
  • Phobos bugs:
  • Bugzilla 18215: std.array.replace throws a range violation if the from range is longer than the array
  • Druntime regressions:
  • Bugzilla 18193: module config is in file 'rt/config.d' which cannot be read
  • dlang.org bugs:
  • Bugzilla 16017: package functions show up in std.experimental.allocator.common docs

New in DMD 2.078.0 (Jan 5, 2018)

  • Compiler changes:
  • opDispatch resolution in with statements
  • Generate header files using do instead of body as per DIP1003
  • pragma(crt_constructor) and pragma(crt_destructor) were added
  • Subtraction of pointers that point to different types has been deprecated.
  • Variadic template arguments no longer require alias workaround
  • fix Issue 16997 - Integral promotion rules not being followed for unary + - ~ operators
  • Optional ModuleInfo
  • Added RAII and try-finally support for -betterC mode.
  • Windows: dmd can now detect Visual Studio installation paths
  • Runtime changes:
  • core.runtime now allows more fine-grained control over unittests.
  • The runtime learned a few new options to customize how coverage reports are created.
  • Library changes:
  • mean Was Added To std.algorithm
  • findSkip can now skip elements using just a predicate function
  • std.array.byPair now returns a NamedTuple
  • std.container.dlist supports linearRemoveElement
  • std.container.slist supports linearRemoveElement
  • Deprecate save for std.range.package.Transposed
  • std.typecons.Ternary.opBinary supports bool bitwise operands

New in DMD 2.078.0 Beta (Dec 20, 2017)

  • Compiler changes:
  • opDispatch resolution in with statements
  • Generate header files using do instead of body as per DIP1003
  • pragma(crt_constructor) and pragma(crt_destructor) were added
  • Subtraction of pointers that point to different types has been deprecated.
  • Variadic template arguments no longer require alias workaround
  • fix Issue 16997 - Integral promotion rules not being followed for unary + - ~ operators
  • Optional ModuleInfo
  • Added RAII and try-finally support for -betterC mode.
  • Runtime changes:
  • core.runtime now allows more fine-grained control over unittests.
  • The runtime learned a few new options to customize how coverage reports are created.
  • Library changes:
  • mean Was Added To std.algorithm
  • findSkip can now skip elements using just a predicate function
  • std.array.byPair now returns a NamedTuple
  • std.container.dlist supports linearRemoveElement
  • std.container.slist supports linearRemoveElement
  • Deprecate save for std.range.package.Transposed
  • std.typecons.Ternary.opBinary supports bool bitwise operands

New in DMD 2.077.1 Beta 1 (Nov 22, 2017)

  • DMD Compiler regressions:
  • Bugzilla 16183: [REG2.068] compile-time string concatenation fails with CTFE and char[] literal involved
  • Bugzilla 17969: [REG 2.077.0] dmd 2.077.0 crashes when computing mangling symbol for simple program
  • Phobos regressions:
  • Bugzilla 17996: [Reg 2.077] don't build libphobos2.a with PIC for i386
  • Phobos bugs:
  • Bugzilla 17966: chunkBy cannot accept an input range (from multiwayMerge)

New in DMD 2.077.0 (Nov 6, 2017)

  • Compiler changes:
  • Mangled Symbols now back reference types and identifiers.
  • Removed prelude assert for constructors & destructors
  • DMD builds are now reproducible
  • Runtime changes:
  • core.atomic.atomicLoad's returns types have changed for aggregate types that have indirections.
  • Vectorized array operations are now templated

New in DMD 2.076.1 (Oct 10, 2017)

  • DMD Compiler regressions:
  • Bugzilla 17502: [REG2.064] Out contract in class method causes dmd segfault.
  • Bugzilla 17619: [REG2.072] Wrong debug line information with single line loops
  • Bugzilla 17876: [REG 2.074] Internal error when comparing inout(Foo[][]) with Foo[][]
  • DMD Compiler bugs:
  • Bugzilla 17800: [2.076] "static foreach" allocates closures in GC without reason
  • Bugzilla 17805: -dirty flag on dmd's version
  • Bugzilla 17807: Spurious dead code warnings on enum and static variables.
  • Bugzilla 17812: crash when building JSON info with static foreach
  • Bugzilla 17814: bad output of "static foreach" with -vcg-ast
  • Bugzilla 17831: [ICE] Internal error: backend/symbol.c 1039: foreach inside a switch statement
  • Phobos regressions:
  • Bugzilla 17801: Date.fromISOExtString broken in 2.076 because of changed type specifier
  • Phobos bugs:
  • Bugzilla 13348: std.uni.Grapheme is impure due to using C malloc and friends
  • Druntime bugs:
  • Bugzilla 17788: MSCOFF: TLS broken when linking with linker from VS2017 15.3.1

New in DMD 2.076.0 (Sep 4, 2017)

  • Compiler changes:
  • Implement DIP 1010 - Static foreach
  • betterC enhancements
  • AVX2 was added as -mcpu=avx2 architecture.
  • betterC enhancements
  • Fix Issue 17697 - Ddoc: automatically highlight URLs outside of macro arguments
  • Implement DIP 1010 - Static foreach
  • Runtime changes:
  • Print unhandled exception's trace and abort if rt_trapExceptions is false
  • Library changes:
  • Base64URLNoPadding (URL-safe Base64 without padding) was added
  • std.digest.digest was renamed to std.digest.
  • std.meta.Stride was added
  • Config.detached flag for spawnProcess has been added
  • std.range.chunks was extended to support non-forward input ranges.
  • std.socket.UnixAddress now supports abstract addresses.
  • Added possibility to use a baseclass when auto-implementing an interface
  • Tools changes:
  • rdmd now checks for a D compiler binary in the directory it's in first

New in DMD 2.076.0 Beta (Sep 1, 2017)

  • Compiler changes:
  • AVX2 was added as -mcpu=avx2 architecture.
  • Fix Issue 17697 - Ddoc: automatically highlight URLs outside of macro arguments
  • Implement DIP 1010 - Static foreach
  • Runtime changes:
  • Print unhandled exception's trace and abort if rt_trapExceptions is false
  • Library changes:
  • Base64URLNoPadding (URL-safe Base64 without padding was added
  • std.digest.digest was renamed to std.digest.
  • std.meta.Stride was added
  • Config.detached flag for spawnProcess has been added
  • std.range.chunks was extended to support non-forward input ranges.
  • std.socket.UnixAddress now supports abstract addresses.
  • Added possibility to use a baseclass when auto-implementing an interface
  • Tools changes:
  • rdmd now checks for a D compiler binary in the directory it's in first

New in DMD 2.075.1 (Sep 1, 2017)

  • DMD Compiler regressions:
  • Bugzilla 17622: [REG2.075.0-b1] Wrong code with appender and -inline
  • Bugzilla 17676: [REG 2.075] bad inlining of functions with multiple return statements
  • Bugzilla 17677: [REG 2.073.0] ICE when adding ulong to cfloat
  • Bugzilla 17684: [REG 2.062] static alias this bug or incomplete implementation?
  • Bugzilla 17686: [REG2.075.0] Covariant return types doesn't work with override in some cases
  • DMD Compiler bugs:
  • Bugzilla 17646: dmd segfaults on missing foreach body in import
  • Phobos regressions:
  • Bugzilla 17192: ParameterDefaults fails when parameter is called "i"
  • Phobos bugs:
  • Bugzilla 17667: regex([r".", r"[({[]}]"];
  • Bugzilla 17668: regex(q"<[^]>"

New in DMD 2.071.2 Beta (Aug 18, 2016)

  • List of all bug fixes and enhancements in D 2.071.2:
  • DMD Compiler regressions
  • Bugzilla 15780: [REG2.069] CTFE foreach fails with tuple
  • Bugzilla 15900: [REG 2.071] (Import deprecation) Public import ignored when using fully qualified name
  • Bugzilla 16085: wrong visibility warning for overloaded alias symbol
  • Bugzilla 16188: [REG2.069] ICE on invalid code
  • Bugzilla 16225: [REG 2.068] Internal error cod1.c 1338 with -O
  • Bugzilla 16316: [REG 2.071] (Import deprecation) fully qualified name of imports in mixin template not accessible
  • Bugzilla 16348: [REG 2.070.2] ICE with package visibility

New in DMD 2.071.1 (Aug 18, 2016)

  • List of all bug fixes and enhancements in D 2.071.1:
  • DMD Compiler regressions
  • Bugzilla 15629: [REG2.066.0] wrong code with '-O -inline' but correct with '-O'
  • Bugzilla 15861: [REG 2.069] Wrong double-to-string conversion with -O
  • Bugzilla 15897: private base class method not seen through derived class
  • Bugzilla 15898: [REG2.069] Internal error: backendcgcod.c 1651
  • Bugzilla 15925: -transition=[check]imports ignores import declaration from mixin templates
  • Bugzilla 15961: [REG2.066] ICE with instance field introduced by anonymous struct
  • Bugzilla 15998: [REG2.067] Segmentation fault on const folding of arrays of static arrays
  • Bugzilla 16022: [REG2.069] dmd assertion failure due to misplaced comma operator
  • Bugzilla 16027: Wrong result of double multiplication
  • Bugzilla 16080: [REG2.071.0] Internal error: backendcgobj.c 3406 when building static library
  • DMD Compiler bugs
  • Bugzilla 15856: Confusing error message with -transition=checkimports
  • DMD Compiler enhancements
  • Bugzilla 15402: allow private access to package symbols
  • Phobos regressions
  • Bugzilla 15914: [REG 2.071] getopt doesn't accept anymore a character for a bool option
  • Bugzilla 15941: [REG v2.069] rbtree no longer supports classes
  • Druntime regressions
  • Bugzilla 15911: undefined __Unwind_GetIPInfo for x86_64

New in DMD 2.071.0 (Aug 18, 2016)

  • Compiler Changes
  • Import access checks for fully qualified names were fixed.
  • Protection for selective and renamed imports were fixed.
  • Language Changes
  • Imports no longer hide locals declared in outer scopes.
  • Private symbols are no longer visible in other modules.
  • Manifest constant can now be used for deprecation message.
  • Library Changes
  • A clear method has been added to associative arrays to remove all elements.
  • The GC now uses a spinlock instead of a recursive mutex.
  • Calls to GC.free are now ignored during finalization instead of throwing an InvalidMemoryOperationError, see Bugzilla 15353.
  • GC.addRoot and GC.addRange now use a separate lock.
  • GCAllocator.goodAllocSize was added.
  • High-level API of std.net.curl now uses Appender for received content. Which generally makes all calls slightly faster. Up to 200ms for large amounts of data.
  • Repeat was added to obtain a repeating AliasSeq consisting of template arguments.
  • fold was added as an alternative to reduce with argument order swapped.
  • Added nextPow2 and truncPow2 to std.math.
  • bsf, bsr, and popcnt now work with ulongs on 32 bit systems.
  • topN is now 5% - 7% faster.
  • Unary overloads of startsWith and endsWith were added.
  • maxCount and maxPos were added.
  • Range support for the convenience wrapper redBlackTree was added.
  • List of all bug fixes and enhancements in D 2.071.0.
  • Compiler Changes
  • Import access checks for fully qualified names were fixed.
  • It is no longer possible to bypass private imports by using fully qualified names, e.g. the following example will fail with package std.range is not accessible here.
  • import std.algorithm;
  • static assert(std.range.isForwardRange!string);
  • To ease updating existing code, the old behavior was retained but deprecated.
  • Protection for selective and renamed imports were fixed.
  • It is no longer possible to use private selective or renamed imports in another module, e.g. the following example will fail with a.File is not visible from module b.
  • module a;
  • import std.stdio : File; // imports are private by default
  • module b;
  • import a;
  • File f; // File is private
  • To ease updating existing code, the old behavior was retained but deprecated. This fix relies on the visibility changes introduced with DIP22.
  • Language Changes
  • Imports no longer hide locals declared in outer scopes.
  • These changes were made to the name lookup algorithm:
  • Lookup for unqualified names is change from one pass to two pass. The first pass goes through the scopes but does not check import declarations. If not found, the second pass goes through the scopes and only looks at import declarations.
  • Qualified name lookups, base class lookups, and WithStatement lookups no longer search import declarations, unless a module is the subject of the lookup, where the behavior remains as before.
  • This can break existing code, although reliance on the previous behavior tends to be unintended, and fixing it improves the comprehensibility of the code. Breakage tends to take the form of a symbol now being flagged as undefined. Fixing the breakage can be done by fully qualifying the name, or adding an alias to the import declaration.
  • The old lookup behavior can be restored using the -transition=import compiler switch. With -transition=checkimports the compiler will issue deprecation warnings when the old and new lookup find different symbols. You can combine both switches to use the old lookup and still get deprecation warnings.
  • See also Bugzilla 10378
  • Private symbols are no longer visible in other modules.
  • Protection (private, package, protected) is now already enforced during symbol lookup in order to resolve any conflicts between private and public symbols that could occur with the old access check scheme.
  • The visibility of overloaded symbols with mixed protection is determined by the most visibile member, but additional access check against the exact symbol is performed after overload resolution.
  • To ease updating existing code, a deprecated search for invisible symbols will be performed. For the the old lookup behavior (using the -transition=import or -transition=checkimports compiler switch) symbol visibility is ignored. All existing access checks remain active during the deprecation phase.
  • See also DIP22
  • Manifest constant can now be used for deprecation message.
  • Manifest constants (enum, static immutable) can now be used for deprecation message, as well as concatenated strings.
  • Example:
  • string generateMessage() { return "Some deprecation message"; }
  • enum DepMsg = generateMessage();
  • deprecated(DepMsg) class Foo {}
  • deprecated("Some long deprecation " ~ "message") class Bar {}
  • Library Changes
  • A clear method has been added to associative arrays to remove all elements.
  • One can now use aa.clear() to remove all elements from an associative array. This allows removing all elements from all references to the same array (setting to null just reset the reference, but did not removed the elements from other references).
  • auto aa = ["first" : "entry", "second": "entry"];
  • auto aa2 = aa1; // reference to the same AA
  • aa.clear(); // still retains its current capacity for faster imports
  • assert(aa2.length == 0); // other references affected
  • The GC is no longer wrapped in a pthread_mutex, it now uses a spinlock.
  • This results in a 5% faster GC on average, with the most benefits going to multi-threaded programs that use the GC. See druntime#1447 for more details.
  • Added nextPow2 and truncPow2 to std.math.
  • nextPow2 and truncPow2 are functions for rounding numbers to powers of two.
  • import std.math;
  • assert(nextPow2(10) == 16);
  • assert(nextPow2(4000) == 4096);
  • assert(truncPow2(10) == 8);
  • assert(truncPow2(4000) == 2048);
  • Unary overloads of startsWith and endsWith were added.
  • startsWith and endsWith can now be used just with a predicate.
  • import std.algorithm.searching;
  • import std.ascii : isAlpha;
  • assert("abc".endsWith!isAlpha);
  • assert(!"ab1".endsWith!(a => a.isAlpha));
  • assert("abc".startsWith!isAlpha);
  • assert(!"1ab".startsWith!isAlpha);
  • maxCount and maxPos were added.
  • Previous to this addition, in order to get the number of the greatest elements, you had to use minCount!"a > b", which was very confusing. This change adds convenience functions to fix this issue.
  • List of all bug fixes and enhancements in D 2.071.0:
  • DMD Compiler regressions
  • Bugzilla 14965: [REG2.031] Forward reference to inferred return type of function call when using auto return type
  • Bugzilla 14973: [REG2.068] compiler inference of contexts for nested map seems broken
  • Bugzilla 15296: [REG2.069] cannot inline simple function that calls use non-inlinable statements
  • Bugzilla 15422: [REG2.066] associative array of nested struct - crash on usage
  • Bugzilla 15455: [REG v2.065] Compiler segfault for simple nested structure
  • Bugzilla 15618: [REG-master] Class member layout has been changed, ABI needs to be updated?
  • Bugzilla 15713: [REG-master] ctfe string concatenation is templates is broken
  • Bugzilla 15729: [REG(master)] broken debug info for libraries
  • Bugzilla 15733: [REG2.066] Forward reference issue involving inheritance
  • Bugzilla 15744: [REG2.067] (SIGABRT) Error: overloadset t.Bar.__ctor is aliased to a function
  • Bugzilla 15778: [REG2.064] polysemous string type doesn't work in array operation
  • Bugzilla 15781: [REG2.069] Template type deduction failure with same-type variables with different constness
  • Bugzilla 15785: [DMD HEAD] Spurious warning when calling protected super
  • Bugzilla 15788: [REG2.069] ICE assert triggered on overloaded function
  • Bugzilla 15814: [REG-master] Custom deprecation message is not shown
  • Bugzilla 15815: [REG2.071-devel] deprecation for aliased template instance not shown
  • Bugzilla 15817: [REG2.068] ICE (with no stacktrace) instead of 'cannot index null array counts' with CTFE AA
  • Bugzilla 15839: [REG2.071-b1] this.outer is of wrong type
  • DMD Compiler bugs
  • Bugzilla 143: 'package' does not work at all
  • Bugzilla 313: [module] Fully qualified names bypass private imports
  • Bugzilla 314: [module] Static, renamed, and selective imports are always public
  • Bugzilla 1754: module member visibility does not affect conflicts
  • Bugzilla 2991: [module] Import within aggregate causes conflicts with private identifiers
  • Bugzilla 3254: [module] Module member visibility depends on declaration order
  • Bugzilla 6907: ice(interpret.d) delete expressions crash interpreter
  • Bugzilla 7516: Postblit not called for structs returned from a ternary operator
  • Bugzilla 7517: Interface contracts broken
  • Bugzilla 11581: Given T..., new T[0] does not work
  • Bugzilla 12748: ICE: Using typeof(S.init[0]) in type name specialization.
  • Bugzilla 12829: Wrong error line number for closure allocation in @nogc function
  • Bugzilla 13702: One missed 'may cause GC allocation' error message
  • Bugzilla 14442: Wrong this.outer reference in nested classes
  • Bugzilla 14486: delete on classes ignores @nogc
  • Bugzilla 14603: "cannot alias an expression" when opDispatch results in a template
  • Bugzilla 14604: "cannot resolve forward reference" when opDispatch results in a template
  • Bugzilla 14686: Postblit isn't sometimes called on concatenation
  • Bugzilla 14730: Wrong closure var access with -inline
  • Bugzilla 14788: Incorrect rejection of inout function call
  • Bugzilla 14895: ICE on array operation when its result is concatenated
  • Bugzilla 14989: Overload merge sometimes doesn't work
  • Bugzilla 14992: static array local variables always require .init
  • Bugzilla 15309: [dmd-internal] ScopeExp.semantic() should set its type always
  • Bugzilla 15310: [dmd-internal] TemplateDeclaration should be converted to TemplateExp always
  • Bugzilla 15332: ICE in e2ir.c: assert(irs->sthis) in visit(ThisExp), function literal with keyword 'function' calls method
  • Bugzilla 15353: std.experimental.allocator cannot free memory in its destructor if the GC is an ancestor
  • Bugzilla 15384: assignment is sometimes still accepted as a condition
  • Bugzilla 15389: extern(C++) forward referencing problem
  • Bugzilla 15407: Assert hit in toElem e2ir.c:1962
  • Bugzilla 15411: Function literal accessing variable in declaration scope produces bad error message with inline call
  • Bugzilla 15441: dmd segfaults using std.experimental.ndslice
  • Bugzilla 15450: ICE during CTFE of legit function
  • Bugzilla 15519: Circular imports leads to fwd ref error with aliased imports
  • Bugzilla 15535: Emit error on "goto default" in final switch
  • Bugzilla 15565: Forward reference error with namespaces
  • Bugzilla 15578: Should have access to namespace private symbols from same module
  • Bugzilla 15579: extern(C++) interfaces/multiple-inheritance
  • Bugzilla 15610: extern(C++) multiple inheritance - calling with wrong 'this' ptr
  • Bugzilla 15623: is(M!N) evaluates to true for M!N that fails to instantiate.
  • Bugzilla 15626: extern(C++) calling crash
  • Bugzilla 15638: no common type for const classes
  • Bugzilla 15647: Casting from one C++ interface in a hierarchy to another is a noop
  • Bugzilla 15665: Templated scope class with constructor don't compile
  • Bugzilla 15667: dmd infinite loop on invalid syntax.
  • Bugzilla 15669: Wrong line number in error message
  • Bugzilla 15688: dmd segfault with an integer call through comma expression
  • Bugzilla 15784: Overload set constructor call should be supported from inside a constructor
  • Bugzilla 15789: ICE Assert in TemplateInstance semanticTiargs
  • Bugzilla 15794: Lambda cannot get a chance to run its codegen
  • Bugzilla 15811: -transition=import and -transition=checkimport have oddly behaviors
  • Bugzilla 15825: dmd's -transition=checkimports reports a false positive for tuple __dollar
  • DMD Compiler enhancements
  • Bugzilla 10378: Prevent local imports from hiding local symbols
  • Bugzilla 12954: deprecated doesn't work with concatenated strings or anything else but a string literal
  • Bugzilla 14383: [ddoc] documented unittests don't work for module declaration
  • Bugzilla 15644: Change object layout ABI to MI style
  • Phobos regressions
  • Bugzilla 15222: std.experimental omitted from phobos zip file
  • Bugzilla 15782: [Reg 2.071-devel] Alias no longer strips qualifiers from user defined types
  • Bugzilla 15807: Array!bool insertBack is broken
  • Phobos bugs
  • Bugzilla 1238: Private identifiers in imported modules create conflicts with public ones
  • Bugzilla 15543: [ndslice] assumeSameStructure has useless flag
  • Bugzilla 15545: csv Reader line feed 'r' failure
  • Bugzilla 15549: [ndslice] byElement is broken for packed slices
  • Bugzilla 15553: topN very inefficient [slower than sort, even for topN(0)] but should be O(n)
  • Bugzilla 15561: std.typecons.Proxy gets NaN comparisons wrong
  • Bugzilla 15639: std.experimental.allocator enables abstract class instantiation
  • Bugzilla 15654: SysTime.toISOString formats the time zones incorrectly
  • Bugzilla 15655: SysTime.from*String incorrectly accept single digit time zones and minutes > 59
  • Bugzilla 15659: SList: clear() can cause crash
  • Bugzilla 15663: writefln("%#o", 0) should yield "0" instead of "00"
  • Bugzilla 15677: std.experimental.allocators.expandArray overload with init should take the array by ref.
  • Bugzilla 15683: broken link in DDoc
  • Bugzilla 15686: std.uni overloads documentation
  • Bugzilla 15715: [ndslice] rangeHasMutableElements is not defined
  • Bugzilla 15721: free error when calling Mallocator.dispose on interfaces
  • Bugzilla 15772: emplace works with abstract classes but it shouldn't
  • Phobos enhancements
  • Bugzilla 15377: std.stdio: Use MSVCRT's _fseeki64 / _ftelli64 on Windows COFF
  • Bugzilla 15532: [ndslice] iota(5).sliced(2,2) should throw error
  • Bugzilla 15596: strip with delimiter?
  • Bugzilla 15714: [ndslice] byElement seems to be missing some slicing primitives
  • Druntime regressions
  • Bugzilla 15224: making 'clean' results in garbage commands
  • Bugzilla 15779: DWARF EH fails when using stack stomping (-gx)
  • Bugzilla 15822: InvalidMemoryOperationError when calling GC.removeRange/Root from a finalizer
  • Druntime enhancements
  • Bugzilla 15628: Exceptions in fibers never caught with /SAFESEH
  • dlang.org bugs
  • Bugzilla 10987: Add documentation for 'extern (C++)' classes
  • Bugzilla 15344: m32mscoff switch missing from documentation.
  • Bugzilla 15666: Grammar does not allow member function attributes on static constructors
  • Bugzilla 15696: The website logo overlaps the Learn tab when using Microsoft Edge
  • Bugzilla 15697: The script for This Week in D is served over HTTP even when accessing the website over HTTPs.

New in DMD 2.070.2 (Aug 18, 2016)

  • DMD Compiler bugs
  • Bugzilla 15665: Templated scope class with constructor don't compile

New in DMD 2.070.1 (Aug 18, 2016)

  • List of all bug fixes and enhancements in D 2.070.1:
  • DMD Compiler regressions
  • Bugzilla 15490: [REG 2.067] Error variable __nrvoretval cannot be modified at compile time when using -inline
  • Bugzilla 15524: [REG2.069] 64bit app with anon-class crashes in contract
  • Bugzilla 15661: [REG2.067.0] Destructor called while object still alive
  • Bugzilla 15674: [REG 2.066] alias this rejected for 'out' parameter
  • Bugzilla 15681: [REG2.067] Nested user type enum not retaining value properly.
  • DMD Compiler bugs
  • Bugzilla 15664: [REG2.064] incorrect initialisation of member of an immutable struct

New in DMD 2.070.0 (Aug 18, 2016)

  • Language Changes
  • Add syntactic support to make an alias to a function literal.
  • Library Changes
  • The package std.experimental.ndslice was added. It is also available as part of the Mir library.
  • The core.sys.windows package has been greatly expanded.
  • TypeInfo.init has been renamed to TypeInfo.initializer.
  • std.json encodes string control characters.
  • Default LogLevel of FileLogger was changed to LogLevel.all.
  • Access to the internal ptr and len fields of BitArray was deprecated.
  • List of all bug fixes and enhancements in D 2.070.0.
  • Language Changes
  • Add syntactic support to make an alias to a function literal.
  • Example:
  • alias less1 = (a, b) => a < b;
  • alias less2 = (a, b) => a > b;
  • import std.algorithm : sort, equal;
  • int[] arr = [4, 1, 3, 2];
  • assert(equal(sort!less1(arr), [1, 2, 3, 4]));
  • assert(equal(sort!less2(arr), [4, 3, 2, 1]));
  • Library Changes
  • The core.sys.windows package has been greatly expanded.
  • The core.sys.windows package now contains a considerably more comprehensive set of Windows API bindings. The package has been adapted from Stewart Gordon's bindings, which were originally adapted from the MinGW project.
  • TypeInfo.init has been renamed to TypeInfo.initializer.
  • The method TypeInfo.init has been renamed to TypeInfo.initializer to resolve a name clash with the type property init.
  • An alias with the old name was added and will be deprecated over the next releases.
  • std.json encodes string control characters.
  • Instead of throwing a JSONException, toJSON encodes now the control characters of a string.
  • assert(toJSON(JSONValue("foou007fbar")) == `"foou007Fbar"`);
  • List of all bug fixes and enhancements in D 2.070.0:
  • DMD Compiler regressions
  • Bugzilla 13009: [REG2.064] inout overload conflicts with non-inout when used via alias this
  • Bugzilla 14782: Internal error: backend/cod1.c
  • Bugzilla 15369: [REG master] id.d(369): Error: Outside Unicode code space
  • Bugzilla 15430: amdMmx hangs up
  • Bugzilla 15500: default construction disabled for struct constructor with default arguments
  • Bugzilla 15550: [Reg 2.070.0-b1] compile error while testing template constraint
  • DMD Compiler bugs
  • Bugzilla 3438: struct ctor with defaulted parameters should be rejected
  • Bugzilla 3913: Bad error message with wrong enum
  • Bugzilla 4350: (mixin) mixed in template identifier is not accessible by "with" statement
  • Bugzilla 7903: [TDPL] public member variables are supposed to be illegal in synchronized classes
  • Bugzilla 14040: Doesn't use assignment in slice
  • Bugzilla 14778: ddoc doesnt generate code for enum in template struct
  • Bugzilla 15133: Error message is incomprehensible
  • Bugzilla 15141: Object.factory allows the creation of derived abstract classes
  • Bugzilla 15156: overload set in eponymous template
  • Bugzilla 15163: Parser bug on double function call
  • Bugzilla 15172: ICE(interpret.c ctfeCompile) Assertion `!fd->semantic3Errors' failed.
  • Bugzilla 15209: redundant error message on invalid field access
  • Bugzilla 15233: TypeTuple causes segfault in dmd 2.68.2
  • Bugzilla 15239: ICE (assertion failure) in ctfeInterpret() — opDispatch & inline asm
  • Bugzilla 15260: [dmd-internal] StringExp.compare may cause invalid memory access
  • Bugzilla 15261: [dmd-internal] Trivial problem in BinExp.checkOpAssignTypes
  • Bugzilla 15262: [dmd-internal] Duplicated initialization in Token struct static constructor
  • Bugzilla 15309: [dmd-internal] ScopeExp.semantic() should set its type always
  • Bugzilla 15317: Segfault in Type::kind() with DMD v2.069.0
  • Bugzilla 15340: Spurious "overlapped default initialization" errors with auto fields
  • Bugzilla 15352: template arguments matching error with delegates
  • Bugzilla 15366: Enum typed as bool behaves as bool even when cast
  • Bugzilla 15389: extern(C++) forward referencing problem
  • Bugzilla 15394: [internal] CompileExp and FileExp has same op TOKmixin
  • Bugzilla 15396: static immutable not recognized as constant within switch statement
  • Bugzilla 15403: [internal] FileExp represents ImportExpression, the AST class naming is not intuitive
  • Bugzilla 15404: [internal] DotIdExp(TOKdot) and DotExp(TOKdotexp)
  • Bugzilla 15417: Wrong parameter passing for variadic nested functions within aggregate
  • DMD Compiler enhancements
  • Bugzilla 12421: Allow simpler syntax for lambda template declarations
  • Bugzilla 15015: Win64: interop with C/C++ fails if function return value is a struct of size 8
  • Bugzilla 15186: Emit better diagnostic for C++ member lookup operators
  • Bugzilla 15464: Template parameter-dependent attributes
  • Phobos regressions
  • Bugzilla 14861: Error in stdio.d in LockingTextReader.readFront()
  • Bugzilla 15319: [REG2.069] module map is in file std/map.d which cannot be read
  • Phobos bugs
  • Bugzilla 3764: Remove Phobos workarounds for fixed bugs
  • Bugzilla 14786: The built-in exponentiation operator ^^ sometimes returns a value with the wrong sign.
  • Bugzilla 15187: dispose for allocators is broken
  • Bugzilla 15188: deallocate cause memory leaks
  • Bugzilla 15220: [REG2.065] std.getopt parses -o=value as "=value"
  • Bugzilla 15238: Heisenbug running std.random unittests
  • Bugzilla 15313: std.conv.emplace cannot initialize const objects
  • Bugzilla 15336: std.json: opIn undocumented for JSONValue
  • Bugzilla 15409: Mallocator cant be used in @nogc code
  • Bugzilla 15420: topN(Range, Range) does not respect its less predicate
  • Bugzilla 15429: [std.stdio] Broken link in documentation
  • Phobos enhancements
  • Bugzilla 12987: topN should return the top portion of the range
  • Bugzilla 15128: "IP_ADD_MEMBERSHIP" error in winsock2.d
  • Bugzilla 15146: std.file.dirEntries("") only works on Windows
  • Bugzilla 15198: evenChunks - std.range.chunks variant which slices range into N evenly-sized chunks
  • Bugzilla 15208: Eradicate all uses of "Enforcement failed" in Phobos
  • Bugzilla 15212: BigInt should implement opCast!long and opCast!int
  • Bugzilla 15320: static assert(__traits(compiles, xyz)) considered harmful in unittests
  • Bugzilla 15385: Apply Andersson91 idea to SortedRange.contains
  • Druntime bugs
  • Bugzilla 15270: use TLS to store Thread.getThis (pthread_getspecific causes heavy lock contention)
  • Bugzilla 15367: array of delegates comparison fails
  • Druntime enhancements
  • Bugzilla 15053: Runtime.cArgs not @nogc
  • Bugzilla 15268: possible deadlock for Thread.getAll/Thread.opApply w/ GC.collect
  • dlang.org bugs
  • Bugzilla 8846: Specs for Inline Assembler don't include cmpxchg16b
  • Bugzilla 15250: Grammar does not contain rules for multiple slices in an index expression
  • dlang.org enhancements
  • Bugzilla 13624: Parts of the Overview page is very out of date
  • Bugzilla 15078: GC documentation should reflect 2.067 changes
  • Tools bugs
  • Bugzilla 15173: rdmd man page incorrect/outdated
  • Bugzilla 15174: Add or undocument --tmpdir switch
  • Bugzilla 15175: rdmd --loop and --eval now complain about std.stream deprecation warnings
  • Installer bugs
  • Bugzilla 15456: sc.ini: Access denied for non-superusers on Windows 10
  • Bugzilla 15572: Windows installer leaves "sc.ini" inaccessibl