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.054

previous version: 2.053 – next version: 2.055

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

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
previous version: 2.053 – next version: 2.055