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

previous version: 2.011 – next version: 2.013

Download D 2.012
released Mar 6, 2008

New/Changed Features

  • Added predefined version(unittest). See Bugzilla 458
  • Removed std.math2
  • Added compile time error for comparing class types against null.
  • Added struct destructors and postblits.
  • std.algorithm: Made some imports conditional for the Unittest version; fixed doc typo; made min and max always return the tightest type and work with mixes of signed and unsigned; changed enum value names to obey lowercase convention; changed OrderStrategy to SwapStrategy as it's not just for ordering (e.g. see eliminate).
  • std.bitmanip: simplified code generated for bitfields and improved error message.
  • std.format: ate dogfood: used bitfields internally.
  • std.functional: fixed binaryfun to work with constant-size arrays; added compose.
  • std.random: made unpredictableSeed return different numbers every call (except for rarely-encountered MT scenarios); added private variable name that will take experts millenia to figure out; changed the boundaries syntax from two separate characters '[', '(' to one string "[(" throughout.
  • std.traits: added mostNegative, mostly to assuage for the unpardonable mistake of inheriting C++'s unpardonable mistake of defining "min" to mean very different things for floating-point types and integral types.
  • std.typecons: added undocumented Rebindable in preparation for opImplicitCast.
  • std.math:
    • Support for different CPU IEEE 'real' formats: 64-bit, 80-bit and 128-bit (quadruple) reals, both BigEndian and LittleEndian; partial support for non-IEEE 'doubledouble' reals.
    • Added implementation of nextafter Bugzilla 1722 and scalb for DMD-Windows.
    • Added nextUp(), nextDown()
    • Bugzilla 1881: feqrel nonsensical for non-real arguments.
    • internal functions isPosZero(), isNegZero() removed in favour of the more generally useful isIdentical().
    • asm versions of functions which were not implemented by DMD Windows: scalb, lrint.
    • added creal expi(real y) which is useful for simultaneous calculation of sin + cos.

Bugs Fixed

  • std.contracts: fixed unlisted bug in pointsTo.
  • std.conv: fixed bug related to number-to-number conversion (T.min hits again).
  • Fixed dwarf bug with DT_AT_upper_bound
  • Bugzilla 756: IFTI for tuples only works if tuple parameter is last
  • Bugzilla 1454: IFTI cant deduce parameter if alias argument used
  • Bugzilla 1661: Not possible to specialize on template with integer parameter
  • Bugzilla 1800: Compiler crash on enums nested in structs
  • Bugzilla 1801: Const structs should be assignable to non-const variables unless they contain references
  • Bugzilla 1806: "const" makes typesafe variadic arguments not work properly.
  • Bugzilla 1809: template.c:2600
  • Bugzilla 1810: MmFile anonymous mapping does not work under win32
  • Bugzilla 1819: spurious warning about missing return statement after synchronized
  • Bugzilla 1821: ICE when using __traits isSame on const/invariant variables
  • Bugzilla 1823: Implicit conversion to const on associative array
  • Bugzilla 1828: Several Thread Issues
  • Bugzilla 1833: should use enums for constants, or be more selective about use of extern(Windows)
  • Bugzilla 1836: Inline assembler can't use enum values as parameters.
  • Bugzilla 1837: Make dmd stop flooding the console: prints content of passed parameter file
  • Bugzilla 1843: Bogus unreachable statement on forward referenced struct, lacks line number
  • Bugzilla 1850: The compiler accepts lower case asm registers.
  • Bugzilla 1851: missing opCall? when cast away const struct
  • Bugzilla 1852: you get opCall missing when cast to a struct(diagnostic)
  • Bugzilla 1853: opCmp documentation really needs some examples
  • Bugzilla 1854: bug in new flow analysis (warnings on valid code)
  • Bugzilla 1857: Runtime segfault while profileing - jump to invalid code address
  • Bugzilla 1862: asm: [ESI+1*EAX] should be a legal addr mode
  • Bugzilla 1865: Escape sequences are flawed.
  • Bugzilla 1867: lazy adds spurious const qualifier
  • Bugzilla 1871: DMD debug messages printed
  • Bugzilla 1873: structs with at least one immutable member are completely immutable
  • Bugzilla 1874: __traits(allMembers, T) fails to list methods which only have non-mutating overloads
  • Bugzilla 1876: inside a non-static class method, should "&( f)" be same as "&(this.f)" ?
  • Bugzilla 1877: Errors in the documentation of std.math.atan2
  • Bugzilla 1882: Internal error: ..\ztc\cod1.c 2529
  • Bugzilla 1883: templates instantiated as real gives incorrect values
  • Bugzilla 1884: manifest constants for strings
  • Bugzilla 1885: Syntax error for object identity test between invariant/mutable references
  • Bugzilla 1887: compiler freeze on array of dyn. arrays with empty first initializer
previous version: 2.011 – next version: 2.013