www.digitalmars.com

D Programming Language 2.0


Last update Sun Apr 19 15:50:33 2009

D Change Log

Version D 2.029 Apr 19, 2009

New/Changed Phobos

  • std.algorithm
    • Everything converted to ranges. Big disruption. Algorithms added.
  • std.array
    • Range primitives for arrays
    • Appender template
    • insert, replace functions
  • std.bitmanip
    • Bitfields of length 0 are defined to be always 0.
    • The read functions for bitfields are const.
  • std.contracts
    • enforce accepts const(char)[] instead of string
    • Added enforce overload that invokes a delegate on failure
    • Added assumeSorted template
    • Added structuralCast that implements, well, structural casting (incomplete).
  • std.conv
    • Rewrote conversions with constrained templates.
    • Added text() function that transforms everything into text.
  • std.date
    • Added a benchmark function that allows for simple timing measurements.
  • std.file
    • read, write, append, rename, remove, getSize, getTimes, getAttributes, isfile, isdir, chdir, mkdir, mkdirRecurse, rmdir, listdir, copy, take filename(s) by "in char[]"
    • Added function readText that reads and validates a text file
    • Added function slurp that reads a file into an array of tuples. Example:
      auto a = slurp!(int, double)("filename", "%s, %s");
      
      Each line in the file looks like e.g. "1, 2.3". slurp returns an array of Tuple!(int, double) with the parsed content.
  • std.format
    • Added vector parsing and printing with the specifier "%()". For example, writefln("[%(s; )]", [1, 2, 3][]) writes "[1; 2; 3]". This support is experimental and may be changed in the future.
    • Added a formattedRead function (i.e., scanf that doesn't suck). The implementation is incomplete but common cases are supported.
  • std.functional
    • Improved error messages
    • Added configurable parameter names for functions as strings
    • Added Adjoin template
  • std.getopt
    • Added support for parameterless delegates
  • std.mmfile
    • Minor cosmetic changes
  • std.numeric
    • Added type CustomFloat that allows defining specialized floating-point numbers (e.g. 16-bit floats, positive floats etc.)
    • Added FPTemporary as the best type to store temporary values.
    • Templatized oppositeSigns
    • Added Euclidean distance
    • Added dotProduct
    • Added cosineSimilarity
    • Added normalize
    • Added string kernel functions gapWeightedSimilarity, gapWeightedSimilarityNormalized, gapWeightedSimilarityIncremental.
  • std.outbuffer
    • Added a few missing overloads of write()
  • std.path
    • getDrive now works with all string types
    • isabs accepts in char[]
    • join accepts variadic in char[]
    • fnmatch works with in char[]
  • std.random
    • Added RandomCover that covers a given range in a random manner
    • Eliminated the old-fashioned random functions
    • Defined a default random object that simplifies calls to the random functions
    • Changed generators to obey the range interface. So now you can write:
      Random r;
      foreach (n; take(100, uniform(0, 100))) { ... }
      
  • std.range (new file)
    • Range manipulation stuff.
  • std.regex (new file)
    • Regular expression library with wide char support, simplified interface, better speed etc.
  • std.regexp
    • Scheduled for deprecation. Use std.regex instead.
  • std.stdio
    • Major breaking changes: introduced the File struct. Now stdin, stdout, stderr are instances of the File struct.
    • Due to bugs in the compiler, the copy constructor and destructor of File are commented out. Walter will look into fixing the issues soon. File should work fine, but you need to close it manually.
    • A byRecord iteration mode makes it pretty easy to iterate structured text files.
    • writef and writefln now require a string as their first argument.
  • std.string
    • strip, stripl, stripr, startsWith, endsWith now work with any string type
  • std.typecons
    • Added constructors, assignment operator, length, toString, and slice to Tuple.
  • std.utf
    • toUTF16z accepts in char[]
  • std.variant
    • Added support for Variants that contain vectors and hashes of themselves
  • std.c.stdio
    • Added fopen64 and friends

New/Changed Features

  • Added template function literals

Bugs Fixed

Version D 2.028 Apr 7, 2009

New/Changed Features

Bugs Fixed

Version D 2.027 Mar 31, 2009

New/Changed Features

  • Most functions in std.math are now pure nothrow. Improved speed of std.math.hypot.
  • Added response files for Linux and OSX
  • Added alias this
  • Bugzilla 2746: Make float.init signalling NaN by default
  • On Windows, if there are multiple source files on the command line they are now read with a background thread. This may speed up compilation.
  • Folded in patches for LDC compatibility from Tomas Lindquist Olsen
  • Removed etc.gamma from the library.

Bugs Fixed

  • std.math.hypot is wrong for subnormal arguments
  • Fix bug where / wasn't recognized as a path separator on Windows.
  • Bugzilla 920: Fix one more out of date reference to 'auto' rather than 'scope'
  • Bugzilla 1645: can override base class' const method with non-const method
  • Bugzilla 2319: "Win32 Exception" not very useful
  • Bugzilla 2336: link to nonexistent std_array.html
  • Bugzilla 2570: Patch for some mistakes in Ddoc comments
  • Bugzilla 2574: std.c.stdio doesn't compile: va_list not defined!
  • Bugzilla 2591: custom allocator new argument should be size_t instead of uint
  • Bugzilla 2595: template ctors crash compiler
  • Bugzilla 2596: Variadic constructors don't compile
  • Bugzilla 2626: template function not working against template struct instantiated with default arguments
  • Bugzilla 2674: Copy postblit constructor this(this) not called for members
  • Bugzilla 2689: seek behaves incorrectly on MAC OSX
  • Bugzilla 2692: alignment of double on x86 linux is incorrect
  • Bugzilla 2700: typeof tests stops compilation abruptly
  • Bugzilla 2705: Response file size cannot exceed 64kb
  • Bugzilla 2711: -H produces bad headers files if function defintion is templated and have auto return value
  • Bugzilla 2722: ICE with variadic template parameters
  • Bugzilla 2723: ICE with variadic template parameters, different case
  • Bugzilla 2724: Persistent segfaults in templated code
  • Bugzilla 2725: Pattern matching in static if not working with variadic arguments
  • Bugzilla 2727: std.date Cyclic dependency
  • Bugzilla 2728: Bogus Error message on const ref return
  • Bugzilla 2729: hash_t undocumented and unnecessary
  • Bugzilla 2730: Restriction on op= can be lifted
  • Bugzilla 2731: Errors in associative array example
  • Bugzilla 2739: _argptr is invalid for functions nested in class methods
  • Bugzilla 2743: dumpobj gives "buss error" on Tiger
  • Bugzilla 2744: wrong init tocbuffer of forstatement
  • Bugzilla 2745: missing token tochars in lexer.c
  • Bugzilla 2747: improper toCBuffer of funcexp
  • Bugzilla 2750: Optimize slice copy with size known at compile time
  • Bugzilla 2751: incorrect scope storage class vardeclaration tocbuffer
  • Bugzilla 2752: std.xml does not encode CData correctly
  • Bugzilla 2754: The error message regarding implicit conversion to shared doesn't mention shared in the message.
  • Bugzilla 2755: ICE on invalid ref returns in linked objects: Assertion failure: 'type' on line 6566 in file 'expression.c'. No ICE or error if invalid code is local to the file.
  • Bugzilla 2756: Bad code generation for pure nothrow math functions
  • Bugzilla 2761: Unreachable statement warning in std.string
  • Bugzilla 2763: std.mangle.demangle not translating 'ya'
  • Bugzilla 2766: DMD hangs with 0%cpu
  • Bugzilla 2767: DMD incorrectly mangles NTFS stream names
  • Bugzilla 2772: lib can't open response file
Version D 2.026 Mar 3, 2009

New/Changed Features

  • Escape string literals deprecated, see Bugzilla 2658
  • Tripled speed of exp, expm1, and exp2. std.math is now less dependent on the C standard library.
  • Added nested structs.
  • Added buildable dmd source.
  • Many changes to std.math for speed, accuracy, and Tango compatibility:
    • Improved accuracy of exp, expm1, exp2, sinh, cosh, tanh on Mac OSX, and tripled speed on all platforms.
    • Now using IEEE754-2008 camelCase names for isNaN, isFinite, isNormal, isSubnormal, isInfinity. Aliases for the old names have been retained.
    • The non-functional nan(char[]) is replaced with NaN, getNaNpayload.

Bugs Fixed

Version D 2.025 Feb 14, 2009

New/Changed Features

  • Added Mac OSX support.
  • Separated bin and lib directories into windows, linux, and osx.
  • No longer need to download dmc to use the windows version.
  • Use version(OSX) for Mac OSX. Although version(darwin) is also supported for the time being, it is deprecated.

Bugs Fixed

Version D 2.023 Jan 2, 2009

New/Changed Features

  • Improved speed of long division.
  • Optimizer now takes advantage of immutable and pure.
  • Added predefined version D_Ddoc which is predefined when -D switch is thrown.
  • the type of a string literal is now invariant(char)[] rather than invariant(char)[length_of_string]. It is still implicitly convertible to the latter. This is intended to reduce template instantiation bloat.
  • Undid fix for Bugzilla 2500, as the fix was arguably worse than the bug.

Bugs Fixed

  • Bugzilla 1078: Frontend uses of 'auto' where 'scope' should be used
  • Bugzilla 2517: DDoc omits abstract on classes
  • Bugzilla 2518: scope(success) not execuate and RAII variable destructor is not called
  • Bugzilla 2519: Segfault when >> used in an invalid slice
  • Bugzilla 2527: Alias Template Params Are Always Same Type As First Instantiation (according to typeof(x).stringof)
  • Bugzilla 2531: DDoc not generated correctly for struct methods inside static if
  • Bugzilla 2533: compiler falls with "assertion failed" message on wrong code
  • Bugzilla 2534: dmd.conf is wrong
  • Bugzilla 2537: compiler crashes on this code:
  • Bugzilla 2541: cannot use aliased type for decl of foreach variable
  • Bugzilla 2542: array casts behave differently at compile and runtime
Version D 2.022 Dec 11, 2008

New/Changed Features

  • Changed IUnknown to use the extern(System) interface rather that extern(Windows).
  • Pure functions now get semantically checked.
  • Nothrow functions now get semantically checked.
  • shared is now a type constructor.

Bugs Fixed

  • Bugzilla 1518: Crash using 'scope', 'with' and undefined 'RegExp'
  • Bugzilla 1649: Variant coercion fails with delegates
  • Bugzilla 1685: Array index is evaluated twice
  • Bugzilla 1933: Delimited string constants can cause segfault
  • Bugzilla 1963: -H creates broken headers
  • Bugzilla 2041: Spec implies relationship between interfaces and COM objects
  • Bugzilla 2105: added patch
  • Bugzilla 2441: header file generation translates enum to manifest
  • Bugzilla 2468: result type of AndAndExp and OrOrExp deduced incorrectly
  • Bugzilla 2489: import in struct causes assertion failure
  • Bugzilla 2490: extern(C++) can not handle structs as return types
  • Bugzilla 2491: druntime GC wrongly frees data pointed to by TLS.
  • Bugzilla 2492: ICE building on Linux with -lib option
  • Bugzilla 2499: Template alias default value cannot be template instantiation
  • Bugzilla 2500: template struct methods are left unresolved if imported from multiple modules
  • Bugzilla 2501: member function marked as final override ignores override requirements
  • Bugzilla 2503: Error 42: Symbol Undefined _D3std7process6systemFAyaZi
  • Bugzilla 2506: Can't initialize const member in ctor if it is accessed via this.member syntax
  • Incorporated some of the patches from Bugzilla 1752
  • extern __thread now works on Linux.
Version D 2.021 Nov 25, 2008

New/Changed Features

  • Added -safe switch and module(system) Identifier; syntax.
  • Added range support to foreach statement.
  • scope parameter storage class means the parameter will not 'escape' the scope of the function invocation. Using this for delegate parameters will prevent some closure allocations by the calling function.
  • The lazy storage class now implies scope so that lazy arguments won't trigger a heap allocated closure.
  • The 'this' parameter to struct member functions is now a reference type, rather than a pointer. This breaks existing code.
  • More changes to druntime:
    from to
    OutOfMemoryException OutOfMemoryError
    SwitchException SwitchError
    HiddenFuncException HiddenFuncError
    ArrayBoundsException RangeError
    AssertException AssertError
    FinalizeException FinalizeError
    onArrayBoundsError onRangeError
    stdc.* core.stdc.*
    sys.* core.sys.*
  • Added core.runtime.loadLibrary() as an experimental feature for loading dynamic libraries (Win32 only at the moment).
  • Added core.runtime.unloadLibrary() as an experimental feature for unloading dynamic libraries previously loaded by loadLibrary().
  • core.thread.sleep() accepts a long integer specifying the sleep interval in 100 nanosecond intervals (the previous release notes said this was a float, IIRC).
  • It is no longer necessary to link in druntime separately, it is inserted into libphobos2.a.

Bugs Fixed

  • Bugzilla 313: Fully qualified names bypass private imports
  • Bugzilla 920: SPEC: Auto classes referenced where scope should be used
  • Bugzilla 929: Resizing array of associative arrays (uint[char[]][]) causes infinite loop / hang
  • Bugzilla 1372: Compiler accepts pragma(msg,)
  • Bugzilla 1610: Enum.stringof is int, not the name of the enum
  • Bugzilla 1663: pragma(lib, "") don't work on linux
  • Bugzilla 1797: Documentation comments - ///
  • Bugzilla 2428: Accessing item in enum'd array produced compiler error
  • Bugzilla 2429: std.stream.File incorrect flag parsing and sharing mode
  • Bugzilla 2431: Internal error: ../ztc/cgcod.c 1031 when using -O
  • Bugzilla 2470: Cannot build libraries from other libraries
  • unittest functions now always use D linkage
Version D 2.020 Oct 20, 2008

New/Changed Features

  • Improved performance of AAs by rebalancing trees when rehashing.
  • immutable now is implemented.
  • Bugzilla 2344: Two wrong lookups for array functions
  • Bugzilla 2345: Return by reference should be allowed
  • Posix is now a predefined identifier when compiling under Linux
  • Based on Sean Kelly's hard work, Phobos has been split into two libraries, druntime.lib and phobos.lib. This will enable better integration with Tango. The user source code changes are:
    from to
    bit bool
    _d_OutOfMemory() onOutOfMemoryError()
    import std.asserterror; import core.exception;
    import std.hiddenfunc; import core.exception;
    import std.switcherr; import core.exception;
    import std.array; import core.exception;
    import std.outofmemory; import core.exception;
    import std.gc; import core.memory;
    import std.thread; import core.thread;
    SwitchError SwitchException
    AssertError AssertException
    HiddenFuncError HiddenFuncException
    ArrayBoundsError ArrayBoundsException
    std.gc.fullCollect() GC.collect()
    std.gc.*() memory.gc_*()
    _moduleUnitTests() import runtime; runModuleUnitTests()
    printf add import std.c.stdio;
    Changes to thread:
    • The thread handle isn't exposed to the user. This can always be obtained using the appropriate OS calls from within the thread.
    • There is no druntime equivalent for Thread.pause() and Thread.resume(). The closest is thread_suspendAll() and thread_resumeAll()--extern (C) calls meant for use by the GC.
    • Thread.wait() is renamed to Thread.join().
    • Sleep functionality is available as Thread.sleep(double), where the parameter represents the number of seconds to sleep (fractional values accepted, obviously).
    This is a big change, and expect some problems for a release or two with this.

Bugs Fixed

  • Bugzilla 1229: Linker fills disk
  • Bugzilla 2332: Initializing const or invariant hashes croaks
  • Bugzilla 2333: Hash initializer does not work
  • Bugzilla 2336: link to nonexistent std_array.html
  • Bugzilla 2340: Template properties don't work
  • Bugzilla 2341: Double destruction without intervening copy
  • Bugzilla 2362: Confusing description of 'aliasing of invariant with mutable'?
  • Bugzilla 2363: Spurious () required after function name when used with array in prefix form
  • Bugzilla 2366: Const member function syntax is missing
  • Bugzilla 2368: Calling a function with an address of another function, then calling a returned object is rejected
  • Bugzilla 2373: freebsd select does not accept values > 999,999
  • Bugzilla 2376: CTFE fails on array literal of array literals of chars
  • Bugzilla 2380: static struct initializer accepted as non static initializer is not documented
  • Bugzilla 2383: default arguments can implicitly access private global variables that are not visible at call site
  • Bugzilla 2385: spec says all structs are returned via hidden pointer on linux, but it uses registers
  • Bugzilla 2390: Missing warning on conversion from int to char
Version D 2.019 Sep 2, 2008

New/Changed Features

  • Added struct constructors.
  • Special member functions _ctor, _dtor, etc., now have two leading _ in order to not conflict with the user identifier space.

Bugs Fixed

Version D 2.018 Aug 7, 2008

New/Changed Features

Bugs Fixed

  • Added hash to generated module names when building libs to reduce collisions
  • Bugzilla 1622: parameters to TypeInfo_Struct.compare seem to be switched around.
  • Bugzilla 1644: Template instantiation should automatically cast to const to make const-ness irrelevant when argument is const anyways
  • Bugzilla 2216: bad code generation for static arrays of zero length static arrays
  • Bugzilla 2223: Typo in error message
  • Bugzilla 2231: missing bigint document
  • Bugzilla 2242: linux system calls are canceled by GC
  • Bugzilla 2247: bad header file generated for if (auto o = ...) {}
  • Bugzilla 2248: .di should be a supported file extension
  • Bugzilla 2250: Update of user32.lib and kernel32.lib
  • Bugzilla 2254: Size of executable almost triples
  • Bugzilla 2258: Docs -> Inline Assembler -> Operand Types -> qword missing
  • Bugzilla 2259: Assertion failure: '0' on line 122 in file 'statement.c'
  • Bugzilla 2266: opEquals documentation still says it returns int
  • Bugzilla 2269: D BUG: cosine of complex
  • Bugzilla 2272: synchronized attribute documentation
  • Bugzilla 2273: Whitespace is not inserted after commas
Version D 2.017 Jul 11, 2008

New/Changed Features

Bugs Fixed

Version D 2.016 Jul 8, 2008

New/Changed Features

  • re-implemented internal.monitor in D. Rationalized internal.object
  • Bugzilla 288: changed return type of opEquals from int to bool. This necessitates doing a grep for opEquals and changing all the return values.
  • Added .__vptr and .__monitor properties for class objects for use in the internal runtime library.
  • Made rdmd's source available through svn, see http://dsource.org/projects/phobos/browser/trunk/tools/rdmd.d
  • Simplified std.algorithm by fusing together higher-order functions taking an alias and their counterparts taking a string
  • Added module std.array containing array operations: insert, erase, and replace
  • Changed the enforce's implementation to generate smaller code per call
  • Changed std.functional.binaryFun to work with strings and function aliases alike
  • In std.getopt, added optChar, assignChar, and endOfOptions, per popular demand :o|
  • In std.math, replaced a bunch of consts with enums
  • In std.numeric, added Don Clugston as author and operated minor documentation fixes
  • Improved std.stdio.chunks to take an iteration tally in addition to the chunk

Bugs Fixed

  • D.announce/12322: mixin regression
  • Bugzilla 203: std.format.doFormat() pads width incorrectly on Unicode strings
  • Bugzilla 211: Linking error with alias mixin params and anonymous methods
  • Bugzilla 224: Incorrect warning "no return at end of function"
  • Bugzilla 252: -w and switch returns = bogus "no return at end of function" warning
  • Bugzilla 253: Invalid <dl> tag generated by Ddoc
  • Bugzilla 294: DDoc: Function templates get double and incomplete documentation
  • Bugzilla 398: No way to abort compilation in a doubly recursive mixin
  • Bugzilla 423: dmd ignores empty commandline arguments
  • Bugzilla 515: Spec incorrect in where .offsetof can be applied
  • Bugzilla 520: Invariants allowed to call public functions
  • Bugzilla 542: Function parameter of a deprecated type (other than a class) is not caught
  • Bugzilla 543: Function return of a deprecated type is not caught
  • Bugzilla 544: Variable declared of a deprecated type (other than a class) is not caught
  • Bugzilla 545: Attempt to access a static built-in property of a deprecated struct, union, enum or typedef is not caught
  • Bugzilla 547: Accessing a deprecated member variable through an explicit object reference is not caught
  • Bugzilla 548: Accessing a value of a deprecated enum is not caught
  • Bugzilla 566: Adding non-static members and functions to classes using a template doesn't error
  • Bugzilla 570: Bogus recursive mixin error
  • Bugzilla 571: class instance member template returns strange value
  • Bugzilla 572: parse error when using template instantiation with typeof
  • Bugzilla 581: Error message w/o line number in dot-instantiated template
  • Bugzilla 617: IFTI doesn't use normal promotion rules for non-template parameters
  • Bugzilla 870: contradictory error messages for templates
  • Bugzilla 951: Missing line number: no constructor provided for a class derived from a class with no default constructor
  • Bugzilla 1097: Missing line number: casting array to array of different element size
  • Bugzilla 1158: Missing line number: invalid mixin outside function scope
  • Bugzilla 1176: Error missing file and line number
  • Bugzilla 1187: Segfault with syntax error in two-level mixin.
  • Bugzilla 1194: fcmov* emmits incorrect code
  • Bugzilla 1207: Documentation on destructors is confusing
  • Bugzilla 1341: typeof(int) should probably be legal
  • Bugzilla 1601: shr and shl error message is missing line numbers
  • Bugzilla 1612: No file/line number for using an undefined label in inline assembly
  • Bugzilla 1912: Error without line number (Tuple, invalid value argument)
  • Bugzilla 1936: Error with no line number (array dimension overflow)
  • Bugzilla 2076: asm: offset has wrong docs and error without line number
  • Bugzilla 2161: Modify compiler to pass array TypeInfo to _adEq and _adCmp instead of element TypeInfo
  • Bugzilla 2178: 3 errors without line number: typeof
  • Bugzilla 2188: man-or-boy test fails with access violation
  • Fixed bugs in std.file.rename and std.file.remove on Linux
  • Fixed documentation in std.typecons
Version D 2.015 Jun 17, 2008

New/Changed Features

Bugs Fixed

  • Bugzilla 1383: Implicit Function Instantiation with typesafe-variadic of delegates doesn't work
  • Bugzilla 1559: version statement makes code outside of it disappear
  • Bugzilla 1675: "Identifier too long" error with OMF object files
  • Bugzilla 1947: ICE (Assertion failure: '0' on statement.c:123) with null mixin
  • Bugzilla 1963: -H creates broken headers
  • Bugzilla 2098: Outdated docs
  • Bugzilla 2099: Text and Sample Code Disagree (non-static local invariant declaration)
  • Bugzilla 2112: the type of undefined variable incorrectly assumed to be int
  • Bugzilla 2118: Inconsistent use of string vs invariant(char[]) in doc
  • Bugzilla 2123: Anonymous class crashes
  • Bugzilla 2129: foreach won't work with invariant limits
  • Bugzilla 2132: CTFE: can't evaluate ~= at compile time, D2 only.
  • Bugzilla 2133: anonymous enum without {} doesn't work as asm value
  • Bugzilla 2136: typeof(super(...)) counted as a constructor call
  • Bugzilla 2140: static if as final statement with no code causes containing code to be skipped
  • Bugzilla 2143: Mixed-in identifier is not recognized by static if
  • Bugzilla 2144: 'is' is defined to be the same as '==' for non-class and non-array types, but does not call opEquals
  • Bugzilla 2145: Phobos buildsystem unable to build html
  • Bugzilla 2146: Multiple execution of 'static this' defined in template
  • Bugzilla 2149: Auto variables loose the keyword "auto" in di files generated with -H option.
Version D 2.014 May 16, 2008

New/Changed Features

  • Added -man switch to browse manual.
  • Added -lib switch to generate library files. Also causes multiple object files to be generated from one source module.
  • When generating an executable file, only one object file is now generated containing all the modules that were compiled, rather than one object file per module.
  • Rewrote the rdmd utility to properly track dependencies and command-line compiler options (currently only working under Linux).
  • Changed the Phobos makefile linux.mak to take advantage of the new -lib feature. Improved full build speed by 3x.
  • std.algorithm: Changed the map() function so that it deduces the return type. Also map can be now curried.
  • std.contracts: Added file and line information to enforce. Added errnoEnforce that formats the error message according to errno. Added corresponding ErrnoException class.
  • std.conv: Made std.to curryable. Changed std.to to throw exception when object-to-object cast fails. Eliminated some superfluous printfs.
  • std.encoding: Added new functions encodedLength(dchar) and encode(dchar, ref E[])
  • std.encoding: Got rid of types Utf8, Utf16, Utf32, Ascii, Latin1, Windows1252. Introduced types AsciiChar, AsciiString, Latin1Char, Latin1String, Windows1252Char, Windows1252String.
  • std.encoding: For now commented out std.encoding.to.
  • std.file: Changed Boolean function signatures (e.g. exists) to return bool instead of int. Got rid of some gotos. Added the readText, lastModified, mkdirRecurse, and rmdirRecurse functions.
  • std.functional: Improved compose so it accepts an unbounded number of functions. Added the pipe function.
  • std.getopt: Added new option stopOnFirstNonOption. Also automatically expand dubious option groups with embedded spaces in them (useful for shebang scripts)
  • std.math: improved integral powers
  • std.md5: Improved signature of sum so it takes multiple arrays. Added getDigestString.
  • std.path: changed signatures of test functions from bool to int. Implemented rel2abs for Windows. Improved join so that it accepts multiple paths. Got rid of some gotos with the help of scope statements.
  • std.process: added getenv and setenv. Improved system() so it returns the exit code correctly on Linux.
  • std.random: added the dice function - a handy (possibly biased) dice.
  • std.typecons: Finalized and documented the stupendous Rebindable template.
  • std.utf: added the codeLength function. Got rid of some gotos.

Bugs Fixed

  • std.format: Fixed unlisted bug in raw write for arrays
  • std.getopt: Fixed unlisted bug in dealing with one-letter options with bundling disabled
  • Bugzilla 2014: fopen fails on large files.
  • Bugzilla 2031: Documentation: template value parameters
  • Bugzilla 2032: Documentation for creating a class on the stack is unintuitive
  • Bugzilla 2037: Article on hijacking is outdated
  • Bugzilla 2038: Remove hello2.html from samples directory
  • Bugzilla 2039: -ignore switch is missing from compiler docs
  • Bugzilla 2054: Const system broken on struct assignment.
  • Bugzilla 2055: (ICE) Compiler crash on struct initializer with too many elements
  • Bugzilla 2056: Const system does not allow certain safe casts/conversions involving deep composite types
  • Bugzilla 2058: Describe hidden value passed to class member functions
  • Bugzilla 2063: std.xml access violation for nested, closed tags
  • Bugzilla 2065: Return value of std.file.exists() is inverted.
  • Bugzilla 2067: call from anonymous class makes access violation.
  • Bugzilla 2071: spec doesn't mention pointer arithmetic with two pointer operands
  • Bugzilla 2072: std.typecons documentation anomaly.
  • Bugzilla 2074: Variant arithmetic operations fail. For now the fix is to comment out all right-hand side operators. Suggestions for a better fix are welcome.
  • Bugzilla 2075: Spec does not specify how array literals are stored.
  • Bugzilla 2084: operator ?: does not compute the tightest type
  • Bugzilla 2086: Describe relationship between string and char[] more explicitly
  • Bugzilla 2089: Issues with CTFE and tuple indexes
  • Bugzilla 2090: Cannot alias a tuple member which is a template instance
  • Bugzilla 2100: Assertion failure: '0' on line 4842 in file 'expression.c'
  • Bugzilla 2109: asm {lea EAX, [0*0+EAX]; } rejected.
Version D 2.013 Apr 22, 2008

New/Changed Features

  • Added -ignore switch to ignore unsupported pragmas.
  • Unsupported pragmas now printed out with -v switch.
  • Added opDot, which is experimental only.
  • SwitchStatements can now accept runtime initialized const and invariant case statements.
  • Changed __FILE__ and __LINE__ so they work as parameter default initializers.
  • Incorporated Benjamin Shropshire's doc changes
  • Hidden methods now get a compile time warning rather than a runtime one.
  • Html source files are now deprecated.
  • Added pure and nothrow function attributes, although their semantics are not implemented.
  • Deprecated VolatileStatement; use SynchronizedStatement instead.
  • Added __thread storage class for thread local storage. This is for testing purposes only to check out the machinery in the back end. The front end design of this will change.
  • obj2asm and dumpobj now better handle special ELF fixup records.
  • Added partial ordering rules to disambiguate function overloading.
  • std.perf: Bill Baxter cleaned it up.
  • std.xml.Document constructor now creates whole DOM tree.
  • Added std.encoding.

Bugs Fixed

Version D 2.012 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: std.c.windows.windows 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
Version D 2.011 Feb 18, 2008

New/Changed Features

  • std.typecons: fixed code bloat issue; added Tuple.toString; added function tuple(); fixed unlisted bug in enumValuesImpl.
  • std.process: added function shell().
  • std.math: minor change in approxEqual.
  • std.contracts: added functions pointsTo()
  • std.numeric: minor unittest fixes.
  • std.bitmanip: fixed code bloat issue, reintroduced FloatRep and DoubleRep.
  • std.conv: minor simplification of implementation.
  • std.regexp: added reference to ECMA standard in the documentation.
  • std.getopt: changed return type from bool to void, error is signaled by use of exceptions.
  • std.functional: added unaryFun, binaryFun, adjoin.
  • std.string: updated documentation, changed code to compile with warnings enabled.
  • std.traits: changed FieldTypeTuple; added RepresentationTypeTuple, hasAliasing; fixed bug 1826; added call to flush() from within write; fixed unlisted bug in lines().
  • std.algorithm: added map, reduce, filter, inPlace, move, swap, overwriteAdjacent, find, findRange, findBoyerMoore, findAdjacent, findAmong, findAmongSorted, canFind, canFindAmong, canFindAmongSorted, count, equal, overlap, min, max, mismatch, EditOp, none, substitute, insert, remove, levenshteinDistance, levenshteinDistanceAndPath, copy, copyIf, iterSwap, swapRanges, reverse, rotate, SwapStrategy, Unstable, Semistable, Stable, eliminate, partition, nthElement, sort, schwartzSort, partialSort, isSorted, makeIndex, schwartzMakeIndex, lowerBound, upperBound, equalRange, canFindSorted.
  • std.thread: fixed so it compiles with warnings enabled.
  • std.file: made getSize() faster under Linux.
  • std.random: fixed so it compiles with warnings enabled; improved function uniform so it deduces type generated from its arguments.
  • std.format: added fixes to make formatting work with const data.
  • std.path: minor documentation changes.
  • Added std.xml
  • Added std.complex
  • Added std.iterator
  • Added std.c.linux.tipc
  • Added std.c.linux.termios
  • Added nothrow keyword
  • Re-enabled auto interfaces.
  • Now allow static arrays to be lvalues.
  • Now allows implicit casting of null to/from const/invariant.
  • Now allows implicit casting of StructLiterals if each of its arguments can be implicitly cast.
  • Now allows implicit casting of structs to/from const/invariant if each of its fields can be.
  • Added pragma startaddress.
  • .tupleof can now access private fields of a struct/class
  • Enhancement Bugzilla 493: Partial IFTI does not work

Bugs Fixed

  • Fixed D/66406 Remaining const niggles #1 - Custom POD types
  • Fixed display of ddoc template parameters that were aliased
  • Fixed bug in std.file.readln() for Windows in translated mode
  • Bugzilla 1072: CTFE: crash on for loop with blank increment
  • Bugzilla 1435: DDoc: Don't apply DDOC_PSYMBOL everywhere
  • Bugzilla 1815: foreach with interval does not increment pointers correctly
  • Bugzilla 1825: local instantiation and function nesting
  • Bugzilla 1837: Make dmd stop flooding the console: prints content of passed parameter file
  • Bugzilla 1842: Useless linker command line output during compilation on Linux
Version D 2.010 Jan 20, 2008

New/Changed Features

  • opAssign can no longer be overloaded for class objects.
  • WinMain and DllMain can now be in template mixins.
  • Added pure keyword.

Bugs Fixed

Version D 2.009 Jan 1, 2008

New/Changed Features

  • Redid const/invariant semantics again.
  • Extended enums to allow declaration of manifest constants.

Bugs Fixed

Version D 2.008 Nov 27, 2007

New/Changed Features

  • std.string: Made munch more general and added function chompPrefix.
  • std.variant: Added documentation for variantArray
  • std.traits: Added CommonType template, fixed isStaticArray.
  • std.bitarray: scheduled for deprecation
  • std.bitmanip: new module with the content of std.bitarray plus the bitfields, FloatRep, and DoubleRep templates
  • std.process: Made getpid visible in Linux builds
  • std.math: Made nextafter visible for all floating types. Added approxEqual template.
  • std.contracts: Added enforce signature taking an exception
  • std.conv: Made conv_error a template parameterized on the types being converted.
  • std.stdio: Cosmetic changes.
  • std.system: Cosmetic changes.
  • std.file: Fixed bug in function dirEntries.
  • std.random: Major addition of engines and distributions.
  • std.format: Added raw ('r') format specifier for writef*.
  • std.path: Added rel2abs (Linux version only).
  • std.algorithm: new module
  • std.typecons: new module
  • std.functional: new module
  • std.numeric: new module
  • Added const/invariant structs, classes and interfaces.
  • Added const and invariant to IsExpressions.
  • Added typeof(return) type specifier.
  • Changed the way coverage analysis is done so it is independent of order dependencies among modules.
  • Revamped const/invariant.

Bugs Fixed

  • Bugzilla 70: valgrind: Conditional jump or move depends on uninitialised value(s) in elf_findstr
  • Bugzilla 71: valgrind: Invalid read of size 4 in elf_renumbersyms
  • Bugzilla 204: Error message on attempting to instantiate an abstract class needs to be improved
  • Bugzilla 1508: dmd/linux template symbol issues
  • Bugzilla 1651: .di file generated with -H switch does not translate function() arguments correctly
  • Bugzilla 1655: Internal error: ..\ztc\cgcod.c 1817
  • Bugzilla 1656: illegal declaration accepted
  • Bugzilla 1664: (1.23).stringof generates bad code
  • Bugzilla 1665: Internal error: ..\ztc\cod2.c 411
Version D 2.007 Oct 31, 2007

New/Changed Features

  • Functors now supported by std.traits.ReturnType().
  • Transitive const now leaves invariants intact in the tail.
  • Added overloadable unary * operation as opStar().
  • Full closure support added.
  • Data items in static data segment >= 16 bytes in size are now paragraph aligned.

Bugs Fixed

  • Variables of type void[0] can now be declared.
  • Static multidimensional arrays can now be initialized with other matching static multidimensional arrays.
  • Bugzilla 318: wait does not release thread resources on Linux
  • Bugzilla 322: Spawning threads which allocate and free memory leads to pause error on collect
  • Bugzilla 645: Race condition in std.thread.Thread.pauseAll
  • Bugzilla 689: Clean up the spec printfs!
  • Bugzilla 697: No const folding on asm db,dw, etc
  • Bugzilla 706: incorrect type deduction for array literals in functions
  • Bugzilla 708: inline assembler: "CVTPS2PI mm, xmm/m128" fails to compile
  • Bugzilla 709: inline assembler: "CVTPD2PI mm, xmm/m128" fails to compile
  • Bugzilla 718: Internal error: ../ztc/cgcod.c 562
  • Bugzilla 723: bad mixin of class definitions at function level: func.c:535: virtual void FuncDeclaration::semantic3(Scope*): Assertion `0' failed
  • Bugzilla 725: expression.c:6516: virtual Expression* MinAssignExp::semantic(Scope*): Assertion `e2->type->isfloating()' failed.
  • Bugzilla 726: incorrect error line for "override" mixin
  • Bugzilla 729: scope(...) statement in SwitchBody causes compiler to segfault
  • Bugzilla 1258: Garbage collector loses memory upon array concatenation
  • Bugzilla 1480: std.stream throws the new override warning all over the place
  • Bugzilla 1483: Errors in threads not directed to stderr
  • Bugzilla 1557: std.zlib allocates void[]s instead of ubyte[]s, causing leaks.
  • Bugzilla 1580: concatenating invariant based strings should work
  • Bugzilla 1593: ICE compiler crash empty return statement in function
  • Bugzilla 1613: DMD hangs on syntax error
  • Bugzilla 1618: Typo in std\system.d
Version D 2.006 Oct 16, 2007

New/Changed Features

  • Transformed all of string, wstring, and dstring into invariant definitions. Tons of changes in function signatures and implementations rippled through the standard library. Initial experience with invariant strings seems to be highly encouraging.
  • Implemented Overload Sets for functions and templates.
  • Added the std.getopt module that makes standards-conforming command-line processing easy.
  • Added the parse and assumeUnique to the std.conv module.
  • Added the dirEntries function to the std.file module.
  • Added the basename and dirname functions (which alias the less gainful names getBaseName and getDirectoryName to the std.path module.)
  • Added optional terminator to readln; added the convenience functions fopen and popen; added functions lines and chunks; all to the std.stdio module.
  • Added the munch function to the std.string module.
  • Fixed isStaticArray; added BaseClassesTuple, TransitiveBaseTypeTuple, ImplicitConversionTargets, isIntegral, isFloatingPoint, isNumeric, isSomeString, isAssociativeArray, isDynamicArray, isArray; all to the std.traits module.
  • Added the std.variant module.
  • Incorporated many of the Tango GC structural differences (much more to go still).
  • Added the std.contracts module.
  • Breaking change: std.stdio.writef can now only accept a format as its first argument.

Bugs Fixed

Version D 2.005 Oct 1, 2007

New/Changed Features

  • std.math.sin, cos, tan are now evaluated at compile time if the argument is a constant.
  • Added Cristian Vlasceanu's idea for C++ interface for 'plugins'
  • Overhaul phobos linux.mak and add documentation build logic
  • Massive additions to std.conv
  • Add writeln() and write() to std.stdio

Bugs Fixed

  • Fix std.boxer boxing of Object's (unit test failure)
  • Fix std.demangle to not show hidden parameters (this and delegate context pointers)
  • Bugzilla 217: typeof not working properly in internal/object.d
  • Bugzilla 218: Clean up old code for packed bit array support
  • Bugzilla 223: Error message for unset constants doesn't specify error location
  • Bugzilla 278: dmd.conf search path doesn't work
  • Bugzilla 479: can't compare arrayliteral statically with string
  • Bugzilla 549: A class derived from a deprecated class is not caught
  • Bugzilla 550: Shifting by more bits than size of quantity is allowed
  • Bugzilla 551: Modulo operator works with imaginary and complex operands
  • Bugzilla 556: is (Type Identifier : TypeSpecialization) doesn't work as it should
  • Bugzilla 668: Use of *.di files breaks the order of static module construction
  • Bugzilla 1125: Segfault using tuple in asm code, when size not specified
  • Bugzilla 1437: dmd crash: "Internal error: ..\ztc\cod4.c 357"
  • Bugzilla 1456: Cannot use a constant with alias template parameters
  • Bugzilla 1474: regression: const struct with an initializer not recognized as a valid alias template param
  • Bugzilla 1488: Bad code generation when using tuple from asm
  • Bugzilla 1510: ICE: Assertion failure: 'ad' on line 925 in file 'func.c'
  • Bugzilla 1523: struct literals not work with typedef
  • Bugzilla 1530: Aliasing problem in DMD front end code
  • Bugzilla 1531: cannot access typedef'd class field
  • Bugzilla 1537: Internal error: ..\ztc\cgcod.c 1521
Version D 2.004 Sep 5, 2007

New/Changed Features

  • Added command line switches -defaultlib and -debuglib
  • Bugzilla 1445: Add default library options to sc.ini / dmd.conf
  • Changed result type of IsExpression from int to bool.
  • Added isSame and compiles to __traits.
  • Added optional TemplateParameterList to IsExpression.
  • Added warning when override is omitted.
  • Added std.hiddenfunc.
  • Added trace_term() to object.d to fix Bugzilla 971: No profiling output is generated if the application terminates with exit
  • Multiple module static constructors/destructors allowed.
  • Added new syntax for string literals (delimited, heredoc, D tokens)
  • Added __EOF__ token

Bugs Fixed

Version D 2.003 Jul 21, 2007

New/Changed Features

  • Added 0x78 Codeview extension for type dchar.
  • Moved next member from Object.Error to Object.Exception
  • Added ForeachRangeStatement
  • .
  • Added extern (System)
  • Added std.traits
  • Bugzilla 345: updated std.uni.isUniAlpha to Unicode 5.0.0

Bugs Fixed

  • Bugzilla 46: Included man files should be updated
  • Bugzilla 268: Bug with SocketSet and classes
  • Bugzilla 406: std.loader is broken on linux
  • Bugzilla 561: Incorrect duplicate error message when trying to create instance of interface
  • Bugzilla 588: lazy argument and nested symbol support to std.demangle
  • Bugzilla 668: Use of *.di files breaks the order of static module construction
  • Bugzilla 1110: std.format.doFormat + struct without toString() == crash
  • Bugzilla 1300: Issues with struct in compile-time function
  • Bugzilla 1306: extern (Windows) should work like extern (C) for variables
  • Bugzilla 1318: scope + ref/out parameters are allowed, contrary to spec
  • Bugzilla 1320: Attributes spec uses 1.0 const semantics in 2.0 section
  • Bugzilla 1331: header file genaration generates a ":" instead of ";" at pragma
  • Bugzilla 1332: Internal error: ../ztc/cod4.c 357
  • Bugzilla 1333: -inline ICE: passing an array element to an inner class's constructor in a nested function, all in a class or struct
  • Bugzilla 1336: Internal error when trying to construct a class declared within a unittest from a templated class.
Version D 2.002 Jul 1, 2007

New/Changed Features

  • Renamed linux library from libphobos.a to libphobos2.a

Bugs Fixed

  • Bugzilla 540: Nested template member function error - "function expected before ()"
  • Bugzilla 559: Final has no effect on methods
  • Bugzilla 627: Concatenation of strings to string arrays with ~ corrupts data
  • Bugzilla 629: Misleading error message "Can only append to dynamic arrays"
  • Bugzilla 639: Escaped tuple parameter ICEs dmd
  • Bugzilla 641: Complex string operations in template argument ICEs dmd
  • Bugzilla 657: version(): ignored
  • Bugzilla 689: Clean up the spec printfs!
  • Bugzilla 1103: metastrings.ToString fails for long > 0xFFFF_FFFF
  • Bugzilla 1107: CodeView: wrong CV type for bool
  • Bugzilla 1118: weird switch statement behaviour
  • Bugzilla 1186: Bind needs a small fix
  • Bugzilla 1199: Strange error messages when indexing empty arrays or strings at compile time
  • Bugzilla 1200: DMD crash: some statements containing only a ConditionalStatement with a false condition
  • Bugzilla 1203: Cannot create Anonclass in loop
  • Bugzilla 1204: segfault using struct in CTFE
  • Bugzilla 1206: Compiler hangs on this() after method in class that forward references struct
  • Bugzilla 1207: Documentation on destructors is confusing
  • Bugzilla 1211: mixin("__LINE__") gives incorrect value
  • Bugzilla 1212: dmd generates bad line info
  • Bugzilla 1216: Concatenation gives 'non-constant expression' outside CTFE
  • Bugzilla 1217: Dollar ($) seen as non-constant expression in non-char[] array
  • Bugzilla 1219: long.max.stringof gets corrupted
  • Bugzilla 1224: Compilation does not stop on asserts during CTFE
  • Bugzilla 1228: Class invariants should not be called before the object is fully constructed
  • Bugzilla 1233: std.string.ifind(char[] s, char[] sub) fails on certain non ascii strings
  • Bugzilla 1234: Occurrence is misspelled almost everywhere
  • Bugzilla 1235: std.string.tolower() fails on certain utf8 characters
  • Bugzilla 1236: Grammar for Floating Literals is incomplete
  • Bugzilla 1239: ICE when empty tuple is passed to variadic template function
  • Bugzilla 1242: DMD AV
  • Bugzilla 1244: Type of array length is unspecified
  • Bugzilla 1247: No time zone info for India
  • Bugzilla 1285: Exception typedefs not distinguished by catch
  • Bugzilla 1287: Iterating over an array of tuples causes "glue.c:710: virtual unsigned int Type::totym(): Assertion `0' failed."
  • Bugzilla 1290: Two ICEs, both involving real, imaginary, ? : and +=.
  • Bugzilla 1291: .stringof for a class type returned from a template doesn't work
  • Bugzilla 1292: Template argument deduction doesn't work
  • Bugzilla 1294: referencing fields in static arrays of structs passed as arguments generates invalid code
  • Bugzilla 1295: Some minor errors in the lexer grammar
Version D 2.001 Jun 27, 2007

New/Changed Features

  • Added D_Version2 predefined identifier to indicate this is a D version 2.0 compiler
  • Added __VENDOR__ and __VERSION__.
  • Now an error to use both const and invariant as storage classes for the same declaration
  • The .init property for a variable is now based on its type, not its initializer.

Bugs Fixed

  • std.compiler now is automatically updated.
  • Fixed problem catting mutable to invariant arrays.
  • Fixed CFTE bug with e++ and e--.
  • Bugzilla 1254: Using a parameter initialized to void in a compile-time evaluated function doesn't work
  • Bugzilla 1256: "with" statement with symbol
  • Bugzilla 1259: Inline build triggers an illegal error msg "Error: S() is not an lvalue"
  • Bugzilla 1260: Another tuple bug
  • Bugzilla 1261: Regression from overzealous error message
  • Bugzilla 1262: Local variable of struct type initialized by literal resets when compared to .init
  • Bugzilla 1263: Template function overload fails when overloading on both template and non-template class
  • Bugzilla 1268: Struct literals try to initialize static arrays of non-static structs incorrectly
  • Bugzilla 1269: Compiler crash on assigning to an element of a void-initialized array in CTFE
  • Bugzilla 1270: -inline produces an ICE
  • Bugzilla 1272: problems with the new 1.0 section
  • Bugzilla 1274: 2.0 beta link points to dmd.zip which is the 1.x chain
  • Bugzilla 1275: ambiguity with 'in' meaning
  • Bugzilla 1276: static assert message displayed with escaped characters
  • Bugzilla 1277: "in final const scope" not considered redundant storage classes
  • Bugzilla 1279: const/invariant functions don't accept const/invariant return types
  • Bugzilla 1280: std.socket.Socket.send (void[],SocketFlags) should take a const(void)[] instead
  • Bugzilla 1283: writefln: formatter applies to following variable
  • Bugzilla 1286: crash on invariant struct member function referencing globals
Version D 2.000 Jun 17, 2007

New/Changed Features

  • Added aliases string, wstring, and dstring for strings.
  • Added .idup property for arrays to create invariant copies.
  • Added const, invariant, and final.
  • in parameter storage class now means final scope const.
  • foreach value variables now default to final if not declared as inout.
  • class and struct invariant declarations now must have a ().

Bugs Fixed

  • Added missing \n to exception message going to stderr.
  • Fixed default struct initialization for CTFE.
  • Bugzilla 1226: ICE on a struct literal