D Change Log
Version
D 2.048
Aug 8, 2010
New/Changed Features
- std.complex: New Complex.toString() syntax.
- std.string: icmp() now works with all built-in string types.
- Bugzilla 4077: Bugs caused by bitwise operator precedence
- Bugzilla 4080: Patch for building dynamic libraries on Mac OS X
Bugs Fixed
- Unlisted Bug: gc_query returns 0 for attr when called on interior pointers
- D/112964: capacity can return a value < length
- Bugzilla 978: std.utf's toUTF* functions accept some invalid and reject some valid UTF
- Bugzilla 996: Error in doc on implicit conversion between pointer and array
- Bugzilla 1418: tupleof bug on nested classes
- Bugzilla 1678: ref with varargs generates invalid code
- Bugzilla 2275: std.utf.toUTF16z() should return const(wchar)*
- Bugzilla 2627: std.traits.hasAliasing reports true for static arrays
- Bugzilla 2872: Length, opIndex for Map
- Bugzilla 2931: Initialization struct with array from another struct
- Bugzilla 3202: std.math.pow cause dead loop
- Bugzilla 3326: $ in delegate literal causes Access Violation
- Bugzilla 3355: std.string.cmp works incorrectly for mixed-type and different-length strings
- Bugzilla 3386: to!bool(string) is not implemented
- Bugzilla 3436: std.functional.compose with only one function
- Bugzilla 3439: std.range.Sequence.opIndex not consistent after calling popFront().
- Bugzilla 3447: std.file uses unconventional file permissions
- Bugzilla 3528: FreeBSD patches for druntime.
- Bugzilla 3560: foreach over nested function generates wrong code
- Bugzilla 3569: DMD Stack Overflow with a struct member function inside a C-style struct initializer
- Bugzilla 3604: extern(C) callable function with array parameters broken
- Bugzilla 3679: Regression(2.031) template forward reference regression
- Bugzilla 3706: delegates of interfaces with multiple inheritance fail
- Bugzilla 3716: Regression (2.037) with multi dimensional array literals
- Bugzilla 3782: The POSIX sys/un.h header
- Bugzilla 3853: core.sys.posix.stdio.pclose is missing
- Bugzilla 3872: std.algorithm.filter could become bidirectional if its input range is bidir
- Bugzilla 3874: std.range.stride assumes a bidirectional input range
- Bugzilla 3917: opEquals for Ojbect could be more efficient
- Bugzilla 3937: os.path.dirname fails on absolute path
- Bugzilla 3961: Error with to!(somestruct)
- Bugzilla 3983: Regression(2.037): struct with == can't be member of struct with template opEquals
- Bugzilla 4109: (reopened) writeln doesn't work with empty static array
- Bugzilla 4171: std.random.uniform does not work for a range of characters
- Bugzilla 4191: [FreeBSD] real constants are rounded to double precision
- Bugzilla 4198: [FreeBSD] imprecision in decimal floating-point literals
- Bugzilla 4238: Segfault(statement.c): with(typeof(int))
- Bugzilla 4260: windows & basename
- Bugzilla 4267: forward reference error when 2-fold aliasing a template instance
- Bugzilla 4303: __traits(compiles) returns wrong result when used recursively
- Bugzilla 4305: Take, Chain on top of ranges w/o moveFront()
- Bugzilla 4307: spawn()'ed thread doesn't terminate
- Bugzilla 4314: Regression(1.062): Expression array1 && array2 doesn't compile
- Bugzilla 4327: std.container.Array.Range.~this() tries to call free(T[])
- Bugzilla 4339: Struct destructor + invariant + struct parameter = horrific error message
- Bugzilla 4356: Copy constructor not called under extremely mysterious circumstances
- Bugzilla 4362: std.range.repeat and cycle do not have a .save() method
- Bugzilla 4363: std.algorithm.Until is not a forward range
- Bugzilla 4369: Multiple bugs in GC minimize()
- Bugzilla 4370: POSIX monitor attribute not being used
- Bugzilla 4396: mkdir race prevents concurrent compiling with DMD using make -j
- Bugzilla 4400: D2 GC doesn't allocate with 16 bytes alignment
- Bugzilla 4406: Typo (bug) in std.concurrency
- Bugzilla 4412: Array capacity growth spikey and the ratio approaches 1.0
- Bugzilla 4443: Optimizer produces wrong code for || or && with struct arrays
- Bugzilla 4452: Incorrect result of BigInt ^^ long
- Bugzilla 4470: Problems with std.bigint mod and divide
- Bugzilla 4503: forward reference to aliased template instance
- Bugzilla 4506: Regression(2.034): -O flag breaks some recursive functions
- Bugzilla 4514: Regression: Cannot cast from X* to X
- Bugzilla 4516: Regression(2.040): forward declaration of enum not supported
- Bugzilla 4551: D2 Language Docs: http://www.digitalmars.com/d/2.0/arrays.html
- Bugzilla 4569: extern(c++) doesn't understand const types, produces bad mangled symbol
- Bugzilla 4570: ElementType!(void[]) shows error message
- Bugzilla 4578: Regression(2.047,1.062): ICE(cgcod.c): var+arr[]
- Bugzilla 4590: Spec incorrectly describes array appending and memory stomping
- Version D 2.048
- Version D 2.047
- Version D 2.046
- Version D 2.045
- Version D 2.044
- Version D 2.043
- Version D 2.042
- Version D 2.041
- Version D 2.040
- Version D 2.039
- Version D 2.038
- Version D 2.037
- Version D 2.036
- Version D 2.035
- Version D 2.034
- Version D 2.033
- Version D 2.032
- Version D 2.031
- Version D 2.030
- Version D 2.029
- Version D 2.028
- Version D 2.027
- Version D 2.026
- Version D 2.025
- Version D 2.023
- Version D 2.022
- Version D 2.021
- Version D 2.020
- Version D 2.019
- Version D 2.018
- Version D 2.017
- Version D 2.016
- Version D 2.015
- Version D 2.014
- Version D 2.013
- Version D 2.012
- Version D 2.011
- Version D 2.010
- Version D 2.009
- Version D 2.008
- Version D 2.007
- Version D 2.006
- Version D 2.005
- Version D 2.004
- Version D 2.003
- Version D 2.002
- Version D 2.001
- Version D 2.000
- changelog for 1.0
- Download latest D 2.0 alpha D compiler for Win32 and x86 linux
- tech support
Version
D 2.047
Jun 11, 2010
New/Changed Features
- Changed "op=" to just "op" for template argument to opOpAssign
- std.algorithm: Added save() to forward ranges; added split() using only one element as separator; added indexOf; fixed unlisted bug in startsWith and endsWith; added skipOver(); added canFind().
- std.array: Added implementation of save() for T[]s.
- std.concurrency: Eliminated spurious unittest stdout messages.
- std.container: Added.
- std.conv: Added file and line information to conversion errors; added brackets '[' and ']' around arrays and associative arrays as defaults; added emplace() for non-class types.
- std.file: Replaced exception upon out-of-memory error with assert(0).
- std.functional: toDelegate now accepts callable(function pointers, delegates and objects implement opCall)
- std.path: Made basename() generic in string type.
- std.range: Added the existence of the property save as a condition for isForwardRange; added save to the range defined within; replaced a couple of awkward front() implementations; defined module-level moveFront() and range member moveFront() where appropriate; added @property maxLength to Take; arranged things such that take() for slice-able ranges returns the same type as the slice; eliminated SListRange; defined iota() with one argument; moved BinaryHeap within.
- std.regex: Qualified indexOf with std.algorithm.
- std.regexp: Qualified indexOf with std.algorithm.
- std.stdio: Added an error message to enforce() in rawRead().
- std.string: Improved indexOf(), tolower(), splitter(), chomp().
- std.traits: Added templates to get compile-time information about functions.
- std.typecons: Added AutoImplement.
- std.utf: Eliminated decodeFront() and decodeBack() - they aren't needed since strings are bidirectional ranges.
- Bugzilla 2008: Poor optimization of functions with ref parameters
- Bugzilla 3793: Functions with static arrays as arguments are not inlined
- Bugzilla 4296: Reduce parasitic error messages
Bugs Fixed
- Bugzilla 1193: regression: "matches more than one template declaration" doesn't list the location of the conflicting templates
- Bugzilla 1894: scope(exit) is ignored except in compound statements
- Bugzilla 1941: missing line on inaccesable external private module member
- Bugzilla 2127: inliner turns struct "return *this" from by-value into by-ref
- Bugzilla 2276: Error message missing line number on array operation
- Bugzilla 2546: Array Ops silently fail when no slice symbol is used.
- Bugzilla 2738: Rebindable should work for interfaces.
- Bugzilla 2835: std.socket.TcpSocket doesn't actually connect
- Bugzilla 2881: x.stringof returns typeof(x).stringof when x is an enum
- Bugzilla 3064: Invalid array operation accepted, generates bad code
- Bugzilla 3088: std.xml.check() fails on xml comments
- Bugzilla 3139: compiler dies "Error: out of memory" with case range
- Bugzilla 3200: std.xml doesn't follow spec for Tag.text
- Bugzilla 3323: Segfault or ICE(e2ir.c) using struct with destructor almost anywhere
- Bugzilla 3398: Attributes inside a union screws data alignment
- Bugzilla 3465: isIdeographic can be wrong in std.xml
- Major improvements to CustomFloat, fixing Bugzilla 3520: std.numeric.CustomFloat horribly broken
- Bugzilla 3538: Default value of alias template parameter is instantiated only once.
- Bugzilla 3547: for option -od for relative path the path is added twice
- Bugzilla 3548: ICE occurs when an array is returned from a function is incorrectly used in an array op expression.
- Bugzilla 3604: extern(C) callable function with array parameters broken
- Bugzilla 3651: mangleof broken for enums
- Bugzilla 3653: Problem sorting array of Rebindable
- Bugzilla 3658: Crashing on vector operations (Mac only)
- Bugzilla 3662: Wrong compile error within struct constructor and C-style initializer
- Bugzilla 3667: Regression(D2 only): broken out(result) in contracts
- Bugzilla 3786: bug in std.string.removechars
- Bugzilla 3854: Error on static initialization of arrays with trailing comma.
- Bugzilla 3873: std.range.repeat should have popBack defined
- Bugzilla 3876: std.range.Take back/popBack methods don't work correctly
- Bugzilla 3880: std.regex functions with const/immutable Regex object
- Bugzilla 4003: The result changes only with the order of source files.
- Bugzilla 4045: [CTFE] increasing array length
- Bugzilla 4052: [CTFE] increment from array item
- Bugzilla 4056: Template instantiation with bare parameter not documented
- Bugzilla 4073: core.cpuid crashes
- Bugzilla 4078: [CTFE] Failed return of dynamic array item
- Bugzilla 4084: Ignored missing main() closing bracket
- Bugzilla 4109: writeln doesn't work with empty static array
- Bugzilla 4143: fix warnings in dmd build
- Bugzilla 4156: Segfault with array+=array
- Bugzilla 4169: building dmd with a modern gcc produces a buggy compiler
- Bugzilla 4175: linux.mak doesn't declare sufficient dependencies to support parallel builds
- Bugzilla 4188: std.file.remove throws Exception on success
- Bugzilla 4193: Regression 2.046, ICE(expression.c): initialising class member with const forward reference
- Bugzilla 4202: Changset 1517 doesn't compile
- Bugzilla 4207: std.cover.setDestDir does not work.
- Bugzilla 4208: druntime should not depend on Phobos
- Bugzilla 4212: DWARF: void arrays cause gdb errors
- Bugzilla 4213: Strange behaviour with static void[] arrays
- Bugzilla 4219: hasAliasing does not care about immutable
- Bugzilla 4220: I cannot apply @safe to intrinsic operation(eg: std.math.sqrt)
- Bugzilla 4228: std.array.replace contains 2 bugs
- Bugzilla 4230: version(unittest)
- Bugzilla 4231: Solitary opUnary Postincrement and Postdecrement user defined operators are broken.
- Bugzilla 4242: ICE(module.c): importing a module with same name as package
- Bugzilla 4249: std.regex fails to compile with debug=regex
- Bugzilla 4252: [CTFE] No array bounds checking in assignment to char[] array
- Bugzilla 4257: ICE(interpret.c): passing parameter into CTFE as ref parameter
- Bugzilla 4259: Header generation omits leading '@' for properties
- Bugzilla 4262: Header generation omits 'enum' for enum declarations
- Bugzilla 4263: Header generation omits '@system' attribute
- Bugzilla 4270: Missing line number in 'can only catch class objects' error message
- Bugzilla 4300: BigInt * int doesn't work well
Version
D 2.046
May 10, 2010
New/Changed Features
- Add hints for missing import declarations.
- Speed up compilation.
- All length methods in Phobos are now a @property.
- Bugzilla 1001: print stack trace (in debug mode) when program die
Bugs Fixed
- Fix hanging problem on undefined identifiers.
- Bugzilla 461: Constant not understood to be constant when circular module dependency exists.
- Bugzilla 945: template forward reference with named nested struct only
- Bugzilla 1055: union forward reference "overlapping initialization" error
- Bugzilla 2085: CTFE fails if the function is forward referenced
- Bugzilla 2386: Array of forward referenced struct doesn't compile
- Bugzilla 3945: AssertExpression message should implicitly convert to const char[]
- Bugzilla 4015: forward reference in alias causes error
- Bugzilla 4016: const initializer cannot forward reference other const initializer
- Bugzilla 4042: Unable to instantiate a struct template.
- Bugzilla 4100: Break and continue to label should mention foreach
- Bugzilla 4116: object.di does not match object_.d
- Bugzilla 4146: Unavailable: core.sys.posix.sys.wait.waitid()
- Bugzilla 4184: associative array with certain key types results in corrupt values during iteration
Version
D 2.044
Apr 30, 2010
New/Changed Features
- Improve spelling checking distance to 2.
- Now all unittests are run, even if some fail
- Many small improvements to error diagnostics and recovery
Bugs Fixed
- Bugzilla 1079: gdb: Dwarf Error: Cannot find DIE at 0xb705 referenced from DIE at 0x250
- Bugzilla 2437: ICE(tocsym.c, !needThis()) - default struct argument
- Bugzilla 2935: ICE(out.c) using struct with constructor as function default argument
- Bugzilla 2549: Segfault on array multiplication.
- Bugzilla 3066: Array operation without a slice as the lvalue accepted, bad codegen
- Bugzilla 3207: gdb: Push D patches upstream
- Bugzilla 3415: broken JSON output
- Bugzilla 3522: ICE(cg87.c): variable*array[].
- Bugzilla 3987: [gdb] Invalid DWARF output for function pointers
- Bugzilla 3974: ICE(init.c): Static array initializer with more elements than destination array
- Bugzilla 4036: Segfault with -inline and literal of struct containing union
- Bugzilla 4037: [gdb] Invalid DWARF output for wchar
- Bugzilla 4038: [gdb] Invalid DWARF output for function pointers with ref args
- Bugzilla 4067: [CTFE] Code inside try-catch blocks is silently ignored
- Bugzilla 4072: Stack overflow on recursive template expansion inside contract
- Bugzilla 4081: cannot compile the dmd on FreeBSD 8
- Bugzilla 4089: crash when creating JSON output for incomplete struct
- Bugzilla 4093: Segfault(interpret.c): with recursive struct templates
- Bugzilla 4105: Stack overflow involving alias template parameters and undefined identifier
- Bugzilla 4108: ICE(cod2.c): zero-length static array in function call
- Bugzilla 4118: std.conv.to!SomeStruct("hello") crashes compiler
- Bugzilla 4131: break does not work correctly with foreach and associative arrays
Version
D 2.043
Apr 6, 2010
New/Changed Features
- .init property for static arrays is now an array literal
- Improved speed of associative arrays
- std.bigint has been completely replaced with a faster implementation. Multiplication is now 5 times faster, division is 300 times faster, and squaring is 10 times faster. For large numbers (~5000 words), the speedup is 5 times larger than this.
Bugs Fixed
- Fixed memory corruption problem with array appends
- Bugzilla 122: DDoc newline behaviour produces suboptimal results
- Bugzilla 1628: Ddoc produces invalid documentation for --- blocks
- Bugzilla 2609: No documentation generated for destructor
- Bugzilla 3808: Assertion Failure : Assertion failure: 'classinfo->structsize == CLASSINFO_SIZE' on line 870 in file 'toobj.c'
- Bugzilla 3884: Segfault: defining a typedef with an invalid object.d
- Bugzilla 3911: Associative array in CTFE crashes compiler
- Bugzilla 3958: mixin(non-static method) crashes compiler
- Bugzilla 3972: Regarding module with name different from its file name
- Bugzilla 3984: Segfault(interpret.c): CTFE using struct constructor on a local static variable
- Bugzilla 3986: Struct constructors bypass default initialization of member variables
- Bugzilla 4002: dmd.conf and binary path in dmd -v output
- Bugzilla 4004: DMD 2.042 CTFE regression with functions taking ref parameters
- Bugzilla 4005: std.c.stdlib.exit in CTFE and more
- Bugzilla 4011: Incorrect function overloading using mixins
- Bugzilla 4019: [CTFE] Adding an item to an empty AA
- Bugzilla 4020: [ICE][CTFE] struct postblit in CTFE
- Bugzilla 4023: std.math.hypot() returns infinity when either argument is zero
- Bugzilla 4027: Closures in CTFE generate wrong code
- Bugzilla 4029: CTFE: cannot invoke delegate returned from function