Change Log: 2.066.0
Download D 2.066.0
released August 18, 2014
Compiler Changes
- -w now warns about an unused return value of a strongly pure nothrow function call.
- -noboundscheck has been deprecated in favor of boundscheck=[on|safeonly|off].
- -vgc was added to list GC allocation code positions in the code.
- -vcolumns was added to display column numbers in error messages.
- -color was added to make console output colored.
Language Changes
- @nogc attribute was added.
- extern (C++, namespace) was added.
- Operator overloading for multi-dimensional slicing was added.
- __traits(getFunctionAttributes) was added.
- Support template parameter deduction for arguments with a narrowing conversion.
- Read-Modify-Write operations on shared variables are now deprecated.
- Support uniform construction syntax for built-in scalar types.
Library Changes
Linker Changes
List of all bug fixes and enhancements in D 2.066.
Compiler Changes
- -w now warns about an unused return value of a strongly pure nothrow function call:
A discarded return value from a strongly pure nothrow function call now generates a warning.
int foo() pure nothrow { return 1; } void main() { foo(); // the result of foo() is unused }
With the -w switch, the compiler will complain:Warning: calling foo without side effects discards return value of type int, prepend a cast(void) if intentional
- -noboundscheck has been deprecated in favor of boundscheck=[on|safeonly|off]:
Confusion over what the -noboundscheck command line option did led to the creation of the new option -boundscheck=[on|safeonly|off] which aims to be more clear while enabling more flexibility than was present before.
-boundscheck=
- on: Bounds checks are enabled for all code. This is the default.
- safeonly: Bounds checks are enabled only in @safe code. This is the default for -release builds.
- off: Bounds checks are disabled completely (even in @safe code). This option should be used with caution and as a last resort to improve performance. Confirm turning off @safe bounds checks is worthwhile by benchmarking.
Use -boundscheck=off to replace instances of -noboundscheck.
Prior to this there was no way to enable bounds checking for -release builds nor any way of turning off non-@safe bounds checking without pulling in everything else -release does.
- -vgc was added to list GC allocation code positions in the code:
Prints all GC-allocation points. Analysis will follow the semantics of the new @nogc attribute.
- -vcolumns was added to display column numbers in error messages:
Diagnostic messages will print the character number from each line head.
int x = missing_name;
Without -vcolumns:test.d(1): Error: undefined identifier missing_name
With -vcolumns:test.d(1,9): Error: undefined identifier missing_name
- -color was added to make console output colored:
Errors, deprecation, and warning messages will be colored.
Language Changes
- @nogc attribute was added:
@nogc attribute disallows GC-heap allocation.
class C {} void foo() @nogc { auto c = new C(); // GC-allocation is disallowed }
- extern (C++, namespace) was added:
To represent a C++ namespace, extern (C++) now takes optional dot-chained identifiers.
extern (C++, a.b.c) int foo();
is equivalent with:namespace a { namespace b { namespace c { int foo(); } } }
- Operator overloading for multi-dimensional slicing was added:
Documentation is here.
Example code:
struct MyContainer(E) { E[][] payload; this(size_t w, size_t h) { payload = new E[][](h, w); } size_t opDollar(size_t dim)() { return payload[dim].length; } auto opSlice(size_t dim)(size_t lwr, size_t upr) { import std.typecons; return tuple(lwr, upr); } void opIndexAssign(A...)(E val, A indices) { assert(A.length == payload.length); foreach (dim, x; indices) { static if (is(typeof(x) : size_t)) { // this[..., x, ...] payload[dim][x] = val; } else { // this[..., x[0] .. x[1], ...] payload[dim][x[0] .. x[1]] = val; } } } } void main() { import std.stdio; auto c = MyContainer!int(4, 3); writefln("[%([%(%d%| %)]%|\n %)]", c.payload); // [[0 0 0 0] // [0 0 0 0] // [0 0 0 0]] c[1 .. 3, 2, 0 .. $] = 1; /* Rewritten as: c.opIndexAssign(c.opSlice!0(1, 3), 2, c.opSlice!2(0, c.opDollar!2())); */ writefln("[%([%(%d%| %)]%|\n %)]", c.payload); // [[0 1 1 0] // [0 0 1 0] // [1 1 1 1]] }
- __traits(getFunctionAttributes) was added:
This can take one argument, either a function symbol, function type, function pointer type, or delegate type. Examples:
void foo() pure nothrow @safe; static assert([__traits(getFunctionAttributes, foo)] == ["pure", "nothrow", "@safe"]); ref int bar(int) @property @trusted; static assert([__traits(getFunctionAttributes, typeof(&bar))] == ["@property", "ref", "@trusted"]);
- Support template parameter deduction for arguments with a narrowing conversion:
Implicit Function Template Instantiation will now consider a narrowing conversion of function arguments when deducing the template instance parameter types.
void foo(T)(T[] arr, T elem) { ... } void main() { short[] a; foo(a, 1); }
In 2.065 and earlier, calling foo(a, 1) was not allowed. From 2.066, T is deduced as short by considering a narrowing conversion of the second function argument 1 from int to short. - Read-Modify-Write operations on shared variables are now deprecated:
Examples:
shared int global; void main() { global++; // deprecated global *= 2; // deprecated }
Instead you should use atomicOp from core.atomic:shared int global; void main() { import core.atomic; atomicOp!"+="(global, 1); atomicOp!"*="(global, 2); }
- Support uniform construction syntax for built-in scalar types:
Examples:
short n1 = 1; auto n2 = short(1); // equivalent with n1, typeof(n2) is short auto p1 = new long(1); // typeof(p1) is long* auto p2 = new immutable double(3.14); // typeof(p2) is immutable(double)*
The constructor argument should be implicitly convertible to the constructed type.
auto n1 = short(32767); // OK auto n2 = short(32768); // Not allowed, out of bounds of signed short -32768 to 32767
Library Changes
- Duration.get and its wrappers have been deprecated in favor of the new Duration.split:
Duration.get and its wrappers, Duration.weeks, Duration.days, Duration.hours, and Duration.seconds, as well as Duration.fracSec (which served a similar purpose as Duration.get for the fractional second units) have proven to be too easily confused with Duration.total, causing subtle bugs. So, they have been deprecated. In their place, Duration.split has been added - and it's not only very useful, but it does a great job of showing off what D can do. Whereas Duration.get split out all of the units of a Duration and then returned only one of them, Duration.split splits out a Duration into the units that it's told to (which could be one unit or all of them) and returns all of them. It has two overloads, both which take template arguments that indicate which of the units are to be split out. The difference is in how the result is returned. As with most of the templates in core.time and std.datetime which take strings to represent units, Duration.split accepts "weeks", "days", "hours", "minutes", "seconds", "msecs", "usecs", "hnsecs", and "nsecs". The first overload returns the split out units as out parameters.
auto d = weeks(5) + days(4) + hours(17) + seconds(2) + hnsecs(12_007); short days; long seconds; int msecs; d.split!("days", "seconds", "msecs")(days, seconds, msecs); assert(days == 39); assert(seconds == 61_202); assert(msecs == 1);
The arguments can be any integral type (though no protection is given against integer overflow, so unless it's known that the values are going to be small, it's unwise to use a small integral type for any of the arguments). The second overload returns a struct with the unit names as its fields. Only the requested units are present as fields. All of the struct's fields are longs.auto d = weeks(5) + days(4) + hours(17) + seconds(2) + hnsecs(12_007); auto result = d.split!("days", "seconds", "msecs")(); assert(result.days == 39); assert(result.seconds == 61_202); assert(result.msecs == 1);
Or if no units are given to the second overload, then it will return a struct with all of the units save for nsecs (since nsecs would always be 0 when hnsecs is one of the units as Duration has hnsec precision).auto d = weeks(5) + days(4) + hours(17) + seconds(2) + hnsecs(12_007); auto result = d.split(); assert(result.weeks == 5); assert(result.days == 4); assert(result.hours == 17); assert(result.minutes == 0); assert(result.seconds == 2); assert(result.msecs == 1); assert(result.usecs == 200); assert(result.hnsecs == 7);
Calling Duration.get or its wrappers for each of the units would be equivalent to that example, only less efficient when more than one unit is requested, as the calculations would have to be done more than once. The exception is Duration.fracSec which would have given the total of the fractional seconds as the requested units rather than splitting them out.// Equivalent to previous example auto d = weeks(5) + days(4) + hours(17) + seconds(2) + hnsecs(12_007); assert(d.weeks == 5); assert(d.days == 4); assert(d.hours == 17); assert(d.minutes == 0); assert(d.seconds == 2); assert(d.fracSec.msecs == 1); assert(d.fracSec.usecs == 1200); assert(d.fracSec.hnsecs == 12_007);
It is hoped that Duration.split will be less confusing and thus result in fewer bugs, but it's definitely the case that it's more powerful. It's also a great example of D's metaprogramming capabilities given how it splits out only the requested units and even is able to return a struct with fields with the same names as the requested units. This on top of being able to handle a variety of integral types as arguments. And its implemenation isn't even very complicated. - Some built-in type properties have been replaced with library functions:
Built-in array properties dup and idup were replaced with (module-scoped) free functions in the object module, thanks to D's support of Uniform Function Call Syntax.
Built-in associative array properties rehash, dup, byKey, byValue, keys, values, and get were also replaced with free functions in the object module.
- Associative array keys now require equality rather than ordering:
Until 2.065, opCmp was used to customize the comparison of AA struct keys.
void main() { int[MyKey] aa; } struct MyKey { int x; int y; // want to be ignored for AA key comparison int opCmp(ref const MyKey rhs) const { if (this.x == rhs.x) return 0; // defined order was merely unused for AA keys. return this.x > rhs.x ? 1 : -1; } }
From 2.066, the AA implementation has been changed to use the equality operator (==) for the key comparison. So the MyKey struct should be modified to:struct MyKey { int x; int y; // want to be ignored for AA key comparison int opEquals(ref const MyKey rhs) const { return this.x == rhs.x; } }
List of all bug fixes and enhancements in D 2.066:
DMD Compiler regressions
- Bugzilla 5105: Member function template cannot be synchronized
- Bugzilla 9449: Static arrays of 128bit types segfault on initialization. Incorrect calling of memset128ii.
- Bugzilla 11777: [ICE] dmd memory corruption as Scope::pop frees fieldinit used also in enclosing
- Bugzilla 12174: Problems caused by enum predicate with std.algorithm.sum
- Bugzilla 12179: [ICE](e2ir.c 1861) with array operation
- Bugzilla 12242: conflict error with public imports
- Bugzilla 12243: [REG 2.065.0] "ICE: cannot append 'char' to 'string'" with -inline
- Bugzilla 12250: [REG 2.065.0][ICE](e2ir.c 2077) with inout T[] and array operation
- Bugzilla 12255: Regression: opCmp requirement for AAs breaks code
- Bugzilla 12262: [REG2.065] A specialized parameter alias a : B!A should not match to the non-eponymous instantiated variable
- Bugzilla 12264: [REG2.066a] A specialized alias parameter conflicts with the unspecialized one.
- Bugzilla 12266: Regression (2.065): Header generation produces uncompilable header
- Bugzilla 12296: [REG2.066a] const compatible AA pointer conversion is wrongly rejected in CTFE
- Bugzilla 12312: Regression (2.064): Diagnostic for void static arrays has gone bad
- Bugzilla 12316: GIT HEAD: AA.get broken for Object VAL types
- Bugzilla 12376: ICE with constarainted template instantiation with error gagging
- Bugzilla 12382: opDollar can't be used at CT
- Bugzilla 12390: [REG2.066a] "has no effect in expression" diagnostic regression
- Bugzilla 12396: Regression: major breakage from new import rules
- Bugzilla 12399: Static and selective import acts like a normal import
- Bugzilla 12400: Misleading/useless diagnostic on bad fully-qualified symbol name
- Bugzilla 12403: [AA] Associative array get function rejects some cases
- Bugzilla 12405: Named imports act like regular imports
- Bugzilla 12413: Infinite recursion of Package::search
- Bugzilla 12467: Regression (2.066 git-head): char[] is implicitly convertible to string
- Bugzilla 12485: [REG2.065] DMD crashes when recursive template expansion
- Bugzilla 12497: [REG2.064] ICE on string mixin with non-string operand
- Bugzilla 12501: Assertion global.gaggedErrors || global.errors failed.
- Bugzilla 12509: Compiler performance highly depends on declared array size - for struct with long static array of structs
- Bugzilla 12554: [ICE](struct.c line 898) with failed delegate purity
- Bugzilla 12574: [ICE](statement.c, line 713) with reduce with wrong tuple arity
- Bugzilla 12580: [REG2.066a] dup() won't accept void[]
- Bugzilla 12581: [ICE](statement.c, line 713) with invalid assignment + alias this
- Bugzilla 12585: Regression(2.064): Segfault on lazy/catch/opIndex
- Bugzilla 12591: [DMD|REG] std/typecons.d(440): Error: tuple has no effect in expression
- Bugzilla 12593: [REG2.065] AA cannot have struct as key
- Bugzilla 12619: Invalid warning for unused return value of debug memcpy
- Bugzilla 12649: "discards return value" warning will cause ICE on function pointer call
- Bugzilla 12650: Invalid codegen on taking lvalue of instance field initializ
- Bugzilla 12689: [CTFE] assigning via pointer from 'in' expression doesn't work
- Bugzilla 12703: GIT HEAD : final class rejects members initialization
- Bugzilla 12719: struct.c:705: virtual void StructDeclaration::semantic(Scope*): Assertion parent && parent == sc->parent failed.
- Bugzilla 12727: [REG2.066a] DMD hangs up on recursive alias declaration
- Bugzilla 12728: [REG2.066a] IFTI should consider instantiated types that has template parameters with default args
- Bugzilla 12760: Initializing an object that has "this(Args) inout" causes "discards return value" warning
- Bugzilla 12769: ICE returning array
- Bugzilla 12774: REG(2.066) ICE(optimize.c) Newing struct containing union causes segfault
- Bugzilla 12824: REG(2.066) ICE(statement.c) Segfault with label and static if
- Bugzilla 12860: REG 2.065: typeid(_error_) symbols leaked to backend
- Bugzilla 12864: can no longer use toLower in string switch case
- Bugzilla 12880: [REG2.066a] Wrong IFTI for string.init argument
- Bugzilla 12896: ld.gold complains about bad relocations when building libphobos2.so
- Bugzilla 12900: REG 2.065: Wrong code in IfStatement condition Expression
- Bugzilla 12904: Wrong-code for some slice to slice assignments when using opDollar
- Bugzilla 12906: [CTFE] Static array of structs causes postblit call
- Bugzilla 12910: [AA] rehash is incorrectly inferred as strongly pure for some associative arrays
- Bugzilla 12924: deprecated("foo"); and deprecated; should not compile
- Bugzilla 12956: [ICE] Assertion in expression.c:432
- Bugzilla 12981: Can't refer to 'outer' from mixin template
- Bugzilla 12989: Wrong x86_64 code for delegate return when compiled as lib (-lib)
- Bugzilla 13002: DMD 2.066 prep: 32-bit build fails on Ubuntu via create_dmd_release
- Bugzilla 13008: [REG2.066a] 'deprecated' is not allowed to refer another deprecated when it is a function declaration
- Bugzilla 13021: Constructing union with floating type and then accessing its field in one expression causes ICE
- Bugzilla 13024: [ICE](expression.c line 1172) with implicit supertype conversion of different enums in array literal
- Bugzilla 13025: Tools repository does not build on Ubuntu
- Bugzilla 13026: object.get cannot be called with [] as "defaultValue" argument
- Bugzilla 13027: Assertion ex->op == TOKblit || ex->op == TOKconstruct failed.
- Bugzilla 13030: DMD assertion fails at mtype.c:697 if delegate has an argument name
- Bugzilla 13034: [Reg] core.stdc.stdio - deprecation warning with dmd -inline
- Bugzilla 13053: Wrong warning on implicitly generated __xtoHash
- Bugzilla 13056: [2.066.0-b1] Regression: Error: template std.path.baseName cannot deduce function from argument types !()(DirEntry)
- Bugzilla 13071: [ICE] dmd 2.066.0-b1 assertion in nogc.c:73
- Bugzilla 13077: [dmd 2.066-b2] std.range.array with shared InputRangeObject
- Bugzilla 13081: ICE with alias this and opSlice
- Bugzilla 13087: Error: no property 'xyz' for type 'Vec!4'
- Bugzilla 13102: Cannot parse 184467440737095516153.6L
- Bugzilla 13113: cannot build druntime's gc.d with -debug=INVARIANT, bad @nogc inference?
- Bugzilla 13114: old opCmp requirement for AA keys should be detected for classes
- Bugzilla 13117: Executable size of hello world explodes from 472K to 2.7M
- Bugzilla 13127: Cannot deduce function with int[][] argument and "in" parameter
- Bugzilla 13132: ICE on interface AA key
- Bugzilla 13141: array cast from string[] to immutable(char[][]) is not supported at compile time
- Bugzilla 13152: [REG2.064.2] Compiler high cpu usage and never ends
- Bugzilla 13154: Incorrect init of static float array when sliced
- Bugzilla 13158: "void has no value" in std.variant.Algebraic (affects D:YAML)
- Bugzilla 13178: Duplicate symbol of compiler generated symbols
- Bugzilla 13179: AA key type TagIndex now requires equality rather than comparison
- Bugzilla 13180: [REG2.066a] AA get returns const(char[]) instead of string
- Bugzilla 13187: Function wrongly deduced as pure
- Bugzilla 13193: Extreme slowdown in compilation time of OpenSSL in Tango for optimized build
- Bugzilla 13201: Wrong "Warning: statement is not reachable" error with -w
- Bugzilla 13208: [ICE](e2ir.c 2077) with array operation
- Bugzilla 13218: [ICE] s2ir.c 142: Must fully qualify call to ParameterTypeTuple
- Bugzilla 13219: segmentation fault in FuncDeclaration::getLevel
- Bugzilla 13220: [ICE] 'global.gaggedErrors || global.errors' on line 750 in file 'statement.c'
- Bugzilla 13221: [ICE] '0' on line 318 in file 'interpret.c'
- Bugzilla 13223: Cannot deduce argument for array template parameters
- Bugzilla 13232: dmd compile times increased by 10-20%
- Bugzilla 13237: Wrong code with "-inline -O"
- Bugzilla 13245: segfault when instantiating template with non-compiling function literal
- Bugzilla 13252: ParameterDefaultValueTuple affects other instantiations
- Bugzilla 13259: [ICE] 'v.result' on line 191 in file 'todt.c'
- Bugzilla 13284: [dmd 2.066-rc2] Cannot match shared classes at receive
DMD Compiler bugs
- Bugzilla 648: DDoc: unable to document mixin statement
- Bugzilla 846: Error 42: Symbol Undefined "<mangle_of_class_template>__arrayZ"
- Bugzilla 1659: template alias parameters are chosen over all but exact matches.
- Bugzilla 2427: Function call in struct initializer fails to compile
- Bugzilla 2438: Cannot get types of delegate properties
- Bugzilla 2456: "cannot put catch statement inside finally block", missing line number
- Bugzilla 2711: -H produces bad headers files if function defintion is templated and have auto return value
- Bugzilla 2791: port.h and port.c are missing licenses
- Bugzilla 3032: No stack allocation for "scope c = new class Object {};"
- Bugzilla 3109: [meta] Template ordering
- Bugzilla 3490: DMD Never Inlines Functions that Could Throw
- Bugzilla 3672: [tdpl] read-modify-write (rmw) operators must be disabled for shared
- Bugzilla 4225: mangle.c:81: char* mangle(Declaration*): Assertion fd && fd->inferRetType failed.
- Bugzilla 4423: [tdpl] enums of struct types
- Bugzilla 4757: A forward reference error with return of inner defined struct
- Bugzilla 4791: Assigning a static array to itself should be allowed
- Bugzilla 5030: Operators don't work with AssociativeArray!(T1,T2)
- Bugzilla 5095: Error for typesafe variadic functions for structs
- Bugzilla 5498: wrong common type deduction for array of classes
- Bugzilla 5635: Code inside 'foreach' using opApply cannot modify variable out of its scope in a template function.
- Bugzilla 5810: Struct postincrement generates 'no effect' error if used on struct member
- Bugzilla 5835: TypeInfo_Array.getHash creates raw data hash instead using array element hash function
- Bugzilla 5854: Built-in array sort doesn't sort SysTime correctly
- Bugzilla 6140: Wrong ambiguity error with overloading
- Bugzilla 6359: Pure/@safe-inference should not be affected by __traits(compiles)
- Bugzilla 6430: Overloaded auto-return functions each with a nested aggregate of the same name are conflated
- Bugzilla 6677: static this attributes position
- Bugzilla 6889: "finally" mentioned in a compilation error, instead of "scope(exit)" or "scope(success)"
- Bugzilla 7019: implicit constructors are inconsistently allowed
- Bugzilla 7209: Stack overflow on explicitly typed enum circular dependency
- Bugzilla 7469: template mangling depends on instantiation order
- Bugzilla 7477: Enum structs without specified values
- Bugzilla 7870: Shared library support for Linux is missing
- Bugzilla 7887: [CTFE] can't assign to returned reference
- Bugzilla 8100: [ICE] with templated subclassing
- Bugzilla 8236: Wrong error message in creating struct from vector operation
- Bugzilla 8254: nested struct cannot access the types of the parent's fields
- Bugzilla 8269: The 'with statement' does not observe temporary object lifetime
- Bugzilla 8296: @disable this propagates through reference
- Bugzilla 8309: ICE in typeMerge on 'void main(){auto x = [()=>1.0, ()=>1];}'
- Bugzilla 8370: invalid deprecation error with -release -inline -noboundscheck
- Bugzilla 8373: IFTI fails on overloading of function vs non function template
- Bugzilla 8392: DMD sometime fail when using a non static function template within a function template
- Bugzilla 8499: ICE on undefined identifier
- Bugzilla 8596: Indeterministic assertion failure in rehash
- Bugzilla 8704: Invalid nested struct constructions should be detected
- Bugzilla 8738: Struct literal breaks assigment ordering
- Bugzilla 9245: [CTFE] postblit not called on static array initialization
- Bugzilla 9596: Ambiguous match is incorrectly hidden by additional lesser match
- Bugzilla 9708: inout breaks zero parameter IFTI
- Bugzilla 9931: Mac OS X ABI not followed when returning structs for extern (C)
- Bugzilla 10054: x86_64 valgrind reports unrecognised instruction (DMD 2.062)
- Bugzilla 10071: 'real' alignment wrong on several platforms
- Bugzilla 10112: Mangle, which defined by pragma(mangle) should not be mangled by backend.
- Bugzilla 10133: ICE for templated static conditional lambda
- Bugzilla 10169: duplicate error message: member is not accessible
- Bugzilla 10219: Implicit conversion between delegates returning a class and an interface
- Bugzilla 10366: Ddoc: Symbols in template classes don't get fully qualified anchors
- Bugzilla 10629: [ICE](dt.c 106) with void array
- Bugzilla 10658: Cannot merge template overload set by using alias declaration
- Bugzilla 10703: Front-end code removal "optimisation" with try/catch blocks produces wrong codegen
- Bugzilla 10908: Links in d.chm file are broken
- Bugzilla 10928: Fails to create closures that reference structs with dtor
- Bugzilla 10985: Compiler doesn't attempt to inline non-templated functions from libraries (even having the full source)
- Bugzilla 11066: Spurious warning 'statement is not reachable' with -profile
- Bugzilla 11177: parameterized enum can't be typed
- Bugzilla 11181: Missing compile-time error for wrong array literal
- Bugzilla 11201: ICE: (symbol.c) -inline stops compilation
- Bugzilla 11333: ICE: Cannot subtype 0-tuple with "alias this"
- Bugzilla 11421: Dynamic array of associative array literal type inference
- Bugzilla 11448: dup calls @system impure code from @safe pure function
- Bugzilla 11453: Compiling packages has a dependency on order of modules passed to the compiler.
- Bugzilla 11511: DDoc - C variadic parameters cannot be properly documented
- Bugzilla 11535: CTFE ICE on reassigning a static array initialized with block assignment
- Bugzilla 11542: scope(failure) messes up nothrow checking
- Bugzilla 11543: multiple definition of std.regex with shared library
- Bugzilla 11545: Aggregate function literal member should not have access to enclosing scope
- Bugzilla 11550: [ICE] Checking if std.conv.to compiles with an array of non-builtins results in an ICE in s2ir.c.
- Bugzilla 11622: Assertion failure in totym(), glue.c, line 1288
- Bugzilla 11672: default initialization of static array of structs with a single value fails
- Bugzilla 11677: user defined attributes must be first
- Bugzilla 11678: user defined attributes cannot appear as postfixes
- Bugzilla 11679: user defined attributes not allowed for local auto declarations
- Bugzilla 11680: user defined attributes for type inference
- Bugzilla 11735: pragma(msg, ...) fails to print wstring, dstring
- Bugzilla 11740: [64-bit] Struct with constructor incorrectly passed on stack to extern(C++) function
- Bugzilla 11752: Make issues.dlang.org work
- Bugzilla 11774: Lambda argument to templated function changes its signature forever
- Bugzilla 11783: Make std.datetime unittesting faster
- Bugzilla 11788: [x86] Valgrind unhandled instruction bytes: 0xC8 0x8 0x0 0x0
- Bugzilla 11832: std.datetime: ddoc warnings
- Bugzilla 11872: Support for overloaded template functions in with block
- Bugzilla 11885: ICE(s2ir.c 359) with continuing a labeled ByLine (range struct w/ dtor) loop
- Bugzilla 11889: std.container.Array.opIndex returns by value, resulting in perfect storm
- Bugzilla 11901: real win64
- Bugzilla 11906: Compiler assertion when comparing function pointers
- Bugzilla 12009: local import and "unable to resolve forward reference" error
- Bugzilla 12011: "Internal Compiler Error: Null field" on CTFE method call on .init
- Bugzilla 12042: "CTFE internal error: Dotvar assignment" with template method and "with"
- Bugzilla 12057: [ICE], backend/cg87.c 925
- Bugzilla 12063: No line number error on uninitialized enum member if base type is not incrementable
- Bugzilla 12077: Instantiated type does not match to the specialized alias parameter
- Bugzilla 12078: forward reference issue with is() and curiously recurring template pattern
- Bugzilla 12110: [CTFE] Error: CTFE internal error: Dotvar assignment
- Bugzilla 12138: Label statement creates an unexpected scope block
- Bugzilla 12143: Base class is forward referenced
- Bugzilla 12164: Function returning ptrdiff_t.min in 64-bit returning 0 when -O is set.
- Bugzilla 12212: Static array assignment makes slice implicitly
- Bugzilla 12231: ICE on the class declaration within lambda inside template constraint
- Bugzilla 12235: ICE on printing mangled name of forward reference lambda by pragma(msg)
- Bugzilla 12236: Inconsistent mangleof result
- Bugzilla 12237: Inconsistent behavior of the instantiating enclosing template function
- Bugzilla 12263: Specialized template parameter incorrectly fail to match to the same name template.
- Bugzilla 12278: __traits(classInstanceSize) returns wrong value if used before class is declared
- Bugzilla 12287: infinite loop on std.traits.moduleName on templated struct member
- Bugzilla 12292: Template specialization ": string" passes for static arrays of other types
- Bugzilla 12302: Assertion failure in expression.c (line 432) when using template isCallable
- Bugzilla 12306: Struct Enums cannot be read at compile time
- Bugzilla 12307: Contextfull error diagnostic about AA key type
- Bugzilla 12313: Unneeded stack temporaries created by tuple foreach
- Bugzilla 12334: Cannot access frame pointer of nested class from inside lambda
- Bugzilla 12350: Assigning __traits(getAttributes) to variable crashes DMD
- Bugzilla 12362: dmd hangs when attempting to use undefined enum
- Bugzilla 12378: Compiler accepts any syntactically-valid code inside double-nested map predicate
- Bugzilla 12392: No attribute inference if first template instantiation uses alias
- Bugzilla 12397: CTFE ICE CompiledCtfeFunction::walkAllVars with 2.065
- Bugzilla 12432: Diagnostic on argument count mismatch for ranges and opApply should improve
- Bugzilla 12436: Opaque struct parameter type should not be allowed
- Bugzilla 12460: Crash with goto and static if
- Bugzilla 12476: Assert error in interpret.c:3204
- Bugzilla 12480: static assert should print out the string representation of a value it can interpret
- Bugzilla 12498: ICE: while(string) causes compiler to crash during CTFE
- Bugzilla 12499: tuple/TypeTuple 1-Arg initialization fails during CTFE.
- Bugzilla 12503: Bad optimization with scope(success) and return statement
- Bugzilla 12506: Wrongly private lambda to define global immutable array
- Bugzilla 12508: Codegen bug for interface type covariant return with lambda type inference
- Bugzilla 12523: wrong foreach argument type with ref and inout
- Bugzilla 12524: wrong type with inout const arg and inout return
- Bugzilla 12528: [CTFE] cannot append elements from one inout array to another inout array
- Bugzilla 12534: ICE on using expression tuple as type tuple
- Bugzilla 12539: Compiler crash when looking up a nonexistent tuple element in an associative array
- Bugzilla 12542: No function attribute inference for recursive functions
- Bugzilla 12543: Class.sizeof requires the Class' definition
- Bugzilla 12555: Incorrect error ungagging for speculatively instantiated class
- Bugzilla 12571: __traits(parent) should work for typed manifest constant in initializer
- Bugzilla 12577: ice on compile time struct field access
- Bugzilla 12586: redundant error messages for tuple index exceeding
- Bugzilla 12602: [CTFE] Changes to an array slice wrapped in a struct do not propogate to the original
- Bugzilla 12604: No "mismatched array lengths" error with narrowing conversions
- Bugzilla 12622: Purity, @safe not checked for pointers to functions
- Bugzilla 12630: @nogc should recognize compile-time evaluation context
- Bugzilla 12640: Error inside a switch statement causes a spurious switch case fallthrough warning
- Bugzilla 12642: Avoid some heap allocation cases for fixed-size arrays
- Bugzilla 12651: TemplateArgsOf accepts nonsensical arguments
- Bugzilla 12660: Wrong non-@nogc function invariant error
- Bugzilla 12673: ICE with static assert and __traits(compiles) with non-existent symbol
- Bugzilla 12677: Assertion failure: 'isCtfeValueValid(newval)' on line 6579 in file 'interpret.c'
- Bugzilla 12678: Field constness missing in diagnostics for multiple field initialization error
- Bugzilla 12686: Struct invariant prevents NRVO
- Bugzilla 12688: Strange error if function call is in parentheses
- Bugzilla 12704: typeof function literal incorrectly infers attributes
- Bugzilla 12705: @system is missing when using getFunctionAttributes on a typeof(function)
- Bugzilla 12706: ddoc: __dollar should not appear in the documentation
- Bugzilla 12725: IFTI should consider instantiated types with dependent template parameters
- Bugzilla 12737: static constructor requires call of super constructor
- Bugzilla 12739: Foreach delegate to opApply does not have infered nothrow
- Bugzilla 12745: [Ddoc] Underscore is removed from numbers in document comments
- Bugzilla 12746: Wrong overload access within manually aliased eponymous function template
- Bugzilla 12749: Constructor-local function allows multiple mutation of immutable member
- Bugzilla 12756: Cannot build dmd on windows because of longdouble
- Bugzilla 12777: const/immutable member function violating its const-ness - confusing error message
- Bugzilla 12778: Aliasing opBinaryRight to opBinary works only in certain cases
- Bugzilla 12788: -di doesn't warn about implicit conversion from char[] to char*
- Bugzilla 12809: More strict nothrow check for try-finally statement
- Bugzilla 12820: DMD can inline calls to functions that use alloca, allocating the memory in the caller function instead.
- Bugzilla 12825: Invalid "duplicated union initialization" error with initialized field in extern(C++) class
- Bugzilla 12826: Win64: bad code for x ~= x;
- Bugzilla 12833: switch statement does not work properly when -inline used
- Bugzilla 12836: CTFE ICE CompiledCtfeFunction::walkAllVars
- Bugzilla 12838: Dmd show ICEs when using Tuple and wrong type
- Bugzilla 12841: ICE on taking function address
- Bugzilla 12849: pmovmskb instruction cannot store to 64-bit registers
- Bugzilla 12850: ICE when passing associative array to template
- Bugzilla 12851: ICE when passing const static array to template
- Bugzilla 12852: 64 bit wrong code generated
- Bugzilla 12855: Shadow register assignments for spilling can conflict
- Bugzilla 12873: Valgrind unhandled instruction bytes 0x48 0xDB (redundant REX_W prefix on x87 load)
- Bugzilla 12874: Wrong file name in range violation error
- Bugzilla 12876: Implicit cast of array slice to fixed-size array for templates too
- Bugzilla 12901: in/out contracts on struct constructor must require function body
- Bugzilla 12902: [ICE] Assertion failure '!ae->lengthVar' in 'expression.c' when using opDollar
- Bugzilla 12907: [ICE] Assertion failure '0' in 'mangle.c' when using auto return type with lambda with dereferanced function call
- Bugzilla 12909: [AA] Function is incorrectly inferred as strongly pure for associative array with key of non-mutable array or pointer as argument
- Bugzilla 12928: Bounds check dropped for array[length]
- Bugzilla 12933: [D1] ICE with default __FILE__ and __LINE__
- Bugzilla 12934: Strange newly implemented VRP behavior on foreach
- Bugzilla 12937: ICE with void static array initializing
- Bugzilla 12938: Error message mistake in out parameter with @disable this
- Bugzilla 12953: Wrong alignment number in error messages
- Bugzilla 12962: osver.mak should use isainfo on Solaris to determine model
- Bugzilla 12965: DMD sets ELFOSABI to ELFOSABI_LINUX on all systems
- Bugzilla 12968: DMD inline asm outputs wrong XCHG instruction
- Bugzilla 12970: Enclosing @system attribute is precedence than postfix @safe
- Bugzilla 13003: Lack of read-modify-write operation check on shared object field
- Bugzilla 13011: inout delegate parameter cannot receive exactly same type argument
- Bugzilla 13023: optimizer produces wrong code for comparision and division of ulong
- Bugzilla 13043: Redundant linking to TypeInfo in non-root module
- Bugzilla 13044: Assignment of structs with const members
- Bugzilla 13045: TypeInfo.getHash should return consistent result with object equality by default
- Bugzilla 13049: in template arguments the compiler fails to parse scope for function pointers arguments
- Bugzilla 13050: pragma mangle breaks homonym template aliasing
- Bugzilla 13082: Spurious error message with failed call to class ctor
- Bugzilla 13088: Compiler segfaults with trivial case code.
- Bugzilla 13089: Spurious 'is not nothrow' error on static array initialization
- Bugzilla 13109: -run and -lib dmd flags conflict
- Bugzilla 13116: Should not be able to return ref to 'this'
- Bugzilla 13131: [2.066-b3] dmd: glue.c:1492: unsigned int totym(Type*): Assertion 0 failed.
- Bugzilla 13135: IFTI fails on partially qualified argument in some cases
- Bugzilla 13142: Enums on different classes confuse the compiler
- Bugzilla 13161: Wrong offset of extern(C++) class member
- Bugzilla 13175: [D1] ICE on conflicting overloads in presense of default __FILE__/__LINE__
- Bugzilla 13182: extern(C++) classes cause crash when allocated on the stack with scope
- Bugzilla 13190: Optimizer breaks comparison with zero
- Bugzilla 13194: ICE when static class members initialized to void
- Bugzilla 13195: Delete calls destructor but doesn't free
- Bugzilla 13204: recursive alias declaration
- Bugzilla 13212: Trailing Windows line endings not stripped from .ddoc macros
- Bugzilla 13217: nothrow, template function and delegate: compilation error
- Bugzilla 13225: [ICE] Access violation on invalid mixin template instantiation
- Bugzilla 13226: Symbol is not accessible when using traits or mixin
- Bugzilla 13230: std.variant.Variant Uses Deprecated .min Property in opArithmetic When T is a Floating Point Type
- Bugzilla 13235: Wrong code on mutually recursive tuple type
- Bugzilla 13260: [D1] ICE accessing non-existent aggregate member
- Bugzilla 13273: ddoc can't handle \r in unittests and ESCAPES properly
- Bugzilla 13275: Wrong di header generation on if and foreach statements
DMD Compiler enhancements
- Bugzilla 1553: foreach_reverse is allowed for delegates
- Bugzilla 1673: Implement the isTemplate trait
- Bugzilla 1952: Support a unit test handler
- Bugzilla 2025: Inconsistent rules for instantiating templates with a tuple parameter
- Bugzilla 2548: Array ops that return value to a new array should work.
- Bugzilla 3882: Unused result of pure functions
- Bugzilla 5070: Heap-allocated closures listing
- Bugzilla 6798: Integrate overloadings for multidimentional indexing and slicing
- Bugzilla 7747: Diagnostic should be informative for an inferred return type in a recursive call
- Bugzilla 7961: Add support for C++ namespaces
- Bugzilla 8101: Display candidate function overloads when function call fails
- Bugzilla 9112: Uniform construction for built-in types
- Bugzilla 9570: Wrong foreach index implicit conversion error
- Bugzilla 9616: SortedRange should support all range kinds
- Bugzilla 10018: Value range propagation for immutable variables
- Bugzilla 11345: Optimize array literal to static array assignment to not allocate on GC heap
- Bugzilla 11620: dmd json output should output enum values
- Bugzilla 11819: Implement better diagnostics for unrecognized traits
- Bugzilla 12232: The result of pointer arithmetic on unique pointers should be a unique pointer
- Bugzilla 12273: 'dmd -color' flag to colorize error/warning messages
- Bugzilla 12280: Redundant "template instance ... error instantiating" messages
- Bugzilla 12290: IFTI should consider implicit conversions of the literal arguments
- Bugzilla 12310: [CTFE] Support heap allocation for built-in scalar types
- Bugzilla 12352: Consistently stop encoding return type of parent functions
- Bugzilla 12550: Deprecate -noboundscheck and replace with more useful -boundscheck= option
- Bugzilla 12598: Poor diagnostic with local import hijacking
- Bugzilla 12606: Mismatch of known array length during dynamic => static array assignment should emit better diagnostics
- Bugzilla 12641: D1: __FILE__ and __LINE__ default argument behaviour
- Bugzilla 12653: Add the getFunctionAttributes trait
- Bugzilla 12681: Rewrite rule prevents unique detection
- Bugzilla 12798: constant folding should optimize subsequent concatenations
- Bugzilla 12802: Allow optional 'StorageClasses' for new alias syntax
- Bugzilla 12821: Missed redundant storage class / protection errors.
- Bugzilla 12932: Support @nogc for immediately iterated array literal
- Bugzilla 12967: Prefix method 'this' qualifiers should be disallowed in DeclDefs scope
- Bugzilla 13001: Support VRP for ternary operator (CondExp)
- Bugzilla 13138: add peek/poke as compiler intrinsics
- Bugzilla 13277: The base class in the JSON output is always unqualified
- Bugzilla 13281: Print type suffix of real/complex literals in pragma(msg) and error diagnostic
Phobos regressions
- Bugzilla 12332: std.json API broken without notice
- Bugzilla 12375: Writeln of a char plus a fixed size array of chars
- Bugzilla 12394: Regression: std.regex unittests take agonizingly long to run - like hours on OSX
- Bugzilla 12428: Regression (2.066 git-head): toUpper is corrupting input data (modifying immutable strings)
- Bugzilla 12455: [uni][reg] Bad lowercase mapping for 'LATIN CAPITAL LETTER I WITH DOT ABOVE'
- Bugzilla 12494: Regression (2.064): to!string(enum) returns incorrect value
- Bugzilla 12505: Null pointers are pretty-printed even when hex output is requested
- Bugzilla 12713: [REG 2.066A] std.regex.regex crashes with SEGV, illegal instruction resp. assertion failure with certain bad input
- Bugzilla 12859: Read-modify-write operation for shared variable in Phobos
- Bugzilla 13076: [dmd 2.066-b2] DList clearing of empty list
- Bugzilla 13098: std.path functions no longer works with DirEntry
- Bugzilla 13181: install target broken
Phobos bugs
- Bugzilla 1452: std.cstream doc incorrect - imports of stream and stdio are not public
- Bugzilla 1726: std.stream FileMode documentation problems
- Bugzilla 3054: multithreading GC problem. And Stdio not multithreading safe
- Bugzilla 3363: std.stream.readf segfaults with immutable format strings
- Bugzilla 3484: std.socket.Address hierarchy not const-safe
- Bugzilla 4330: std.range.transposed() should be documented
- Bugzilla 4600: writeln() is not thread-safe
- Bugzilla 5177: std.socketstream's close() should call super.close()
- Bugzilla 5538: Immutable classes can't be passed as messages in std.concurrency
- Bugzilla 5870: Debug code in SortedRange assumes it can always print the range
- Bugzilla 6644: std.stdio write/writef(ln) are not @trusted
- Bugzilla 6791: std.algorithm.splitter random indexes utf strings
- Bugzilla 6998: std.container.Array destroys class instances
- Bugzilla 7246: Provide a simpler example for std.algorithm.remove
- Bugzilla 7289: Document how std.format handles structs, unions, and hashes.
- Bugzilla 7693: Getopt Ignores Trailing Characters on Enums
- Bugzilla 7767: Unstable sort - slow performance cases
- Bugzilla 7822: lseek cast(int)offset should be lseek cast(off_t)offset
- Bugzilla 7924: reduce does not work with immutable/const as map and filter do
- Bugzilla 8086: std.stdio is underdocumented
- Bugzilla 8590: Documentation for "any" and "all" in std.algorithm is incorrect
- Bugzilla 8721: std.algorithm.remove problem
- Bugzilla 8730: writeln stops on a nul character, even if passed a D string
- Bugzilla 8756: Add link to location of curl static library
- Bugzilla 8764: chunks.transposed causes infinite ranges.
- Bugzilla 8866: Splitter(R1, R2) CANNOT be bidirectional.
- Bugzilla 8905: DList.Range: Internal error, inconsistent state
- Bugzilla 8921: Enum arrays should be formatted properly
- Bugzilla 9015: std.container.DList.opOpAssign missing return
- Bugzilla 9016: swap() doesn't work with std.container.DList.front and back
- Bugzilla 9054: std.net.curl byLineAsync and byChunkAsync broken.
- Bugzilla 9556: Missing underscore in docs for std.string.isNumeric
- Bugzilla 9878: std.algorithm.cartesianProduct results order
- Bugzilla 9975: pointsTo asserts because of false pointer in union
- Bugzilla 10500: Problem with length property when using variant
- Bugzilla 10502: Can't get fullyQualifiedName of a templated struct
- Bugzilla 10693: cartesianProduct with over 7 ranges causes segfault at compile time
- Bugzilla 10779: cartesianProduct leads to heavy code bloat
- Bugzilla 10798: std.regex: ctRegex unicode set ops unimplemented
- Bugzilla 10911: std.net.curl.HTTP: should allow user code to indicate content type of POST data
- Bugzilla 10916: toHash on VariantN not being recognised
- Bugzilla 10931: etc.c.zlib should properly annotate const parameters
- Bugzilla 10948: BitArray.opEquals is invalid
- Bugzilla 11017: std.string/uni.toLower is very slow
- Bugzilla 11072: BitArray.opCmp is invalid on 64x
- Bugzilla 11175: Format should support IUnknown classes
- Bugzilla 11183: Win64: lrint yields bad results
- Bugzilla 11184: Win64: killing process with invalid handle terimates current process
- Bugzilla 11192: std.demangle doesn't demangle alias template arguments
- Bugzilla 11253: std.algorithm.count is not nothrow
- Bugzilla 11308: Don't use Voldemort types for std.process output
- Bugzilla 11364: Variant fails to compile with const(TypeInfo).
- Bugzilla 11608: Inadequate documentation for std.getopt.config.passThrough
- Bugzilla 11698: readf doesn't compile with bool
- Bugzilla 11705: std.typecons.Typedef is missing proper documentation
- Bugzilla 11778: format for null does not verify fmt flags.
- Bugzilla 11784: std.regex: bug in set intersection
- Bugzilla 11825: An impossible memcpy at CTFE with cartesianProduct.array
- Bugzilla 11834: std.net.curl: ddoc warnings
- Bugzilla 11978: std.algorithm canFind uses "value" where it means "needle"
- Bugzilla 12007: cartesianProduct doesn't work with ranges of immutables
- Bugzilla 12076: ctRegex range violation
- Bugzilla 12148: std.uuid.parseUUID should document that it changes lvalue input data
- Bugzilla 12157: Variant opEquals always returns false for classes.
- Bugzilla 12169: sum(int[]) should return a int
- Bugzilla 12183: using std.algorithm.sort makes valgrind abort
- Bugzilla 12245: BinaryHeap exhibits quadratic performance in debug mode
- Bugzilla 12297: std.typecons.Proxy does not properly forward IFTI calls
- Bugzilla 12309: The template fullyQualifiedName returns wrong result
- Bugzilla 12349: std.File.flush and error causes segfault after calling close
- Bugzilla 12356: std.traits.isTypeTuple and isExpressionTuple are poorly documented
- Bugzilla 12366: Range violation in compile-time regex
- Bugzilla 12419: assertion failure in std.utf
- Bugzilla 12434: std.algorithm.sum of immutable array too
- Bugzilla 12449: Undefined format in std.algorithm.max
- Bugzilla 12464: DMD/Phobos cannot auto-implement D variadic methods
- Bugzilla 12477: std.bitmanip should emit informative diagnostics
- Bugzilla 12557: std.numeric.gcd documentation reports Euler's algorithm, but it uses Euclid's algorithm
- Bugzilla 12568: std.functional.memoize with constant array argument too
- Bugzilla 12569: Better error message for std.algorithm.reduce used with two functions and a scalar seed
- Bugzilla 12582: Non-existant named capture groups cause runtime range violation or segmentation fault in regex
- Bugzilla 12600: Variant should support coercion to bool
- Bugzilla 12608: Dead assignment in UUIDParsingException
- Bugzilla 12609: Useless variable assignment in std.regex
- Bugzilla 12643: @nogc std.range.dropOne
- Bugzilla 12668: std.traits.functionAttributes should use the new getFunctionAttributes trait
- Bugzilla 12691: std.regex.bmatch bug in empty OR operator inside of ()*
- Bugzilla 12731: Infinite range slices are not themselves sliceable
- Bugzilla 12747: std.regex bug in the parser allows reference to open groups.
- Bugzilla 12771: opIndex on static arrays in a Variant is not implemented.
- Bugzilla 12781: process.d: "Executable file not found" is supposed to show executable name but fails
- Bugzilla 12796: std.string toLower/toUpper array conversion.
- Bugzilla 12806: Does std.traits.isArray include associative arrays?
- Bugzilla 12828: Fix SimpleTimeZone.utcOffset so that it has the correct return type
- Bugzilla 12846: Phobos git HEAD: std.datetime spewing out tons of deprecation messages
- Bugzilla 12853: std.encoding EncodingSchemeUtf16Native and EncodingSchemeUtf32Native decode() and SafeDecode() wrong stripping length
- Bugzilla 12875: [unittest] std.datetime fails: Not a valid tzdata file.
- Bugzilla 12898: std.process.browse expects URL to be encoded in CP_ACP on Windows instead of UTF-8
- Bugzilla 12921: Module std.getopt does not respect property syntax
- Bugzilla 12923: UTF exception in stride even though passes validate.
- Bugzilla 12996: SList: linearRemove cannot remove root node
- Bugzilla 13000: Casts should be removed to utilize features of inout
- Bugzilla 13068: std.typecons.Unique should disable postblit
- Bugzilla 13100: std.process.setCLOEXEC() throws on invalid file descriptor
- Bugzilla 13151: std.range.take template constraint ambiguity
- Bugzilla 13163: std.conv.parse misses overflow when it doesn't result in a smaller value
- Bugzilla 13171: std.algorithm.until(range, sentinel, OpenRight.no) doesn't propagate popping of sentinel to range
- Bugzilla 13214: array.opSlice one element falsy empty
- Bugzilla 13258: std.process file closing logic is incorrect
- Bugzilla 13263: phobos/posix.mak has incorrect dependencies
Phobos enhancements
- Bugzilla 3780: getopt improvements by Igor Lesik
- Bugzilla 4725: std.algorithm.sum()
- Bugzilla 4999: Add Kenji Hara's adaptTo() to Phobos
- Bugzilla 5175: Add a way to get parameter names to std.traits
- Bugzilla 5228: Add GetOptException (or similar) to std.getopt
- Bugzilla 5240: Faster std.random.uniform() for [0.0, 1.0) range
- Bugzilla 5316: std.getopt: Add character-separated elements support for arrays and associative arrays
- Bugzilla 5808: std.string.indexOf enhancement with start-at parameter
- Bugzilla 6793: Document that assumeUnique may not be necessary in some contexts
- Bugzilla 7146: enhance strip* (implementation provided)
- Bugzilla 8278: std.range.chunks for generic Forward Ranges?
- Bugzilla 8762: instanceOf trait for static conditionals
- Bugzilla 9819: Allow access to named tuple's names.
- Bugzilla 9942: Add a functional switch function
- Bugzilla 10162: Opposite of std.string.representation
- Bugzilla 11598: std.random.uniform could be faster for integrals
- Bugzilla 11876: std.getopt: Implement --help and --help=option automatic printout
- Bugzilla 12015: std.digest.sha256 too
- Bugzilla 12027: Range of true bits for std.bitmanip.BitArray
- Bugzilla 12173: Optional start value for std.algorithm.sum
- Bugzilla 12184: Provide formating options for std.uni.InversionList
- Bugzilla 12446: std.parallelism.amap prefer iteration to indexing
- Bugzilla 12448: "in" argument for std.string.toStringz
- Bugzilla 12479: replace "pointsTo" with "maybePointsTo" and "definitlyPointsTo"
- Bugzilla 12556: Add persistent byLine
- Bugzilla 12566: Give DList true reference semantics
- Bugzilla 12596: Implement Typedef ctor that can take itself as a parameter
- Bugzilla 12633: std.conv.to should support target fixed-sized arrays
- Bugzilla 12644: Some std.math functions are not yet @nogc
- Bugzilla 12656: Some functions in std.ascii can be @nogc
- Bugzilla 12671: std.complex abs and ^^ @nogc
- Bugzilla 12784: Add an "in" operator for std.json.JSONValue
- Bugzilla 12835: std.random.uniform with open lower bound cannot support smaller integral types or character types
- Bugzilla 12877: std.random.uniform cannot handle dchar variates
- Bugzilla 12886: std.datetime cannot parse HTTP date
- Bugzilla 12890: std.array index based replace
- Bugzilla 12957: std.algorithm.cartesianProduct is sometimes very slow to compile
- Bugzilla 13013: Failed unittests in std.json - does not parse doubles correctly
- Bugzilla 13022: std.complex lacks a function returning the squared modulus of a Complex
- Bugzilla 13042: std.net.curl.SMTP doesn't send emails with libcurl-7.34.0 or newer
- Bugzilla 13159: std.socket.getAddress allocates once per DNS lookup hit
Druntime regressions
- Bugzilla 12220: [REG2.066a] hash.get() does not accept proper parameters
- Bugzilla 12427: Regression (2.066 git-head): Building druntime fails with -debug=PRINTF
- Bugzilla 12710: Bad @nogc requirement for Windows callbacks
- Bugzilla 12738: core.sys.posix.signal sigaction_t handler type mismatch
- Bugzilla 12848: [REG2.061] crash in _d_run_main() on some unicode command line argument (Win32)
- Bugzilla 13078: [dmd 2.066-b2] AA rehash failed with shared
- Bugzilla 13084: ModuleInfo.opApply delegate expects immutable parameter
- Bugzilla 13111: GC.realloc returns invalid memory for large reallocation
- Bugzilla 13148: ModuleInfo fields are unnecessary changed to const
Druntime bugs
- Bugzilla 4323: std.demangle incorrectly handles template floating point numbers
- Bugzilla 5892: Lazy evaluation of stack trace when exception is thrown
- Bugzilla 7954: x86_64 Windows fibers do not save nonvolatile XMM registers
- Bugzilla 8607: __simd and pcmpeq should be @safe pure nothrow
- Bugzilla 9584: Exceptions in D are ludicrously slow (far worse than Java)
- Bugzilla 10380: [AA] Wrong code using associative array as key type in associative array
- Bugzilla 10897: btc, btr and bts shouldn't be safe
- Bugzilla 11011: core.time.Duration has example code which cannot compile
- Bugzilla 11037: [AA] AA's totally broken for struct keys with indirection
- Bugzilla 11519: fix timing issue in core.thread unittest
- Bugzilla 11761: aa.byKey and aa.byValue are not forward ranges
- Bugzilla 12800: Fibers are broken on Win64
- Bugzilla 12870: No x86_64 optimized implementation for float array ops
- Bugzilla 12958: core.checkedint.mulu is broken
- Bugzilla 12975: posix.mak should use isainfo on Solaris systems to determine model
- Bugzilla 13057: posix getopt variables in core/sys/posix/unistd.d should be marked __gshared
- Bugzilla 13073: Wrong uint/int array comparison
Druntime enhancements
- Bugzilla 8409: Proposal: implement arr.dup in library
- Bugzilla 12964: dev_t is incorrectly defined in runtime for Solaris systems
- Bugzilla 12976: ModuleInfo should be immutable on Solaris
- Bugzilla 12977: lf64 definitions aren't correct on Solaris
- Bugzilla 12978: struct sigaction is too small on 32-bit solaris
- Bugzilla 13037: SIGRTMIN and SIGRTMAX aren't correctly defined on Solaris
- Bugzilla 13144: Add fenv support for Solaris
- Bugzilla 13145: Need LC_ locale values for Solaris
- Bugzilla 13146: Add missing function definitions from stdlib.h on Solaris
Installer regressions
- Bugzilla 13004: /? option to cl.exe results in ICE
- Bugzilla 13047: cannot stat ./icons/16/dmd-source.png: No such file or directory
- Bugzilla 13210: libphobos2.so not being built
- Bugzilla 13233: Windows installer: downloading external installers (Visual D/dmc) does not work
Installer bugs
- Bugzilla 3319: DInstaller overwrites the %PATH% variable
- Bugzilla 5732: Windows installer creates incorrect target for Start menu link
- Bugzilla 13149: released libphobos2.a is build with PIC code
Website regressions
- Bugzilla 12813: Parser is confused between float and UFC syntax
Website bugs
- Bugzilla 1497: Add a link to the DWiki debuggers page
- Bugzilla 1574: DDoc documentation lacks macro examples
- Bugzilla 3093: Object.factory has incomplete documentation
- Bugzilla 4164: sieve Sample D Program -- need documentation for array representation
- Bugzilla 6017: std.algorithm.remove has a wrong link
- Bugzilla 7075: overloading opAssign for classes is poorly specified
- Bugzilla 7459: Document the workarounds for mutually-called nested functions.
- Bugzilla 8074: template-mixin example contradicts text
- Bugzilla 8798: Tuple curry example not really curry
- Bugzilla 9542: Broken link on std.range doc page
- Bugzilla 10033: Wrong example in chapter Vector Extensions
- Bugzilla 10231: Spec: Document typed alias parameter feature
- Bugzilla 10297: Memory safe D spec is out of date
- Bugzilla 10564: Errors on the Template page of the language specification
- Bugzilla 10764: bug reporting / better linking to issue tracker / include resolved in default search
- Bugzilla 10901: Win_64 Autotester KO'd
- Bugzilla 11104: Document exact behavior of structsasd initialization inside AA
- Bugzilla 11396: Function alias declaration not valid according to spec
- Bugzilla 11462: std.algorithm.multiSort is missing from the index
- Bugzilla 11638: Variadic function documentation, out-of-date example
- Bugzilla 11846: Missing pragma/(mangle) documentation
- Bugzilla 11867: Documentation for new package.d feature
- Bugzilla 11917: Stale Phobos documentation pages found on site root
- Bugzilla 11979: inout const is not documented
- Bugzilla 12005: DDoc example refers to a dead project, yet a more recent one exists that is not mentioned.
- Bugzilla 12241: Document change to static opCall in changelog
- Bugzilla 12293: forward is missing from std.algorithm's cheat-sheet
- Bugzilla 12459: Bugzilla logs users in only on https site, and does not redirect from http to https
- Bugzilla 12526: DDox possible issue with case sensitive file names
- Bugzilla 12535: The language introduction page is not linked from index
- Bugzilla 12538: ZeroBUGS links are broken
- Bugzilla 12607: Document that IUnknown classes must mark toString with extern(D) when overriding it
- Bugzilla 12623: Special lexing case not mentioned in language spec
- Bugzilla 12740: DMD accepts invalid version syntax
- Bugzilla 13012: Open bugs chart is missing from https://dlang.org/bugstats.php
Website enhancements
- Bugzilla 8103: Use case-insensitive sorting for Jump-to lists in the documentation
- Bugzilla 12783: Adding 'Third Party Libraries' link to the navigation sidebar
- Bugzilla 12858: Document opEquals usage in AAs