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

Change Log: 2.060

previous version: 2.059 – next version: 2.061

Download D 2.060
released Aug 2, 2012

New/Changed Features

  • std.string: The current implementations of std.string.format and string.sformat are scheduled to be replaced in November 2012 with improved implementations which conform to writef. In some, rare cases, this will break code. Please see the documentation for std.string.format and std.string.sformat for details.
  • std.bitmanip: Added peek, read, write, and append for converting ranges of bytes to and from integral types.
  • std.container: Added DList, which is an implementation of a doubly-linked list.
  • Added std.file.tempDir which returns the path to a directory where a program can put temporary files.
  • std.process: Added escapeShellCommand, escapeShellFileName, and escapeWindowsArgument. Documented browse function.
  • std.range: Added RefRange, which effectively makes it possible to pass a range by reference.
  • std.traits: Added KeyType, ValueType, isScalarType, isBasicType, and SetFunctionAttributes templates.
  • std.utf: Added overload of codeLength which operates on a string.
  • std.traits: areAllSafe has been scheduled for deprecation. Please use allSatisfy(isSafe, ...) instead.
  • clear has been renamed to destroy, and clear (as an alias to destroy) has been scheduled for deprpecation.
  • Capitalized std.traits.pointerTarget to PointerTarget. Old one is scheduled for deprecation.
  • std.algorithm.indexOf - which was scheduled for deprecation - has been deprecated (it was easily confused with std.string.indexOf). Please use countUntil instead.
  • std.cpuid - which was scheduled for deprecation - has been deprecated. Please use core.cpuid instead.
  • std.conv.ConvError and ConvOverflowException - which were scheduled for deprecation - have been deprecated. Please catch ConvException and ConvOverflowException instead.
  • The overloads of std.conv.to which were scheduled for deprecation because formattedWrite replaced them have now been deprecated. Please use std.format.formattedWrite instead.
  • The overload of std.exception.enforce which takes the file and line number as template arguments has been scheduled for deprecation (as it causes unnecessary template bloat). Please use the overload which takes them as function arguments instead. This will have no effect on any calls to enforce which do not explicitly pass the file or line number.
  • std.format.FormatError - which was scheduled for deprecation - has been deprecated. Please catch FormatException instead.
  • std.file.listDir has been deprecated. Please use std.file.dirEntries instead.
  • std.range.replicate - which was scheduled for deprecation - has been deprecated. Please use repeat instead.
  • std.range.SortedRange.canFind - which was scheduled for deprecation - has been deprecated. Please use SortedRange.contains instead.
  • std.socket: timeval and linger - which were scheduled for deprecation - have been deprecated. Please use TimeVal and Linger.
  • std.stdio.isStreamingDevice has been scheduled for deprecation. Please use isFileHandle instead.
  • The deprecated std.typecons.defineEnum has been removed.
  • UtfException - which was scheduled for deprecation - has been deprecated. Please use UTFException instead.
  • The deprecated overloads of std.array.insert and std.array.replace have been removed. Please use insertInPlace and replaceInPlace instead.
  • The deprecated toISOExtendedString and fromISOExtendedString functions in std.datetime have been removed. Please use toISOExtString and fromISOExtString instead.
  • The deprecated std.file.getTimesPosix has been removed. Please use std.file.getTimes instead.
  • The deprecated overloads of isFile, isDir, and isSymLink in std.file which took uint have been removed. Please use attrIsFile, attrIsDir, and attrIsSymlink instead.
  • The deprecated std.file.DirEntry.timeStatusChanged has been removed. Please use std.file.DirEntry.attributes to get at that information if you need it.
  • The deprecated std.contracts module has been removed. Please use std.exception instead.
  • The deprecated std.arg, std.bind, and std.loader modules have been removed.
  • Added TypeInfo.rtInfo property to get library defined runtime info.
  • Added front end support for AVX 256 bit SIMD instructions.
  • Default arguments and parameter identifiers (if any) are added to the tuple generated from IsExpression's __parameters case.
  • Changed the way the align attribute works, to make it more usable and comprehensible. Default alignment has not changed.
  • The align attribute now accepts arbitrary powers of two. This affects layout of static data, too. Such effects are dependent on limitations of the object file format - currently Win32 programs cannot align on larger than 16 byte boundaries.
  • HTML input file support completely removed.
  • Bugzilla 3150: cast from dynamic array to ulong is allowed
  • Bugzilla 3866: anonymous delegate with default parameters cross-talks to another anonymous delegate
  • Bugzilla 4174: Template interface functions not allowed, making operator overloads difficult
  • Bugzilla 6652: 1. Warn modifying non ref variable if -w is specified.
  • Bugzilla 7243: Compiler should call separate function when allocating a struct on the heap
  • Bugzilla 7923: Please remove 'deprecated' from setAssertHandler()
  • Bugzilla 8105: in ref
  • Bugzilla 8127: dmd link library paths not given precedence over gcc defaults
  • Bugzilla 8221: typeof(null) rejected as return type for covariant overrides

Druntime Bugs Fixed

  • Bugzilla 6909: incorrect definition of the OVERLAPPED struct in core.sys.windows.windows ?

Library Bugs Fixed

  • Bugzilla 2328: setTypeInfo in gc.d backwards.
  • Bugzilla 2588: std.signals should not use 'length' stealth keyword in indexing
  • Bugzilla 4405: all function - returns whether predicate is true for all elements in a range
  • Bugzilla 4603: array(iota(1, 0)) error
  • Bugzilla 4605: Wrong print of an int[string] aa
  • Bugzilla 4629: BufferedFile.printf() wants char[] as first argument
  • Bugzilla 4695: std.range.zip is broken
  • Bugzilla 4744: std.conv: string->enum doesn't look for longer match
  • Bugzilla 4822: Problem with std.stdio.File.writef("%c")
  • Bugzilla 5011: std.container: SList linearRemove produces wrong results
  • Bugzilla 5089: feqrel does not compile for floats
  • Bugzilla 5260: std.math.feqrel() returns negative number
  • Bugzilla 5346: instantiation of std.conv.toImpl and std.format.formatValue fails for unions
  • Bugzilla 5354: formatValue: range templates introduce 3 bugs related to class & struct cases
  • Bugzilla 5786: std.algorithm.sort does not work with std.container.Array: Range violation
  • Bugzilla 5843: Unable to convert a struct with an alias-this to long/ulong to int, using std.conv.to!int.
  • Bugzilla 5970: fix BigInt.toString
  • Bugzilla 6027: bigint to!string conversion and its implications
  • Bugzilla 6175: String corruption when passing static char arrays to std.conv
  • Bugzilla 6191: removechars doesn't accept a const string
  • Bugzilla 6197: std.traits.isImplicitlyConvertible returns some wrong results.
  • Bugzilla 6222: A problem with iota() using size_t
  • Bugzilla 6231: [patch] std.conv.to/std.format.: Structs with toString and isInputRange match multiple templates.
  • Bugzilla 6273: Tuple [] operator in pure function
  • Bugzilla 6379: std.container.SList fails to compile
  • Bugzilla 6437: Refcounted calls dtor before ctor, never calls dtor for globals
  • Bugzilla 6547: Call to std.algorithm.remove causes compile error
  • Bugzilla 6580: scoped classes are aligned incorrectly
  • Bugzilla 6597: to!SomeString should use std.format.formatValue
  • Bugzilla 6642: SysTime should not be hasUnsharedAliasing
  • Bugzilla 6892: Formatted write with specified length of enum member
  • Bugzilla 6926: std.process.system return wrong exit code
  • Bugzilla 7022: File.byLine doesn't release file handle
  • Bugzilla 7138: Can't call array() on dirEntries
  • Bugzilla 7317: writeln cannot handle alias this of array type
  • Bugzilla 7326: write interprets enum with byte backing type as a character
  • Bugzilla 7348: to!string(null) matches more than one template declaration
  • Bugzilla 7356: Implement KeyType, ValueType for hashes in std.traits
  • Bugzilla 7360: Predicate templates in std.traits should consider alias this
  • Bugzilla 7515: The new std.string.translate is slow for ASCII text
  • Bugzilla 7537: File.tmpfile requires administrator rights on Windows
  • Bugzilla 7561: std.net.curl broken
  • Bugzilla 7660: toImpl conflict in std.conv
  • Bugzilla 7796: std.typecons.Unique is using writeln without importing std.stdio
  • Bugzilla 7824: isInputRange fails to recognize inout(T)[]
  • Bugzilla 7831: Unlisted @@@BUG in File.detach causes FILE* leaks when reopening
  • Bugzilla 7878: A problem with purity and general templated algorithms
  • Bugzilla 7898: [CTFE] std.algorithm:copy fails when used with two arrays
  • Bugzilla 7909: to!(enum)(string) and to!(string)(enum) break when enum is integral
  • Bugzilla 7919: Sample code works on GDC but fails with DMD
  • Bugzilla 7936: std.random.randomSample always returns the same first value when passed a random number generator
  • Bugzilla 7937: Range iota.Result should be const where possible
  • Bugzilla 7944: std.range.iota.popFront() cycles when the range is empty
  • Bugzilla 7948: std.range.zip broken with requireSameLength
  • Bugzilla 7962: std.regex: Captures.length() returns incorrect value
  • Bugzilla 7973: BigInt %= long/ulong gives wrong value
  • Bugzilla 7975: Incorrect quotes escaping in std.format
  • Bugzilla 7982: iota broken when start and end are unsigned and step is negative.
  • Bugzilla 7993: BigInt divide-by-1 error
  • Bugzilla 8003: Phobos uses deprecated std.path sep symbol
  • Bugzilla 8011: BigInt ++ and -- do wrong thing on negative numbers
  • Bugzilla 8015: std.typecons.Tuple does not support struct with alias method this
  • Bugzilla 8022: BigInt division bug (2)
  • Bugzilla 8026: Fix or disallow randomShuffle() on fixed-sized arrays
  • Bugzilla 8031: If a class have some signals it's impossible for a derived class to have any signals
  • Bugzilla 8037: hasElaborateDestructor is false for non-zero-length static array of structs with elaborate destructor
  • Bugzilla 8039: scoped doesn't call any elaborate destructors for struct fields
  • Bugzilla 8040: writeln(null) too
  • Bugzilla 8055: [Regression 2.059] std.algorithm.move corrupts moved object field
  • Bugzilla 8057: std.algorithm.move cannot use for nested struct
  • Bugzilla 8080: 'alias this' causes toString to be shadowed by aliased object
  • Bugzilla 8112: std.algorithm.fill must accept InputRange
  • Bugzilla 8158: std.algorithm.min fails to compile with user-defined types
  • Bugzilla 8164: BigInt from char[] too
  • Bugzilla 8165: BigInt opAssign return value
  • Bugzilla 8171: [Regression 2.060head] Broken std.algorithm.move for nested struct has no member
  • Bugzilla 8186: Formatting class object has an alias this to int* field is broken.
  • Bugzilla 8187: replaceFirst doesn't work for string[] haystack
  • Bugzilla 8191: cstream.printf is completely unusable on x86_64
  • Bugzilla 8195: Segfault when comparing a VariantN to a non-variant type which it holds
  • Bugzilla 8203: Use of std.regex.match() generates "not enough preallocated memory" error
  • Bugzilla 8214: blocking option for TaskPool.finish()
  • Bugzilla 8233: std.array.array fails to compile with ranges of immutable elements which have a length property
  • Bugzilla 8240: std.algorithm.joiner and empty inputRangeObject
  • Bugzilla 8264: [std.conv.to] constructing conversion doesn't work with alias this
  • Bugzilla 8310: writeln of Range of fixed size array
  • Bugzilla 8323: std.string.chompPrefix does not handle differing string types properly
  • Bugzilla 8362: std.traits.isSafe doesn't work with unsafe lamdba functions
  • Bugzilla 8386: writeln stopped working with wstring
  • Bugzilla 8398: enforceEx cannot be used with OutOfMemoryError
  • Bugzilla 8450: std.traits.isSafe doesn't work with unsafe lamdba functions

DMD Bugs Fixed

  • Bugzilla 1175: nested class inheritance
  • Bugzilla 1780: Type tuple deduction failure for class templates
  • Bugzilla 2472: Delegates are not lvalue.
  • Bugzilla 2962: ICE(glue.c) or bad codegen passing variable as template value parameter
  • Bugzilla 3290: accepts-invalid: non-const by-ref foreach over a const array is accepted
  • Bugzilla 3574: post-condition in void main() is not evaluated if there is no return statement
  • Bugzilla 3608: Allow isExpression and templates to capture template parameters and FQN of template
  • Bugzilla 3703: static array assignment
  • Bugzilla 3895: Appending a double[] to a float[] generates wrong code
  • Bugzilla 4024: Last catch only accepts block statement
  • Bugzilla 4155: return of NaN to temporary fails equality test
  • Bugzilla 4288: Error on passing delegate to C linkage function
  • Bugzilla 4364: ICE(class.c) compiling a struct def named 'Object' followed by a class definition
  • Bugzilla 4510: [tdpl] ref with a wrong type specifier is accepted
  • Bugzilla 4583: PIC code not working: EBX register set incorrectly
  • Bugzilla 4785: auto return of a function with in contract
  • Bugzilla 4884: Using template struct parameters in method definition fails with "parameter _param_0 is already defined"
  • Bugzilla 4953: Regression(2.031): templates don't do implicit conversion properly
  • Bugzilla 4967: member default initializers not working in static struct initializers
  • Bugzilla 5039: Cannot use invariant() with auto methods
  • Bugzilla 5082: delegate alias parameters are silently accepted inside structs. limits most of std.algorithm, etc.
  • Bugzilla 5435: Static foreach over tuple ignores type annotation
  • Bugzilla 5437: Problems with length of std.traits.EnumMembers
  • Bugzilla 5473: Members of const-qualified classes are not const themselves.
  • Bugzilla 5737: postblit not called for locals initialized from ref functions
  • Bugzilla 5809: [64 bit] wrong code for *p==0, when widening conversion occurs
  • Bugzilla 5896: const overload matching is succumb to template parameter one
  • Bugzilla 6189: [64bit] optimizer: register content destroyed in function prolog
  • Bugzilla 6199: [GSoC] Postblit not called when returning a reference to a by-value function
  • Bugzilla 6470: postblits not called on arrays of structs
  • Bugzilla 6475: template identifier is not a member of alias
  • Bugzilla 6591: di header generation loses selective import symbols
  • Bugzilla 6612: Associative arrays with associative array keys literals
  • Bugzilla 6636: Destructors of static array elements are not called on function parameter
  • Bugzilla 6637: Postblits of static array elements are not called on function argument
  • Bugzilla 6758: std.c.stdarg problems with 8 or more integer arguments on x86_64
  • Bugzilla 6891: template with uint value parameter causes several issues
  • Bugzilla 7396: Indicate default alignment with 0.
  • Bugzilla 7385: Bad error message missing line number on invalid array op that isn't special cased
  • Bugzilla 7413: Vector literals don't work
  • Bugzilla 7414: Vector literal assignment doesn't work in global scope
  • Bugzilla 7418: Overloading doesn't work with aliases declared inside templates
  • Bugzilla 7453: Can't return value from within opApply
  • Bugzilla 7478: stack overflow compiling with -deps -release -inline -noboundscheck
  • Bugzilla 7494: Selective import does not work inside a function
  • Bugzilla 7506: Postblit does not called properly with inlining
  • Bugzilla 7530: Postblit not called structs returned from an array index expr.
  • Bugzilla 7560: Base class overloaded methods created by mixins can't be overriden
  • Bugzilla 7581: Compiler uses wrong instructions to move complex value from ST to xmm registers
  • Bugzilla 7585: functions in templates inferred as delegate
  • Bugzilla 7750: while(true) loop with try/catch block causes segfault
  • Bugzilla 7770: __dollar cannot be read at compile time
  • Bugzilla 7784: ICE with self-referencing literals
  • Bugzilla 7793: static assert( void_function() ) gives misleading error message
  • Bugzilla 7807: Ambiguous virtual function error on const overloading with covariant return types
  • Bugzilla 7851: Internal error: e2ir.c 688
  • Bugzilla 7880: [CTFE] cast from void array allowed with different results than at runtime
  • Bugzilla 7893: Spec completely wrong for D variadic arguments on 64 bits
  • Bugzilla 7894: [CTFE] - goto within ForStatement restarts loop
  • Bugzilla 7906: [ICE] enum declaration with invalid array literal crashes dmd
  • Bugzilla 7907: [ICE] invalid expression on template argument crashes dmd
  • Bugzilla 7911: Nested static if failing to execute
  • Bugzilla 7922: alias this causes weird formatting issues for strings
  • Bugzilla 7929: Broken semantic of StructInitializer with const
  • Bugzilla 7931: Error message with _error_ with var[1,2]
  • Bugzilla 7932: Corrupted argument inside out contract in x86_64
  • Bugzilla 7933: Illegal interaction of templates
  • Bugzilla 7941: Regression(2.059): Type check is ignored when manifest constant initializer is function literal
  • Bugzilla 7943: UFCS does not work with alias this
  • Bugzilla 7945: alias this doesn't work on function ref parameter
  • Bugzilla 7949: [ICE] (cgcod.c) with SIMD array
  • Bugzilla 7950: Type tuples are incorrectly flattened in base type list of interface
  • Bugzilla 7951: DMD: Internal error: backend/cgxmm.c 567
  • Bugzilla 7965: Invalid outer function scope pointer in some cases
  • Bugzilla 7974: forward reference of mixin declaration
  • Bugzilla 7983: ICE with getMember on a unittest member
  • Bugzilla 7987: [CTFE] cannot compare arrays of slices
  • Bugzilla 8002: Excess initial errors when passing template args to non-templated struct
  • Bugzilla 8004: Direct call of function literal should consider default arguments
  • Bugzilla 8005: Lambda with parameter type inference should consider default args
  • Bugzilla 8016: Methods defined in external object files when template alias parameter is involved
  • Bugzilla 8032: mixin template before virtual method with same method causes an error
  • Bugzilla 8036: Zero-length static array of structs with elaborate destructor as struct or class field is rejected
  • Bugzilla 8038: #line which is in a double template instantiation doesn't work
  • Bugzilla 8060: xmmstore cannot allocate store for optimized operation that uses int and floats
  • Bugzilla 8064: return reference semantics not obeyed on delegates?
  • Bugzilla 8066: ICE on missing return statement if invariant is present
  • Bugzilla 8069: incorrect ambiguous virtual function error
  • Bugzilla 8073: Regression (git) Error: undefined identifier __result
  • Bugzilla 8089: Importing package as module causes segfault
  • Bugzilla 8091: Optimizer generates wrong code when reducing comparisons
  • Bugzilla 8094: Static if matching using alias parameter in template fails
  • Bugzilla 8095: [64 bit] Wrong code generation with spilled register, -m64 -O
  • Bugzilla 8098: Inner class method can modify outer's members regardless of constancy
  • Bugzilla 8099: Inner class's outer pointer matches constancy of inner, but can be set to object of arbitrary constancy
  • Bugzilla 8182: with a lazy struct parameter, the struct's destructor is called on the generated delegate
  • Bugzilla 8180: UFCS writeln doesn't work with Tuples
  • Bugzilla 8113: alias this doesn't forward opCall
  • Bugzilla 8123: alias declaration lookup is broken
  • Bugzilla 8125: TypeInstance dedunction problem
  • Bugzilla 8129: Cannot deduce template function when using partially specified type in function parameter
  • Bugzilla 8147: Blah!R.init now requires parens - (Blah!R).init
  • Bugzilla 8168: dmd crashes when asm statement with wrong opcode
  • Bugzilla 8169: Method loses its compile-time evaluability when used through alias this
  • Bugzilla 8185: Pure functions and pointers
  • Bugzilla 8188: need this to access member when mixining in a function
  • Bugzilla 8190: Externally defined struct error message
  • Bugzilla 8194: "Function cannot access frame" even though all I requested was the type
  • Bugzilla 8198: Nested lambda inference doesn't work
  • Bugzilla 8199: stack is not aligned in finally block
  • Bugzilla 8212: shared value data structures should implicitly cast to mutable
  • Bugzilla 8216: CTFE should allow 'pointer is inside range' comparisons
  • Bugzilla 8226: Global lambda assign to const/immutable
  • Bugzilla 8237: Error message with _error_ when using failed type inference in template parameter
  • Bugzilla 8241: cannot use template function literal as default alias argument
  • Bugzilla 8242: cannot use template function literals at module scope
  • Bugzilla 8249: Spurious error message with templates and alias this
  • Bugzilla 8252: no UFCS for 0 literal
  • Bugzilla 8276: [CTFE] ICE when reading variable from nested function
  • Bugzilla 8283: ICE(cod1.c): returning struct with constructor as member of another struct
  • Bugzilla 8315: Invalid nested-ref check in template constraint
  • Bugzilla 8335: ref is ignored for static array of stucts with postblit argument
  • Bugzilla 8390: Refused array operation mutable[] += const[]
  • Bugzilla 8397: parameter types are not checked when assigning a function literal
  • Bugzilla 8423: Wrong code for bool parameter in 5th integer register.
  • Bugzilla 8429: [2.060 beta] 'version' rejected inside 'static if's
  • Bugzilla 8434: [Regression 2.058] cannot implicitly convert expression (vs1.opCast()) of type const(Vector2D) to object.Object
  • Bugzilla 8437: [2.060 beta] static struct no size yet for forward reference
  • Bugzilla 8442: [2.060 beta] Empty array enum not treated as immutable
  • Bugzilla 8453: Associative array keys refused as property by sort
  • Bugzilla 8454: [ICE] (backend\cg87.c 3497) with cdouble and sqrt
previous version: 2.059 – next version: 2.061