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
local clone.
Change Log: 2.054
Download D 2.054
released Jul 10, 2011
New/Changed Features
- Implement @safe
- Implement @property
- Automatic inference for @safe, pure, nothrow
- Allow labelled break and continue in CTFE
- Warn about switch case fallthrough
- Pointers are now supported in CTFE
- Heap-allocated structs are now supported in CTFE
- Added SSSE3 instructions to inline assembler
- Change from warning to deprecated: non-final switch statements must have a default statement
- Change from warning to deprecated: function is hidden by function
- Add warning about switch case fallthrough
- Add warning about calling pure nothrow functions and ignoring the result
- Allow associative arrays with key of type bool
- Added inference for purity and safety
- Change win32 dmd to not emit a map file unless asked for with -map
- Added -property switch
- Bugzilla 5823: @property call syntax restriction not implemented
- Added core.sys.posix.netdb
- For functions which have a version which takes a core.time.Duration and another version which takes an integral value, the version which takes an integral value is now scheduled for deprecation.
- std.array.insertInPlace supports inserting of multiple ranges/elements in one go
- Added std.array.uninitializedArray and std.array.minimallyInitializedArray
- Various functions in std.string were renamed to match Phobos' naming conventions and be properly camelcased. The old names are still there but have been scheduled for deprecation.
- Various functions in std.uni were renamed so that they don't have "Uni" in their name, since it was decided that it was not desirable to repeat a module's name in its functions' names. The old names are still there but have been scheduled for deprecation.
- std.ctype has been scheduled for deprecation. std.ascii has been added to replace it.
- Major performance improvements for std.algorithm.sort
- std.string.atoi has been removed; replace it with std.conv.to!int
- Switched to using posix.mak instead of various .mak files
Druntime Bugs Fixed
- Bugzilla 4323: std.demangle incorrectly handles template floating point numbers
- Bugzilla 5272: Postblit not called on copying due to array append
- Bugzilla 5956: Undocumented mangling of struct value
- Bugzilla 6135: Thread/GC interaction bug on OS X
Library Bugs Fixed
- Bugzilla 2108: regexp.d: The greedy dotstar isn't so greedy
- Bugzilla 3136: Incorrect and strange behavior of std.regexp.RegExp if using a pattern with optional prefix and suffix longer than 1 char
- Bugzilla 3457: rdmd fails silently in a particular setup where the compiler is not the expected
- Bugzilla 3479: writef/writefln: positional precision not working
- Bugzilla 3564: Rdmd failing to link external C libraries
- Bugzilla 3752: File.byLine fetches lines in a confusing manner
- Bugzilla 4367: std.regex: Captures is not a random access range
- Bugzilla 4574: std.regex: breaks with empy string regex
- Bugzilla 4608: std.string.chomp documentation mismatch implementation
- Bugzilla 5019: In std.regex, empty capture at end of string causes error
- Bugzilla 5059: String assignment in foreach loop breaks immutability
- Bugzilla 5458: scope for function parameters is not documented
- Bugzilla 5511: std.regex optional capture with no-match cause error
- Bugzilla 5598: rdmd does not fail on invalid filename
- Bugzilla 5673: Add lookahead and forgetful matching support std.regex
- Bugzilla 5705: Swapping identical struct with hasElaborateAssign causes "overlapping array copy" exception
- Bugzilla 5836: std.typetuple.staticIndexOf's example code missing %s in call to writefln
- Bugzilla 5857: std.regex (...){n,m} is bogus when (...) contains repetitions
- Bugzilla 5869: std.thread needs to be removed
- Bugzilla 6026: DLL example needs update due to missing core.dll_helper
- Bugzilla 6076: regression, std.regex: "c.*|d" matches "mm"
- Bugzilla 6101: Documentation for dead modules still distributed with DMD
- Bugzilla 6113: singletons in std.datetime are not created early enough
- Bugzilla 6193: Appender.clear() functionality or documentation
DMD Bugs Fixed
- Bugzilla 693: 'this' can't be used as an alias parameter for a mixin
- Bugzilla 1373: typeof(func).stringof fails when func has parameters.
- Bugzilla 1411: ref Tuple should transform to Tuple of ref's
- Bugzilla 1570: Wrong return for address operator
- Bugzilla 2180: filename error with #line
- Bugzilla 2521: Not possible to return immutable value by ref
- Temp destructors now called if exception is thrown
- Bugzilla 2625: Creating new struct with literal bypasses immutability of members if struct is in array
- Bugzilla 3147: Incorrect value range propagation for addition
- Bugzilla 3359: Cannot parse pure/const/immutable functions with inferred return type
- Bugzilla 3445: partial fix
- Bugzilla 3511: ref return property confused with property setter
- Bugzilla 3632: modify float is float to do a bitwise compare
- Bugzilla 3688: Can't have declaration with assignment to const/immutable inside if condition
- Bugzilla 3722: A method without an in contract should always succeed, even if overridden
- Bugzilla 3799: isStaticFunction trait evaluates to true for non-static nested functions
- Bugzilla 4031: Should be able to access const value-type globals from pure functions
- Bugzilla 4040: const/immutable on the right in auto return class methods
- Bugzilla 4063: [CTFE] key not found in AA gives bad error message
- Bugzilla 4065: [CTFE] AA "in" operator doesn't work
- Bugzilla 4107: Duplicate documentation for member function templates
- Bugzilla 4132: pointer arithmetic accepted in @safe functions
- Bugzilla 4170: Missing line number on compile-time array index
- Bugzilla 4258: "auto ref" doesn't work in one or more cases
- Bugzilla 4448: [CTFE] labeled break doesn't work in CTFE
- Bugzilla 4494: ICE(cod1.c) Array literal filled with results of void function
- Bugzilla 4633: typeof({return 1;}()) declaration fails if inside main
- Bugzilla 4661: Array Literal Incompatible Type Error Msg Should Include Line Number
- Bugzilla 4706: Overloading auto return w/ non-auto return = strange error msg
- Bugzilla 4745: Non-uniform handling of commas in static initialization of structs
- Bugzilla 4885: Uninitialize Pointers Allowed in @safe code
- Bugzilla 4910: [CTFE] Cannot evaluate a function that has failed at once
- Bugzilla 4963: ICE(type.c:320) for struct append where T.sizeof < 3
- Bugzilla 4969: nothrow check can't handle multiple catches
- Bugzilla 5088: Cannot cast const(int) to long in @safe function
- Bugzilla 5258: [CTFE] Stack overflow with struct by ref
- Bugzilla 5284: Array ops punch through const system
- Bugzilla 5327: Creating new struct with literal bypasses immutability of members of members of the struct
- Bugzilla 5396: [CTFE] Invalid code with nested functions in CTFE
- Bugzilla 5415: @Safe functions not working
- Bugzilla 5497: -- now produces error message instead of wrong code
- Bugzilla 5551: opUnary-opBinary conflict
- Bugzilla 5574: Struct destructor freaks out when an array of struct with single element is instantiated inside a class
- Bugzilla 5615: [CTFE] std.string.indexOf broken at compile time
- Bugzilla 5633: [CTFE] ICE(constfold.c): is expression with struct, struct pointer, array literal...
- Bugzilla 5657: Temporary object destruction
- Bugzilla 5659: Conditional operator, array literal, and std.traits.CommonType return a wrong common type
- Bugzilla 5676: [CTFE] segfault using tuple containing struct that has opAssign
- Bugzilla 5682: [CTFE] Silently wrong result possibly related to operator overloading and expression order
- Bugzilla 5693: Segfault with address of template struct opCall
- Bugzilla 5708: [CTFE] Incorrect string constant folding with -inline
- Bugzilla 5771: Template constructor and auto ref do not work
- Bugzilla 5819: DMD doesn't error/warn about illegal asm for 64bit mode
- Bugzilla 5845: Regression(2.041) [CTFE] "stack overflow" with recursive ref argument
- Bugzilla 5856: overloading on const doesn't work for operator overload
- Bugzilla 5859: Declaration inside if condition doesn't call destructor
- Bugzilla 5861: Wrong filename in error message when an invalid delegate in a template parameter is typeof()-ed
- Bugzilla 5885: wrong codegen for OPu32_d
- Bugzilla 5897: unrelated struct type casting should ignite construction
- Bugzilla 5936: Invalid code with nested functions in CTFE
- Bugzilla 5946: failing lookup 'this' from function in template
- Bugzilla 5954: [CTFE] enum structs with ctor
- Bugzilla 5959: Return by reference with nested function should be allowed
- Bugzilla 5962: Template function declaration with prefixed storage class and auto occurs conflict
- Bugzilla 5963: iasm does not accept 64bit integer literal
- Bugzilla 6001: [CTFE] ICE(interpret.c) mutating ref array
- Bugzilla 6015: [CTFE] Strange behavior of assignment appears in a situation
- Bugzilla 6049: [CTFE] Array literals of structs with invariant() are wrong
- Bugzilla 6052: [CTFE] Struct elements in an array are treated like reference type
- Bugzilla 6053: [CTFE] Two ICEs involving pointers (dereference and assign; pointer variable on stack)
- Bugzilla 6054: [CTFE] ICE when returning a returned compile-time associative array containing a key of an idup-ed array literal
- Bugzilla 6059: Incompatible types in array literal shows __error and error
- Bugzilla 6072: [CTFE] Regression(git master): Cannot declare variable inside an 'if' condition
- Bugzilla 6075: Cannot set value to associative array from a weakly-pure function when the value type has a (pure) opAssign
- Bugzilla 6077: [CTFE] Cannot append null array to null array.
- Bugzilla 6078: [CTFE] ICE on foreach over array struct member which is null
- Bugzilla 6079: [CTFE] Array index out of bound detection is off-by-one
- Bugzilla 6090: DDoc parenthesis escape issues.
- Bugzilla 6100: [CTFE] Regression: struct return values wrong if used in array initializer
- Bugzilla 6109: 'nothrow' does not check slice indices
- Bugzilla 6111: Escaping reference to local variable not detected
- Bugzilla 6119: Assertion failure: '0' on line 1118 in file 'glue.c'
- Bugzilla 6120: [CTFE] ICE on calling constructor of template struct with -inline in function/delegate literal.
- Bugzilla 6123: [CTFE] Cannot call a template member method inside delegate/function literal with -inline.
- Bugzilla 6137: [CTFE] Foreach on semantically wrong initialized array crashes the compiler
- Bugzilla 6145: Meaningless second error message for complex size of static array
- Bugzilla 6150: runnable/testsocket.d
- Bugzilla 6158: winsamp and dhry samples need an update
- Bugzilla 6161: iasm opcode family Jcc use absolute address instead of relative for functions
- Bugzilla 6164: [CTFE] Local arrays in a recursive local function behave funny
- Bugzilla 6198: [GSoC] ICE(e2ir.c) With circular import
- Bugzilla 6229: %= and /= no longer work on char type
- Bugzilla 6230: Member functions can no longer be weakly pure
- Bugzilla 6234: 64-bit array append generates inline code to copy new data, but does not call postblit
- Bugzilla 6241: test sdtor.d on osx not catching
- Bugzilla 6242: Disallow inoperant "in" contracts
- Bugzilla 6264: ICE on testing opSlice in static if
- Bugzilla 6267: Can't increment alias this'd struct from ref return
- Bugzilla 6279: Regression(2.054 beta): array-vararg with pointer type not working in safe code