diff -uNr dmd-0.160/dmd/html/d/abi.html dmd-0.161/dmd/html/d/abi.html --- dmd-0.160/dmd/html/d/abi.html 2006-06-03 21:31:50.000000000 +0200 +++ dmd-0.161/dmd/html/d/abi.html 2006-06-16 00:33:16.000000000 +0200 @@ -27,11 +27,12 @@ " title="Read/write comments and feedback">Comments
  • D
  • Search
  • +
  • Downloads
  • Home
  • -
    Last update Sat Jun 3 21:31:49 2006 +
    Last update Fri Jun 16 00:33:14 2006
    @@ -106,8 +107,6 @@
  • Garbage Collection
  • -
  • Memory Management
  • -
  • Floating Point
  • Inline Assembler
  • @@ -242,15 +241,15 @@ When passing a static array to a function, the result, although declared as a static array, will actually be a reference to a static array. For example: -
    int abc[3];
    +
    int[3] abc;
     
    Passing abc to functions results in these implicit conversions: -
    void func(int array[3]); // actually <reference to><array[3] of><int>
    -void func(int *p);       // abc[3] is converted to a pointer
    +
    void func(int[3] array); // actually <reference to><array[3] of><int>
    +void func(int* p);       // abc is converted to a pointer
     			 // to the first element
    -void func(int array[]);	 // abc[3] is converted to a dynamic array
    +void func(int[] array);	 // abc is converted to a dynamic array
     
    diff -uNr dmd-0.160/dmd/html/d/acknowledgements.html dmd-0.161/dmd/html/d/acknowledgements.html --- dmd-0.160/dmd/html/d/acknowledgements.html 2006-05-31 17:12:00.000000000 +0200 +++ dmd-0.161/dmd/html/d/acknowledgements.html 2006-06-06 16:38:20.000000000 +0200 @@ -27,11 +27,12 @@ " title="Read/write comments and feedback">Comments
  • D
  • Search
  • +
  • Downloads
  • Home
  • -
    Last update Wed May 31 17:11:58 2006 +
    Last update Tue Jun 6 16:38:20 2006
    @@ -91,10 +92,14 @@ @@ -102,7 +107,7 @@

    Tools

    • DMD D Compiler
    • -
    • GDC D Compiler
    • +
    • GDC D Compiler
    • Linker
    • diff -uNr dmd-0.160/dmd/html/d/arrays.html dmd-0.161/dmd/html/d/arrays.html --- dmd-0.160/dmd/html/d/arrays.html 2006-05-31 17:11:58.000000000 +0200 +++ dmd-0.161/dmd/html/d/arrays.html 2006-06-13 16:04:04.000000000 +0200 @@ -27,11 +27,12 @@ " title="Read/write comments and feedback">Comments
    • D
    • Search
    • +
    • Downloads
    • Home
    -
    Last update Wed May 31 17:11:57 2006 +
    Last update Tue Jun 13 16:04:03 2006
    @@ -106,8 +107,6 @@
  • Garbage Collection
  • -
  • Memory Management
  • -
  • Floating Point
  • Inline Assembler
  • @@ -391,21 +390,15 @@
    -

    Array Operations

    - - When more than one [] operator appears in an expression, the range - represented by all must match. -
    a[1..3] = b[] + 3;	// error, 2 elements not same as 3 elements
    -
    -

    Examples:

    +

    Pointer Arithmetic

    int[3] abc;			// static array of 3 ints
     int[] def = [ 1, 2, 3 ];	// dynamic array of 3 ints
     
    -void dibb(int *array)
    +void dibb(int* array)
     {
     	array[2];		// means same thing as *(array + 2)
     	*(array + 2);		// get 2nd element
    @@ -760,8 +753,8 @@
     
     	A pointer to a char can be generated:
     
    -
    char *p = &str[3];	// pointer to 4th element
    -char *p = str;		// pointer to 1st element
    +
    char* p = &str[3];	// pointer to 4th element
    +char* p = str;		// pointer to 1st element
     
    Since strings, however, are not 0 terminated in D, @@ -809,7 +802,7 @@ terminating 0, and cast the result to a char*:
    str ~= "\0";
    -printf("the string is '%s'\n", (char *)str);
    +printf("the string is '%s'\n", (char*)str);
     
    The second way is to use the precision specifier. The way D arrays diff -uNr dmd-0.160/dmd/html/d/ascii-table.html dmd-0.161/dmd/html/d/ascii-table.html --- dmd-0.160/dmd/html/d/ascii-table.html 2006-05-31 17:12:00.000000000 +0200 +++ dmd-0.161/dmd/html/d/ascii-table.html 2006-06-06 16:38:22.000000000 +0200 @@ -27,11 +27,12 @@ " title="Read/write comments and feedback">Comments
  • D
  • Search
  • +
  • Downloads
  • Home
  • -
    Last update Wed May 31 17:11:58 2006 +
    Last update Tue Jun 6 16:38:21 2006
    @@ -91,10 +92,14 @@ @@ -102,7 +107,7 @@

    Tools

    • DMD D Compiler
    • -
    • GDC D Compiler
    • +
    • GDC D Compiler
    • Linker
    • diff -uNr dmd-0.160/dmd/html/d/attribute.html dmd-0.161/dmd/html/d/attribute.html --- dmd-0.160/dmd/html/d/attribute.html 2006-05-31 17:11:58.000000000 +0200 +++ dmd-0.161/dmd/html/d/attribute.html 2006-06-06 16:38:20.000000000 +0200 @@ -27,11 +27,12 @@ " title="Read/write comments and feedback">Comments
    • D
    • Search
    • +
    • Downloads
    • Home
    -
    Last update Wed May 31 17:11:57 2006 +
    Last update Tue Jun 6 16:38:19 2006
    @@ -106,8 +107,6 @@
  • Garbage Collection
  • -
  • Memory Management
  • -
  • Floating Point
  • Inline Assembler
  • diff -uNr dmd-0.160/dmd/html/d/builtin.html dmd-0.161/dmd/html/d/builtin.html --- dmd-0.160/dmd/html/d/builtin.html 2006-05-31 17:12:00.000000000 +0200 +++ dmd-0.161/dmd/html/d/builtin.html 2006-06-13 16:04:04.000000000 +0200 @@ -27,11 +27,12 @@ " title="Read/write comments and feedback">Comments
  • D
  • Search
  • +
  • Downloads
  • Home
  • -
    Last update Wed May 31 17:11:58 2006 +
    Last update Tue Jun 13 16:04:03 2006
    @@ -105,7 +106,7 @@ Some general initial observations:
      -
    1. Each of them is heavilly used. This means that even small +
    2. Each of them is heavily used. This means that even small improvements in usability are worth reaching for.
    3. Being a core language feature means that the compiler can diff -uNr dmd-0.160/dmd/html/d/changelog1.html dmd-0.161/dmd/html/d/changelog1.html --- dmd-0.160/dmd/html/d/changelog1.html 2006-05-31 17:12:00.000000000 +0200 +++ dmd-0.161/dmd/html/d/changelog1.html 2006-06-06 16:38:22.000000000 +0200 @@ -27,11 +27,12 @@ " title="Read/write comments and feedback">Comments
    4. D
    5. Search
    6. +
    7. Downloads
    8. Home
    9. -
      Last update Wed May 31 17:11:58 2006 +
      Last update Tue Jun 6 16:38:21 2006
      @@ -91,10 +92,14 @@ @@ -102,7 +107,7 @@

      Tools

      • DMD D Compiler
      • -
      • GDC D Compiler
      • +
      • GDC D Compiler
      • Linker
      • diff -uNr dmd-0.160/dmd/html/d/changelog.html dmd-0.161/dmd/html/d/changelog.html --- dmd-0.160/dmd/html/d/changelog.html 2006-06-04 11:50:28.000000000 +0200 +++ dmd-0.161/dmd/html/d/changelog.html 2006-06-19 20:51:44.000000000 +0200 @@ -27,11 +27,12 @@ " title="Read/write comments and feedback">Comments
      • D
      • Search
      • +
      • Downloads
      • Home
      -
      Last update Sun Jun 4 11:50:27 2006 +
      Last update Mon Jun 19 20:51:42 2006
      @@ -91,10 +92,14 @@ @@ -102,7 +107,7 @@

      Tools

      -
      Last update Wed May 31 17:11:57 2006 +
      Last update Tue Jun 6 16:38:19 2006
      diff -uNr dmd-0.160/dmd/html/d/cppstrings.html dmd-0.161/dmd/html/d/cppstrings.html --- dmd-0.160/dmd/html/d/cppstrings.html 2006-05-31 17:11:58.000000000 +0200 +++ dmd-0.161/dmd/html/d/cppstrings.html 2006-06-13 16:10:04.000000000 +0200 @@ -28,11 +28,12 @@ " title="Read/write comments and feedback">Comments
    10. D
    11. Search
    12. +
    13. Downloads
    14. Home
    15. -
      Last update Wed May 31 17:11:56 2006 +
      Last update Tue Jun 13 16:10:04 2006
      @@ -236,14 +237,19 @@

      In D, strings can be implicitly converted to char*:

      -
      void foo(char *);
      +
      void foo(char*);
       char[] s1;
       foo(s1);
       
      +

      although for this to work where foo expects a 0 terminated + string, s1 must have a terminating 0. Alternatively, the + function std.string.toStringz will ensure it:

      + +
      void foo(char*);
      +char[] s1;
      +foo(std.string.toStringz(s1));
      +
      -

      Note: some will argue that it is a mistake in D to have an implicit - conversion from char[] to char*. -

      Array Bounds Checking

      diff -uNr dmd-0.160/dmd/html/d/cpptod.html dmd-0.161/dmd/html/d/cpptod.html --- dmd-0.160/dmd/html/d/cpptod.html 2006-05-31 17:11:58.000000000 +0200 +++ dmd-0.161/dmd/html/d/cpptod.html 2006-06-16 00:33:16.000000000 +0200 @@ -27,11 +27,12 @@ " title="Read/write comments and feedback">Comments
    16. D
    17. Search
    18. +
    19. Downloads
    20. Home
    21. -
      Last update Wed May 31 17:11:56 2006 +
      Last update Fri Jun 16 00:33:14 2006
      @@ -308,7 +309,7 @@ No need for idiomatic constructions like the above. Just write: -
      typedef void *Handle = cast(void *)-1; 
      +
      typedef void* Handle = cast(void*)-1; 
       void bar(Handle);
       
       Handle h;
      diff -uNr dmd-0.160/dmd/html/d/ctod.html dmd-0.161/dmd/html/d/ctod.html
      --- dmd-0.160/dmd/html/d/ctod.html	2006-05-31 17:11:58.000000000 +0200
      +++ dmd-0.161/dmd/html/d/ctod.html	2006-06-16 00:33:16.000000000 +0200
      @@ -28,11 +28,12 @@
       " title="Read/write comments and feedback">Comments
       	
    22. D
    23. Search
    24. +
    25. Downloads
    26. Home
    27. -
      Last update Wed May 31 17:11:56 2006 +
      Last update Fri Jun 16 00:33:14 2006
      @@ -763,11 +764,12 @@ and dummy members are necessary:
      struct Foo 
      -{   int i; 
      +{
      +   int i; 
          union Bar 
      -   {   
      -       struct Abc { int x; long y; } _abc; 
      -       char *p; 
      +   {
      +      struct Abc { int x; long y; } _abc; 
      +      char *p; 
          } _bar; 
       }; 
       
      @@ -792,11 +794,12 @@
              more natural manner: 
       
       
      struct Foo 
      -{   int i; 
      +{
      +   int i; 
          union 
      -   {   
      -       struct { int x; long y; } 
      -       char* p; 
      +   {
      +      struct { int x; long y; } 
      +      char* p; 
          } 
       } 
       
      @@ -1304,45 +1307,47 @@
           is created and a pointer to it is used to maximize efficiency.
       
       
      struct Symbol
      -{   char *id;
      -struct Symbol *left;
      -struct Symbol *right;
      +{
      +   char *id;
      +   struct Symbol *left;
      +   struct Symbol *right;
       };
       
       struct Paramblock
      -{   char *id;
      -struct Symbol *sm;
      +{
      +   char *id;
      +   struct Symbol *sm;
       };
       
       static void membersearchx(struct Paramblock *p, struct Symbol *s)
       {
      -while (s)
      -{
      -    if (strcmp(p->id,s->id) == 0)
      -    {
      -	if (p->sm)
      -	    error("ambiguous member %s\n",p->id);
      -	p->sm = s;
      -    }
      -
      -    if (s->left)
      -	membersearchx(p,s->left);
      -    s = s->right;
      -}
      +   while (s)
      +   {
      +      if (strcmp(p->id,s->id) == 0)
      +      {
      +         if (p->sm)
      +            error("ambiguous member %s\n",p->id);
      +         p->sm = s;
      +      }
      +
      +      if (s->left)
      +         membersearchx(p,s->left);
      +      s = s->right;
      +   }
       }
       
       struct Symbol *symbol_membersearch(Symbol *table[], int tablemax, char *id)
       {
      -struct Paramblock pb;
      -int i;
      +   struct Paramblock pb;
      +   int i;
       
      -pb.id = id;
      -pb.sm = NULL;
      -for (i = 0; i < tablemax; i++)
      -{
      -    membersearchx(pb, table[i]);
      -}
      -return pb.sm;
      +   pb.id = id;
      +   pb.sm = NULL;
      +   for (i = 0; i < tablemax; i++)
      +   {
      +      membersearchx(pb, table[i]);
      +   }
      +   return pb.sm;
       }
       
      diff -uNr dmd-0.160/dmd/html/d/dbc.html dmd-0.161/dmd/html/d/dbc.html --- dmd-0.160/dmd/html/d/dbc.html 2006-05-31 17:11:58.000000000 +0200 +++ dmd-0.161/dmd/html/d/dbc.html 2006-06-06 16:38:20.000000000 +0200 @@ -27,11 +27,12 @@ " title="Read/write comments and feedback">Comments
    28. D
    29. Search
    30. +
    31. Downloads
    32. Home
    33. -
      Last update Wed May 31 17:11:57 2006 +
      Last update Tue Jun 6 16:38:20 2006
      @@ -106,8 +107,6 @@
    34. Garbage Collection
    35. -
    36. Memory Management
    37. -
    38. Floating Point
    39. Inline Assembler
    40. diff -uNr dmd-0.160/dmd/html/d/dcompiler.html dmd-0.161/dmd/html/d/dcompiler.html --- dmd-0.160/dmd/html/d/dcompiler.html 2006-06-03 20:30:58.000000000 +0200 +++ dmd-0.161/dmd/html/d/dcompiler.html 2006-06-06 16:38:20.000000000 +0200 @@ -27,11 +27,12 @@ " title="Read/write comments and feedback">Comments
    41. D
    42. Search
    43. +
    44. Downloads
    45. Home
    46. -
      Last update Sat Jun 3 20:30:56 2006 +
      Last update Tue Jun 6 16:38:20 2006
      @@ -91,10 +92,14 @@ @@ -102,7 +107,7 @@

      Tools

      • DMD D Compiler
      • -
      • GDC D Compiler
      • +
      • GDC D Compiler
      • Linker
      • @@ -226,13 +231,13 @@ diff -uNr dmd-0.160/dmd/html/d/ddoc.html dmd-0.161/dmd/html/d/ddoc.html --- dmd-0.160/dmd/html/d/ddoc.html 2006-05-31 17:12:00.000000000 +0200 +++ dmd-0.161/dmd/html/d/ddoc.html 2006-06-13 16:04:04.000000000 +0200 @@ -26,11 +26,12 @@ -
        Last update Wed May 31 17:11:58 2006 +
        Last update Tue Jun 13 16:04:03 2006
        @@ -105,8 +106,6 @@
      • Garbage Collection
      • -
      • Memory Management
      • -
      • Floating Point
      • Inline Assembler
      • @@ -608,7 +607,7 @@ text preprocessor. When a $(NAME) appears in section text it is replaced with NAME's corresponding - replacment text. + replacement text. The replacement text is then recursively scanned for more macros. If a macro is recursively encountered, with no argument or with the same argument text as the enclosing macro, it is replaced @@ -649,7 +648,7 @@

        Macro redefinitions replace previous definitions of the same name. This means that the sequence of macro definitions from the various - sources forms a heirarchy. + sources forms a hierarchy.

        Macro names beginning with "D_" and "DDOC_" are reserved. @@ -926,7 +925,7 @@

        Using Ddoc for other Documentation

        -

        Ddoc is primarilly designed for use in producing documentation +

        Ddoc is primarily designed for use in producing documentation from embedded comments. It can also, however, be used for processing other general documentation. The reason for doing this would be to take advantage of the diff -uNr dmd-0.160/dmd/html/d/declaration.html dmd-0.161/dmd/html/d/declaration.html --- dmd-0.160/dmd/html/d/declaration.html 2006-05-31 17:11:58.000000000 +0200 +++ dmd-0.161/dmd/html/d/declaration.html 2006-06-16 00:33:16.000000000 +0200 @@ -27,11 +27,12 @@ " title="Read/write comments and feedback">Comments

      • D
      • Search
      • +
      • Downloads
      • Home
      -
      Last update Wed May 31 17:11:57 2006 +
      Last update Fri Jun 16 00:33:14 2006
      @@ -106,8 +107,6 @@
    47. Garbage Collection
    48. -
    49. Memory Management
    50. -
    51. Floating Point
    52. Inline Assembler
    53. @@ -535,6 +534,16 @@ The distinction is made in the semantic analysis pass.

      +

      Aliases cannot be used for expressions:

      + +
      struct S { static int i; }
      +S s;
      +
      +alias s.i a;	// illegal, s.i is an expression
      +alias S.i b;	// ok
      +b = 4;		// sets S.i to 4
      +
      +

      Extern Declarations

      Variable declarations with the storage class extern are diff -uNr dmd-0.160/dmd/html/d/dlinks.html dmd-0.161/dmd/html/d/dlinks.html --- dmd-0.160/dmd/html/d/dlinks.html 2006-05-31 17:11:58.000000000 +0200 +++ dmd-0.161/dmd/html/d/dlinks.html 2006-06-06 16:38:20.000000000 +0200 @@ -26,11 +26,12 @@ -
      Last update Wed May 31 17:11:56 2006 +
      Last update Tue Jun 6 16:38:19 2006
      @@ -90,10 +91,14 @@ @@ -101,7 +106,7 @@

      Tools

      -
      Last update Wed May 31 17:11:57 2006 +
      Last update Tue Jun 6 16:38:20 2006
      @@ -106,8 +107,6 @@
    54. Garbage Collection
    55. -
    56. Memory Management
    57. -
    58. Floating Point
    59. Inline Assembler
    60. diff -uNr dmd-0.160/dmd/html/d/errors.html dmd-0.161/dmd/html/d/errors.html --- dmd-0.160/dmd/html/d/errors.html 2006-05-31 17:12:00.000000000 +0200 +++ dmd-0.161/dmd/html/d/errors.html 2006-06-13 16:04:04.000000000 +0200 @@ -27,11 +27,12 @@ " title="Read/write comments and feedback">Comments
    61. D
    62. Search
    63. +
    64. Downloads
    65. Home
    66. -
      Last update Wed May 31 17:11:57 2006 +
      Last update Tue Jun 13 16:04:03 2006
      @@ -106,8 +107,6 @@
    67. Garbage Collection
    68. -
    69. Memory Management
    70. -
    71. Floating Point
    72. Inline Assembler
    73. @@ -190,18 +189,18 @@ blade guards.

      -What's needed is an error handling philosophy and methodology that is: +What's needed is an error handling philosophy and methodology such that:

        -
      • Standardized - consistent usage makes it more useful. -
      • Produces a reasonable result even if the programmer fails +
      • It is standardized - consistent usage makes it more useful. +
      • The result is reasonable even if the programmer fails to check for errors. -
      • Allows old code to be reused with new code without having +
      • Old code can be reused with new code without having to modify the old code to be compatible with new error types.
      • No errors get inadvertently ignored. -
      • Allows 'quick and dirty' utilities to be written that still +
      • 'Quick and dirty' utilities to be written that still correctly handle errors. -
      • Easy to make the error handling source code look good. +
      • It is easy to make the error handling source code look good.

      The D Error Handling Solution

      @@ -238,17 +237,17 @@ How does this meet our criteria?
      -
      Standardized - consistent usage makes it more useful. +
      It is standardized - consistent usage makes it more useful.
      This is the D way, and is used consistently in the D runtime library and examples. -
      Produces a reasonable result even if the programmer fails +
      The result is reasonable result even if the programmer fails to check for errors.
      If no catch handlers are there for the errors, then the program gracefully exits through the default error handler with an appropriate message. -
      Allows old code to be reused with new code without having +
      Old code can be reused with new code without having to modify the old code to be compatible with new error types.
      Old code can decide to catch all errors, or only specific ones, propagating the rest upwards. In any case, there is no more @@ -260,14 +259,14 @@ like a NULL pointer return indicating an error, followed by trying to use that NULL pointer. -
      Allows 'quick and dirty' utilities to be written that still +
      'Quick and dirty' utilities can be written that still correctly handle errors.
      Quick and dirty code need not write any error handling code at all, and don't need to check for errors. The errors will be caught, an appropriate message displayed, and the program gracefully shut down all by default. -
      Easy to make the error handling source code look good. +
      It is easy to make the error handling source code look good.
      The try/catch/finally statements look a lot nicer than endless if (error) goto errorhandler; statements.
      diff -uNr dmd-0.160/dmd/html/d/exception-safe.html dmd-0.161/dmd/html/d/exception-safe.html --- dmd-0.160/dmd/html/d/exception-safe.html 2006-05-31 17:12:00.000000000 +0200 +++ dmd-0.161/dmd/html/d/exception-safe.html 2006-06-13 16:04:04.000000000 +0200 @@ -27,11 +27,12 @@ " title="Read/write comments and feedback">Comments
    74. D
    75. Search
    76. +
    77. Downloads
    78. Home
    79. -
      Last update Wed May 31 17:11:58 2006 +
      Last update Tue Jun 13 16:04:03 2006
      @@ -91,10 +92,14 @@ @@ -102,7 +107,7 @@

      Tools

      • DMD D Compiler
      • -
      • GDC D Compiler
      • +
      • GDC D Compiler
      • Linker
      • @@ -415,7 +420,7 @@

        Example

        -The next example involves temporarilly changing the state of some object. +The next example involves temporarily changing the state of some object. Suppose there's a class data member verbose, which controls the emission of messages logging the activity of the class. Inside one of the methods, verbose needs to be turned off because @@ -437,7 +442,7 @@ There's a problem if Foo.bar() exits via an exception - the verbose flag state is not restored. -That's easilly fixed with scope(exit): +That's easily fixed with scope(exit):
        class Foo
         {
        @@ -466,7 +471,7 @@
         
         

        The RAII solution would be to try and capture the false state of verbose as a resource, an abstraction that doesn't make much sense. -The try-finally solution requires arbitrarilly large separation between +The try-finally solution requires arbitrarily large separation between the conceptually linked set and reset code, besides requiring the addition of an irrelevant scope.

        @@ -536,7 +541,7 @@ Consider giving feedback to the user about a lengthy operation (mouse changes to an hourglass, window title is red/italicized, ...). -With scope(exit) that can be easilly done without +With scope(exit) that can be easily done without needing to make an artificial resource out of whatever UI state element used for the cues: diff -uNr dmd-0.160/dmd/html/d/expression.html dmd-0.161/dmd/html/d/expression.html --- dmd-0.160/dmd/html/d/expression.html 2006-06-02 14:23:16.000000000 +0200 +++ dmd-0.161/dmd/html/d/expression.html 2006-06-19 11:50:12.000000000 +0200 @@ -27,11 +27,12 @@ " title="Read/write comments and feedback">Comments
      • D
      • Search
      • +
      • Downloads
      • Home
      -
      Last update Fri Jun 2 14:23:14 2006 +
      Last update Mon Jun 19 11:50:11 2006
      @@ -106,8 +107,6 @@
    80. Garbage Collection
    81. -
    82. Memory Management
    83. -
    84. Floating Point
    85. Inline Assembler
    86. @@ -242,7 +241,6 @@ CastExpression NewAnonClassExpression ( Type ) . Identifier - ( Expression ) CastExpression: cast ( Type ) UnaryExpression @@ -277,10 +275,11 @@ CharacterLiteral StringLiterals FunctionLiteral - AssertExpression + AssertExpression BasicType . Identifier typeid ( Type ) IsExpression + ( Expression ) StringLiterals: StringLiteral @@ -1058,22 +1057,24 @@

      Function Literals

      FunctionLiteral
      -	function FunctionBody
      -	function Parameters FunctionBody
      -	function Type Parameters FunctionBody
      -	delegate FunctionBody
      -	delegate Parameters FunctionBody
      -	delegate Type Parameters FunctionBody
      +	function Typeopt ( ArgumentList )opt FunctionBody
      +	delegate Typeopt ( ArgumentList )opt FunctionBody
      +	( ArgumentList ) FunctionBody
      +	FunctionBody
       
      FunctionLiterals enable embedding anonymous functions and anonymous delegates directly into expressions. Type is the return type of the function or delegate, - if omitted it defaults to void. - Parameters forms the parameters to the function. - If omitted it defaults to the empty parameter list (). + if omitted it is inferred from any ReturnStatements + in the FunctionBody. + ( ArgumentList ) + forms the arguments to the function. + If omitted it defaults to the empty argument list (). The type of a function literal is pointer to function or pointer to delegate. + If the keywords function or delegate are omitted, + it defaults to being a delegate.

      For example: @@ -1121,6 +1122,18 @@ }

      +

      and the following where the return type int is + inferred:

      + +
      int abc(int delegate(long i));
      +
      +void test()
      +{   int b = 3;
      +
      +    abc( (long c) { return 6 + b; } );
      +}
      +
      + Anonymous delegates can behave like arbitrary statement literals. For example, here an arbitrary statement is executed by a loop: @@ -1136,8 +1149,8 @@ } } - loop(5, 100, delegate { d += 1; } ); - loop(3, 10, delegate { f += 1; } ); + loop(5, 100, { d += 1; } ); + loop(3, 10, { f += 3; } ); return d + f; } @@ -1173,7 +1186,9 @@

      The expression assert(0) is a special case; it signifies that it is unreachable code. Either AssertError is thrown at runtime if it is reachable, - or a HLT instruction is executed. + or the execution is halted + (on the x86 processor, a HLT instruction can be used to halt + execution). The optimization and code generation phases of compilation may assume that it is unreachable code.

      diff -uNr dmd-0.160/dmd/html/d/faq.html dmd-0.161/dmd/html/d/faq.html --- dmd-0.160/dmd/html/d/faq.html 2006-05-31 17:12:00.000000000 +0200 +++ dmd-0.161/dmd/html/d/faq.html 2006-06-16 00:33:16.000000000 +0200 @@ -26,11 +26,12 @@ -
      Last update Wed May 31 17:11:58 2006 +
      Last update Fri Jun 16 00:33:14 2006
      @@ -90,10 +91,14 @@ @@ -101,7 +106,7 @@

      Tools

      @@ -272,7 +278,7 @@ it is. But a vaporware language is useless to everyone. The easier a language is to implement, the more robust implementations there will be. In C's - heyday, there were 30 different commericial C compilers for the IBM PC. + heyday, there were 30 different commercial C compilers for the IBM PC. Not many made the transition to C++. In looking at the C++ compilers on the market today, how many years of development went into each? At least 10 years? Programmers waited years @@ -511,7 +517,7 @@ unintended default initializations will be consistent and therefore more debuggable. -

      Why is overload the assignment operator not supported?

      +

      Why is overloading of the assignment operator not supported?

      Most of the assignment operator overloading in C++ seems to be needed to just keep track of who owns the memory. So by using reference types @@ -609,7 +615,7 @@

      The front end is in C++ in order to interface to the existing gcc and dmd back ends. - It's also meant to be easilly interfaced to other existing back ends, + It's also meant to be easily interfaced to other existing back ends, which are likely written in C++. The D implementation of DMDScript, @@ -658,19 +664,19 @@ or: -

      for (T *p = &foo[0]; p < &foo[length]; p++)
      +
      for (T* p = &foo[0]; p < &foo[length]; p++)
       
      or: -
      T *end = &foo[length];
      -for (T *p = &foo[0]; p < pend; ++p)
      +
      T* end = &foo[length];
      +for (T* p = &foo[0]; p < pend; ++p)
       
      or: -
      T *end = &foo[length];
      -T *p = &foo[0];
      +
      T* end = &foo[length];
      +T* p = &foo[0];
       if (p < pend)
       {
       	do
      @@ -748,7 +754,7 @@
       
       	
    87. The C++ name mangling varies from compiler to compiler.
    88. -
    89. C++ throws exceptions of arbitrary type, not just descendents of +
    90. C++ throws exceptions of arbitrary type, not just descendants of Object.
    91. C++ overloads based on const and volatile. D does not.
    92. @@ -802,6 +808,56 @@ a honda welded to the right side of a camaro.

      +

      Why doesn't D use reference counting for garbage collection?

      + +

      Reference counting has its advantages, but some severe disadvantages: +

      + +
        +
      • cyclical data structures won't get free'd
      • + +
      • every pointer copy requires an increment and a corresponding + decrement - including when simply passing a reference to a function
      • + +
      • in a multithreaded app, the incs and decs must be synchronized
      • + +
      • exception handlers (finally's) must be inserted to handle all the + decs so there are no leaks. Contrary to assertions otherwise, there is + no such thing as "zero overhead exceptions."
      • + +
      • in order to support slicing and interior pointers, as well as + supporting reference counting on arbitrary allocations of non-object + data, a separate "wrapper" object must be allocated for each allocation + to be ref counted. This essentially doubles the number of allocations + needed.
      • + +
      • The wrapper object will mean that all pointers will need to be + double-dereferenced to access the data.
      • + +
      • Fixing the compiler to hide all this stuff from the programmer will + make it difficult to interface cleanly with C.
      • + +
      • Ref counting can fragment the heap thereby consuming more memory + just like the gc can, though the gc typically will consume more memory + overall.
      • + +
      • Ref counting does not eliminated latency problems, it just reduces + them.
      • + +
      + +

      The proposed C++ shared_ptr<>, which implements ref counting, + suffers from all these faults. I haven't seen a heads up benchmark of + shared_ptr<> vs mark/sweep, but I wouldn't be surprised if shared_ptr<> + turned out to be a significant loser in terms of both performance and + memory consumption. +

      + +

      That said, D may in the future optionally support some form of ref + counting, as rc is better for managing scarce resources like file + handles. +

      + diff -uNr dmd-0.160/dmd/html/d/float.html dmd-0.161/dmd/html/d/float.html --- dmd-0.160/dmd/html/d/float.html 2006-05-31 17:12:00.000000000 +0200 +++ dmd-0.161/dmd/html/d/float.html 2006-06-06 16:38:20.000000000 +0200 @@ -27,11 +27,12 @@ " title="Read/write comments and feedback">Comments
    93. D
    94. Search
    95. +
    96. Downloads
    97. Home
    98. -
      Last update Wed May 31 17:11:58 2006 +
      Last update Tue Jun 6 16:38:20 2006
      @@ -106,8 +107,6 @@
    99. Garbage Collection
    100. -
    101. Memory Management
    102. -
    103. Floating Point
    104. Inline Assembler
    105. diff -uNr dmd-0.160/dmd/html/d/function.html dmd-0.161/dmd/html/d/function.html --- dmd-0.160/dmd/html/d/function.html 2006-05-31 17:11:58.000000000 +0200 +++ dmd-0.161/dmd/html/d/function.html 2006-06-06 16:38:20.000000000 +0200 @@ -27,11 +27,12 @@ " title="Read/write comments and feedback">Comments
    106. D
    107. Search
    108. +
    109. Downloads
    110. Home
    111. -
      Last update Wed May 31 17:11:57 2006 +
      Last update Tue Jun 6 16:38:20 2006
      @@ -106,8 +107,6 @@
    112. Garbage Collection
    113. -
    114. Memory Management
    115. -
    116. Floating Point
    117. Inline Assembler
    118. diff -uNr dmd-0.160/dmd/html/d/future.html dmd-0.161/dmd/html/d/future.html --- dmd-0.160/dmd/html/d/future.html 2006-05-31 17:12:00.000000000 +0200 +++ dmd-0.161/dmd/html/d/future.html 2006-06-06 16:38:20.000000000 +0200 @@ -27,11 +27,12 @@ " title="Read/write comments and feedback">Comments
    119. D
    120. Search
    121. +
    122. Downloads
    123. Home
    124. -
      Last update Wed May 31 17:11:58 2006 +
      Last update Tue Jun 6 16:38:20 2006
      @@ -91,10 +92,14 @@ @@ -102,7 +107,7 @@

      Tools

      • DMD D Compiler
      • -
      • GDC D Compiler
      • +
      • GDC D Compiler
      • Linker
      • diff -uNr dmd-0.160/dmd/html/d/garbage.html dmd-0.161/dmd/html/d/garbage.html --- dmd-0.160/dmd/html/d/garbage.html 2006-05-31 17:12:00.000000000 +0200 +++ dmd-0.161/dmd/html/d/garbage.html 2006-06-06 16:38:20.000000000 +0200 @@ -27,11 +27,12 @@ " title="Read/write comments and feedback">Comments
      • D
      • Search
      • +
      • Downloads
      • Home
      -
      Last update Wed May 31 17:11:58 2006 +
      Last update Tue Jun 6 16:38:20 2006
      @@ -106,8 +107,6 @@
    125. Garbage Collection
    126. -
    127. Memory Management
    128. -
    129. Floating Point
    130. Inline Assembler
    131. diff -uNr dmd-0.160/dmd/html/d/glossary.html dmd-0.161/dmd/html/d/glossary.html --- dmd-0.160/dmd/html/d/glossary.html 2006-05-31 17:12:00.000000000 +0200 +++ dmd-0.161/dmd/html/d/glossary.html 2006-06-06 16:38:20.000000000 +0200 @@ -27,11 +27,12 @@ " title="Read/write comments and feedback">Comments
    132. D
    133. Search
    134. +
    135. Downloads
    136. Home
    137. -
      Last update Wed May 31 17:11:58 2006 +
      Last update Tue Jun 6 16:38:20 2006
      @@ -91,10 +92,14 @@ @@ -102,7 +107,7 @@

      Tools

      • DMD D Compiler
      • -
      • GDC D Compiler
      • +
      • GDC D Compiler
      • Linker
      • diff -uNr dmd-0.160/dmd/html/d/html.html dmd-0.161/dmd/html/d/html.html --- dmd-0.160/dmd/html/d/html.html 2006-05-31 17:12:00.000000000 +0200 +++ dmd-0.161/dmd/html/d/html.html 2006-06-06 16:38:20.000000000 +0200 @@ -27,11 +27,12 @@ " title="Read/write comments and feedback">Comments
      • D
      • Search
      • +
      • Downloads
      • Home
      -
      Last update Wed May 31 17:11:58 2006 +
      Last update Tue Jun 6 16:38:20 2006
      @@ -106,8 +107,6 @@
    138. Garbage Collection
    139. -
    140. Memory Management
    141. -
    142. Floating Point
    143. Inline Assembler
    144. diff -uNr dmd-0.160/dmd/html/d/htod.html dmd-0.161/dmd/html/d/htod.html --- dmd-0.160/dmd/html/d/htod.html 2006-05-31 17:12:00.000000000 +0200 +++ dmd-0.161/dmd/html/d/htod.html 2006-06-06 16:38:22.000000000 +0200 @@ -26,11 +26,12 @@ -
      Last update Wed May 31 17:11:58 2006 +
      Last update Tue Jun 6 16:38:21 2006
      @@ -90,10 +91,14 @@ @@ -101,7 +106,7 @@

      Tools

      -
      Last update Wed May 31 17:11:57 2006 +
      Last update Tue Jun 6 16:38:19 2006
      @@ -91,10 +92,14 @@ @@ -102,7 +107,7 @@

      Tools

      • DMD D Compiler
      • -
      • GDC D Compiler
      • +
      • GDC D Compiler
      • Linker
      • @@ -213,7 +218,7 @@

        There are currently two implementations, the Digital Mars DMD package for Win32 and x86 Linux, and the -Gnu D package for +Gnu D package for several platforms, including Mac OS X.

        diff -uNr dmd-0.160/dmd/html/d/interface.html dmd-0.161/dmd/html/d/interface.html --- dmd-0.160/dmd/html/d/interface.html 2006-05-31 17:12:00.000000000 +0200 +++ dmd-0.161/dmd/html/d/interface.html 2006-06-06 16:38:20.000000000 +0200 @@ -27,11 +27,12 @@ " title="Read/write comments and feedback">Comments
      • D
      • Search
      • +
      • Downloads
      • Home
      -
      Last update Wed May 31 17:11:58 2006 +
      Last update Tue Jun 6 16:38:20 2006
      @@ -106,8 +107,6 @@
    145. Garbage Collection
    146. -
    147. Memory Management
    148. -
    149. Floating Point
    150. Inline Assembler
    151. diff -uNr dmd-0.160/dmd/html/d/interfaceToC.html dmd-0.161/dmd/html/d/interfaceToC.html --- dmd-0.160/dmd/html/d/interfaceToC.html 2006-05-31 17:12:00.000000000 +0200 +++ dmd-0.161/dmd/html/d/interfaceToC.html 2006-06-06 16:38:20.000000000 +0200 @@ -27,11 +27,12 @@ " title="Read/write comments and feedback">Comments
    152. D
    153. Search
    154. +
    155. Downloads
    156. Home
    157. -
      Last update Wed May 31 17:11:58 2006 +
      Last update Tue Jun 6 16:38:20 2006
      @@ -106,8 +107,6 @@
    158. Garbage Collection
    159. -
    160. Memory Management
    161. -
    162. Floating Point
    163. Inline Assembler
    164. diff -uNr dmd-0.160/dmd/html/d/intro.html dmd-0.161/dmd/html/d/intro.html --- dmd-0.160/dmd/html/d/intro.html 2006-05-31 17:11:58.000000000 +0200 +++ dmd-0.161/dmd/html/d/intro.html 2006-06-06 16:38:20.000000000 +0200 @@ -27,11 +27,12 @@ " title="Read/write comments and feedback">Comments
    165. D
    166. Search
    167. +
    168. Downloads
    169. Home
    170. -
      Last update Wed May 31 17:11:57 2006 +
      Last update Tue Jun 6 16:38:19 2006
      @@ -91,10 +92,14 @@ @@ -102,7 +107,7 @@

      Tools

      • DMD D Compiler
      • -
      • GDC D Compiler
      • +
      • GDC D Compiler
      • Linker
      • @@ -213,7 +218,7 @@

        There are currently two implementations, the Digital Mars DMD package for Win32 and x86 Linux, and the -Gnu D package for +Gnu D package for several platforms, including Mac OS X.

        diff -uNr dmd-0.160/dmd/html/d/lex.html dmd-0.161/dmd/html/d/lex.html --- dmd-0.160/dmd/html/d/lex.html 2006-05-31 17:11:58.000000000 +0200 +++ dmd-0.161/dmd/html/d/lex.html 2006-06-06 16:38:20.000000000 +0200 @@ -27,11 +27,12 @@ " title="Read/write comments and feedback">Comments
      • D
      • Search
      • +
      • Downloads
      • Home
      -
      Last update Wed May 31 17:11:57 2006 +
      Last update Tue Jun 6 16:38:19 2006
      @@ -106,8 +107,6 @@
    171. Garbage Collection
    172. -
    173. Memory Management
    174. -
    175. Floating Point
    176. Inline Assembler
    177. diff -uNr dmd-0.160/dmd/html/d/memory.html dmd-0.161/dmd/html/d/memory.html --- dmd-0.160/dmd/html/d/memory.html 2006-05-31 17:12:00.000000000 +0200 +++ dmd-0.161/dmd/html/d/memory.html 2006-06-06 16:38:20.000000000 +0200 @@ -27,11 +27,12 @@ " title="Read/write comments and feedback">Comments
    178. D
    179. Search
    180. +
    181. Downloads
    182. Home
    183. -
      Last update Wed May 31 17:11:58 2006 +
      Last update Tue Jun 6 16:38:20 2006
      @@ -62,74 +63,123 @@ -
    184. Enums
    185. + -
    186. Contracts
    187. + -
    188. Named Character Entities
    189. + + + + + +
      -

      Memory Management

      +

      Memory Management

      Any non-trivial program needs to allocate and free memory. Memory management techniques become more and more important as @@ -147,8 +197,8 @@ garbage collection heap.
    - This chapter describes techniques for using them, as well - as some advanced alternatives: + The techniques for using them, as well + as some advanced alternatives are:

    Strings (and Array) Copy-on-Write

    @@ -239,7 +290,7 @@ garbage collection, the latency is theoretically not bound. The most reliable way to guarantee latency is to preallocate all data that will be needed by the time critical portion. - If no calls to allocate memory are done, the gc will not run + If no calls to allocate memory are done, the GC will not run and so will not cause the maximum latency to be exceeded.

    Smooth Operation

    @@ -256,15 +307,15 @@
  • Preallocate all data needed before the part of the code that needs to be smooth is run. -
  • Manually run a gc collection cycle at points in program +
  • Manually run a GC collection cycle at points in program execution where it is already paused. An example of such a place would be where the program has just displayed a prompt for user input and the user has not responded yet. This reduces the odds that a collection cycle will be needed during the smooth code. -
  • Call gc.disable() before the smooth code is run, and - gc.enable() afterwards. This will cause the gc to favor allocating +
  • Call std.gc.disable() before the smooth code is run, and + std.gc.enable() afterwards. This will cause the GC to favor allocating more memory instead of running a collection pass. @@ -322,7 +373,7 @@
  • It is not necessary to practice RAII with this, since if any objects are not passed to deallocate() when done, because of a thrown exception, they'll eventually get picked up by - the gc anyway. + the GC anyway.

    Reference Counting

    @@ -371,7 +422,7 @@ delete(void* p) { if (p) - { gc.removeRange(p); + { std.gc.removeRange(p); std.c.stdlib.free(p); } } @@ -405,7 +456,7 @@ scanned automatically. The C heap is not. Therefore, if Foo or any class derived from Foo using the allocator contains any references to data allocated by the garbage collector, the - gc needs to be notified. This is done with the gc.addRange() + GC needs to be notified. This is done with the std.gc.addRange() method.
  • No initialization of the memory is necessary, as code @@ -423,16 +474,20 @@
  • The pointer p may be null. -
  • If the gc was notified with gc.addRange(), a corresponding - call to gc.removeRange() must happen in the deallocator. +
  • If the GC was notified with std.gc.addRange(), a corresponding + call to std.gc.removeRange() must happen in the deallocator.
  • If there is a delete(), there should be a corresponding new(). - If memory is allocated using class specific allocators and deallocators, +

    If memory is allocated using class specific allocators and deallocators, careful coding practices must be followed to avoid memory leaks and dangling references. In the presence of exceptions, it is particularly important to practice RAII to prevent memory leaks. +

    + +

    Custom allocators and deallocators can be done for structs + and unions, too.

    Mark/Release

    @@ -456,8 +511,8 @@ p = malloc(bufsize); if (!p) - throw new OutOfMemory; - gc.addRange(p, p + bufsize); + throw new OutOfMemoryException; + std.gc.addRange(p, p + bufsize); buffer = p[0 .. bufsize]; } @@ -465,7 +520,7 @@ { if (buffer.length) { - gc.removeRange(buffer); + std.gc.removeRange(buffer); free(buffer); buffer = null; } @@ -508,7 +563,7 @@
  • The allocation of buffer[] itself is added as - a region to the gc, so there is no need for a separate + a region to the GC, so there is no need for a separate call inside Foo.new() to do it.

    RAII (Resource Acquisition Is Initialization)

    @@ -520,7 +575,8 @@

    Allocating Class Instances On The Stack

    - Allocating class instances on the stack is useful for temporary + Allocating class instances on the stack using an + overridden new and delete is useful for temporary objects that are to be automatically deallocated when the function is exited. No special handling is needed to account for function termination via stack unwinding from an exception. @@ -551,18 +607,18 @@ void test() { - Foo f = new(std.c.stdlib.alloca(Foo.classinfo.init.length)) Foo; + Foo f = new(alloca(Foo.classinfo.init.length)) Foo; ... }
  • - -
    Last update Wed May 31 17:11:57 2006 +
    Last update Sat Jun 17 01:44:47 2006
    @@ -106,8 +107,6 @@
  • Garbage Collection
  • -
  • Memory Management
  • -
  • Floating Point
  • Inline Assembler
  • @@ -231,7 +230,7 @@ }
    - Mixins are evaluted in the scope of where they appear, not the scope + Mixins are evaluated in the scope of where they appear, not the scope of the template declaration:
    int y = 3;
    @@ -336,11 +335,13 @@
     
    template Foo()
     {
         int x = 5;
    +    void func(int x) { }
     }
     
     template Bar()
     {
         int x = 4;
    +    void func() { }
     }
     
     mixin Foo;
    @@ -349,23 +350,29 @@
     void test()
     {
         printf("x = %d\n", x);	// error, x is ambiguous
    +    func();		// error, func is ambiguous
     }
     
    +

    The call to func() is ambiguous because + Foo.func and Bar.func are in different scopes. +

    - If a mixin has a MixinIdentifier, it can be used to +

    If a mixin has a MixinIdentifier, it can be used to disambiguate: - +

    int x = 6;
     
     template Foo()
     {
         int x = 5;
         int y = 7;
    +    void func() { }
     }
     
     template Bar()
     {
         int x = 4;
    +    void func() { }
     }
     
     mixin Foo F;
    @@ -377,11 +384,39 @@
         printf("x = %d\n", x);	// prints 6
         printf("F.x = %d\n", F.x);	// prints 5
         printf("B.x = %d\n", B.x);	// prints 4
    +    F.func();			// calls Foo.func
    +    B.func();			// calls Bar.func
     }
     
    +

    Alias declarations can be used to overload together + functions declared in different mixins:

    + +
    template Foo()
    +{
    +    void func(int x) {  }
    +}
    +
    +template Bar()
    +{
    +    void func() {  }
    +}
    +
    +mixin Foo!() F;
    +mixin Bar!() B;
    +
    +alias F.func func;
    +alias B.func func;
    +
    +void main()
    +{
    +    func();	// calls B.func
    +    func(1);	// calls F.func
    +}
    +
    + - A mixin has its own scope, even if a declaration is overridden - by the enclosing one: +

    A mixin has its own scope, even if a declaration is overridden + by the enclosing one:

    int x = 4;
     
    diff -uNr dmd-0.160/dmd/html/d/module.html dmd-0.161/dmd/html/d/module.html
    --- dmd-0.160/dmd/html/d/module.html	2006-05-31 17:11:58.000000000 +0200
    +++ dmd-0.161/dmd/html/d/module.html	2006-06-06 16:38:20.000000000 +0200
    @@ -27,11 +27,12 @@
     " title="Read/write comments and feedback">Comments
     	
  • D
  • Search
  • +
  • Downloads
  • Home
  • -
    Last update Wed May 31 17:11:57 2006 +
    Last update Tue Jun 6 16:38:19 2006
    @@ -106,8 +107,6 @@
  • Garbage Collection
  • -
  • Memory Management
  • -
  • Floating Point
  • Inline Assembler
  • diff -uNr dmd-0.160/dmd/html/d/operatoroverloading.html dmd-0.161/dmd/html/d/operatoroverloading.html --- dmd-0.160/dmd/html/d/operatoroverloading.html 2006-06-02 17:53:50.000000000 +0200 +++ dmd-0.161/dmd/html/d/operatoroverloading.html 2006-06-07 00:54:00.000000000 +0200 @@ -27,11 +27,12 @@ " title="Read/write comments and feedback">Comments
  • D
  • Search
  • +
  • Downloads
  • Home
  • -
    Last update Fri Jun 2 17:53:49 2006 +
    Last update Wed Jun 7 00:54:00 2006
    @@ -106,8 +107,6 @@
  • Garbage Collection
  • -
  • Memory Management
  • -
  • Floating Point
  • Inline Assembler
  • @@ -430,7 +429,7 @@ in no opIn - - + opIn_r diff -uNr dmd-0.160/dmd/html/d/overview.html dmd-0.161/dmd/html/d/overview.html --- dmd-0.160/dmd/html/d/overview.html 2006-05-31 17:11:58.000000000 +0200 +++ dmd-0.161/dmd/html/d/overview.html 2006-06-13 16:04:04.000000000 +0200 @@ -26,11 +26,12 @@ -
    Last update Wed May 31 17:11:57 2006 +
    Last update Tue Jun 13 16:04:02 2006
    @@ -90,10 +91,14 @@ @@ -101,7 +106,7 @@

    Tools

    @@ -767,7 +772,7 @@ all these variations.
  • Third party tools may not be available for all the desired - platforms, and they're necessarilly on a different upgrade cycle + platforms, and they're necessarily on a different upgrade cycle from the compilers.
  • Having it builtin to the compiler means it is standardized across @@ -846,7 +851,7 @@
  • Arrays are not first class objects. When an array is passed to a function, it is - converted to a pointer,even though the prototype confusingly says it's an + converted to a pointer, even though the prototype confusingly says it's an array. When this conversion happens, all array type information gets lost.
  • @@ -956,7 +961,7 @@

    Lightweight Aggregates

    -

    D supports simple C style struct's, both for compatibility with +

    D supports simple C style structs, both for compatibility with C data structures and because they're useful when the full power of classes is overkill.

    @@ -1006,7 +1011,7 @@

    Unit tests can be added to a class, such that they are automatically run upon program startup. This aids in verifying, in every build, - that class implementations weren't inadvertantly broken. The unit + that class implementations weren't inadvertently broken. The unit tests form part of the source code for a class. Creating them becomes a natural part of the class development process, as opposed to throwing the finished code over the wall to the testing group. diff -uNr dmd-0.160/dmd/html/d/phobos/object.html dmd-0.161/dmd/html/d/phobos/object.html --- dmd-0.160/dmd/html/d/phobos/object.html 2006-06-04 02:35:48.000000000 +0200 +++ dmd-0.161/dmd/html/d/phobos/object.html 2006-06-19 20:51:26.000000000 +0200 @@ -28,7 +28,7 @@ -

    Last update Sun Jun 4 02:35:47 2006 +
    Last update Mon Jun 19 20:51:24 2006
    diff -uNr dmd-0.160/dmd/html/d/phobos/phobos.html dmd-0.161/dmd/html/d/phobos/phobos.html --- dmd-0.160/dmd/html/d/phobos/phobos.html 2006-06-04 02:35:50.000000000 +0200 +++ dmd-0.161/dmd/html/d/phobos/phobos.html 2006-06-19 20:51:28.000000000 +0200 @@ -29,7 +29,7 @@ -
    Last update Sun Jun 4 02:35:49 2006 +
    Last update Mon Jun 19 20:51:27 2006
    diff -uNr dmd-0.160/dmd/html/d/phobos/std_base64.html dmd-0.161/dmd/html/d/phobos/std_base64.html --- dmd-0.160/dmd/html/d/phobos/std_base64.html 2006-06-04 02:35:48.000000000 +0200 +++ dmd-0.161/dmd/html/d/phobos/std_base64.html 2006-06-19 20:51:26.000000000 +0200 @@ -28,7 +28,7 @@ -
    Last update Sun Jun 4 02:35:47 2006 +
    Last update Mon Jun 19 20:51:24 2006
    diff -uNr dmd-0.160/dmd/html/d/phobos/std_bitarray.html dmd-0.161/dmd/html/d/phobos/std_bitarray.html --- dmd-0.160/dmd/html/d/phobos/std_bitarray.html 2006-06-04 02:35:48.000000000 +0200 +++ dmd-0.161/dmd/html/d/phobos/std_bitarray.html 2006-06-19 20:51:26.000000000 +0200 @@ -28,7 +28,7 @@ -
    Last update Sun Jun 4 02:35:47 2006 +
    Last update Mon Jun 19 20:51:25 2006
    diff -uNr dmd-0.160/dmd/html/d/phobos/std_boxer.html dmd-0.161/dmd/html/d/phobos/std_boxer.html --- dmd-0.160/dmd/html/d/phobos/std_boxer.html 2006-06-04 02:35:48.000000000 +0200 +++ dmd-0.161/dmd/html/d/phobos/std_boxer.html 2006-06-19 20:51:26.000000000 +0200 @@ -28,7 +28,7 @@ -
    Last update Sun Jun 4 02:35:47 2006 +
    Last update Mon Jun 19 20:51:25 2006
    diff -uNr dmd-0.160/dmd/html/d/phobos/std_c_fenv.html dmd-0.161/dmd/html/d/phobos/std_c_fenv.html --- dmd-0.160/dmd/html/d/phobos/std_c_fenv.html 2006-06-04 02:35:50.000000000 +0200 +++ dmd-0.161/dmd/html/d/phobos/std_c_fenv.html 2006-06-19 20:51:28.000000000 +0200 @@ -28,7 +28,7 @@ -
    Last update Sun Jun 4 02:35:49 2006 +
    Last update Mon Jun 19 20:51:26 2006
    diff -uNr dmd-0.160/dmd/html/d/phobos/std_c_math.html dmd-0.161/dmd/html/d/phobos/std_c_math.html --- dmd-0.160/dmd/html/d/phobos/std_c_math.html 2006-06-04 02:35:50.000000000 +0200 +++ dmd-0.161/dmd/html/d/phobos/std_c_math.html 2006-06-19 20:51:28.000000000 +0200 @@ -28,7 +28,7 @@ -
    Last update Sun Jun 4 02:35:49 2006 +
    Last update Mon Jun 19 20:51:26 2006
    diff -uNr dmd-0.160/dmd/html/d/phobos/std_compiler.html dmd-0.161/dmd/html/d/phobos/std_compiler.html --- dmd-0.160/dmd/html/d/phobos/std_compiler.html 2006-06-04 02:35:48.000000000 +0200 +++ dmd-0.161/dmd/html/d/phobos/std_compiler.html 2006-06-19 20:51:26.000000000 +0200 @@ -32,7 +32,7 @@ -
    Last update Sun Jun 4 02:35:47 2006 +
    Last update Mon Jun 19 20:51:24 2006
    diff -uNr dmd-0.160/dmd/html/d/phobos/std_conv.html dmd-0.161/dmd/html/d/phobos/std_conv.html --- dmd-0.160/dmd/html/d/phobos/std_conv.html 2006-06-04 02:35:48.000000000 +0200 +++ dmd-0.161/dmd/html/d/phobos/std_conv.html 2006-06-19 20:51:26.000000000 +0200 @@ -28,7 +28,7 @@ -
    Last update Sun Jun 4 02:35:47 2006 +
    Last update Mon Jun 19 20:51:25 2006
    diff -uNr dmd-0.160/dmd/html/d/phobos/std_cover.html dmd-0.161/dmd/html/d/phobos/std_cover.html --- dmd-0.160/dmd/html/d/phobos/std_cover.html 2006-06-04 02:35:50.000000000 +0200 +++ dmd-0.161/dmd/html/d/phobos/std_cover.html 2006-06-19 20:51:26.000000000 +0200 @@ -28,7 +28,7 @@ -
    Last update Sun Jun 4 02:35:48 2006 +
    Last update Mon Jun 19 20:51:25 2006
    diff -uNr dmd-0.160/dmd/html/d/phobos/std_c_process.html dmd-0.161/dmd/html/d/phobos/std_c_process.html --- dmd-0.160/dmd/html/d/phobos/std_c_process.html 2006-06-04 02:35:50.000000000 +0200 +++ dmd-0.161/dmd/html/d/phobos/std_c_process.html 2006-06-19 20:51:28.000000000 +0200 @@ -28,7 +28,7 @@ -
    Last update Sun Jun 4 02:35:49 2006 +
    Last update Mon Jun 19 20:51:27 2006
    diff -uNr dmd-0.160/dmd/html/d/phobos/std_c_stdarg.html dmd-0.161/dmd/html/d/phobos/std_c_stdarg.html --- dmd-0.160/dmd/html/d/phobos/std_c_stdarg.html 2006-06-04 02:35:50.000000000 +0200 +++ dmd-0.161/dmd/html/d/phobos/std_c_stdarg.html 2006-06-19 20:51:28.000000000 +0200 @@ -28,7 +28,7 @@ -
    Last update Sun Jun 4 02:35:49 2006 +
    Last update Mon Jun 19 20:51:27 2006
    diff -uNr dmd-0.160/dmd/html/d/phobos/std_c_stddef.html dmd-0.161/dmd/html/d/phobos/std_c_stddef.html --- dmd-0.160/dmd/html/d/phobos/std_c_stddef.html 2006-06-04 02:35:50.000000000 +0200 +++ dmd-0.161/dmd/html/d/phobos/std_c_stddef.html 2006-06-19 20:51:28.000000000 +0200 @@ -28,7 +28,7 @@ -
    Last update Sun Jun 4 02:35:49 2006 +
    Last update Mon Jun 19 20:51:27 2006
    diff -uNr dmd-0.160/dmd/html/d/phobos/std_c_stdio.html dmd-0.161/dmd/html/d/phobos/std_c_stdio.html --- dmd-0.160/dmd/html/d/phobos/std_c_stdio.html 2006-06-04 02:35:50.000000000 +0200 +++ dmd-0.161/dmd/html/d/phobos/std_c_stdio.html 2006-06-19 20:51:28.000000000 +0200 @@ -28,7 +28,7 @@ -
    Last update Sun Jun 4 02:35:49 2006 +
    Last update Mon Jun 19 20:51:27 2006
    diff -uNr dmd-0.160/dmd/html/d/phobos/std_c_stdlib.html dmd-0.161/dmd/html/d/phobos/std_c_stdlib.html --- dmd-0.160/dmd/html/d/phobos/std_c_stdlib.html 2006-06-04 02:35:50.000000000 +0200 +++ dmd-0.161/dmd/html/d/phobos/std_c_stdlib.html 2006-06-19 20:51:28.000000000 +0200 @@ -28,7 +28,7 @@ -
    Last update Sun Jun 4 02:35:49 2006 +
    Last update Mon Jun 19 20:51:27 2006
    diff -uNr dmd-0.160/dmd/html/d/phobos/std_cstream.html dmd-0.161/dmd/html/d/phobos/std_cstream.html --- dmd-0.160/dmd/html/d/phobos/std_cstream.html 2006-06-04 02:35:50.000000000 +0200 +++ dmd-0.161/dmd/html/d/phobos/std_cstream.html 2006-06-19 20:51:26.000000000 +0200 @@ -28,7 +28,7 @@ -
    Last update Sun Jun 4 02:35:48 2006 +
    Last update Mon Jun 19 20:51:25 2006
    diff -uNr dmd-0.160/dmd/html/d/phobos/std_c_string.html dmd-0.161/dmd/html/d/phobos/std_c_string.html --- dmd-0.160/dmd/html/d/phobos/std_c_string.html 2006-06-04 02:35:50.000000000 +0200 +++ dmd-0.161/dmd/html/d/phobos/std_c_string.html 2006-06-19 20:51:28.000000000 +0200 @@ -28,7 +28,7 @@ -
    Last update Sun Jun 4 02:35:49 2006 +
    Last update Mon Jun 19 20:51:27 2006
    diff -uNr dmd-0.160/dmd/html/d/phobos/std_c_time.html dmd-0.161/dmd/html/d/phobos/std_c_time.html --- dmd-0.160/dmd/html/d/phobos/std_c_time.html 2006-06-04 02:35:50.000000000 +0200 +++ dmd-0.161/dmd/html/d/phobos/std_c_time.html 2006-06-19 20:51:28.000000000 +0200 @@ -28,7 +28,7 @@ -
    Last update Sun Jun 4 02:35:49 2006 +
    Last update Mon Jun 19 20:51:27 2006
    diff -uNr dmd-0.160/dmd/html/d/phobos/std_ctype.html dmd-0.161/dmd/html/d/phobos/std_ctype.html --- dmd-0.160/dmd/html/d/phobos/std_ctype.html 2006-06-04 02:35:50.000000000 +0200 +++ dmd-0.161/dmd/html/d/phobos/std_ctype.html 2006-06-19 20:51:26.000000000 +0200 @@ -28,7 +28,7 @@ -
    Last update Sun Jun 4 02:35:48 2006 +
    Last update Mon Jun 19 20:51:25 2006
    diff -uNr dmd-0.160/dmd/html/d/phobos/std_c_wcharh.html dmd-0.161/dmd/html/d/phobos/std_c_wcharh.html --- dmd-0.160/dmd/html/d/phobos/std_c_wcharh.html 2006-06-04 02:35:50.000000000 +0200 +++ dmd-0.161/dmd/html/d/phobos/std_c_wcharh.html 2006-06-19 20:51:28.000000000 +0200 @@ -28,7 +28,7 @@ -
    Last update Sun Jun 4 02:35:49 2006 +
    Last update Mon Jun 19 20:51:27 2006
    diff -uNr dmd-0.160/dmd/html/d/phobos/std_date.html dmd-0.161/dmd/html/d/phobos/std_date.html --- dmd-0.160/dmd/html/d/phobos/std_date.html 2006-06-04 02:35:48.000000000 +0200 +++ dmd-0.161/dmd/html/d/phobos/std_date.html 2006-06-19 20:51:26.000000000 +0200 @@ -28,7 +28,7 @@ -
    Last update Sun Jun 4 02:35:47 2006 +
    Last update Mon Jun 19 20:51:24 2006
    diff -uNr dmd-0.160/dmd/html/d/phobos/std_demangle.html dmd-0.161/dmd/html/d/phobos/std_demangle.html --- dmd-0.160/dmd/html/d/phobos/std_demangle.html 2006-06-04 02:35:50.000000000 +0200 +++ dmd-0.161/dmd/html/d/phobos/std_demangle.html 2006-06-19 20:51:26.000000000 +0200 @@ -28,7 +28,7 @@ -
    Last update Sun Jun 4 02:35:48 2006 +
    Last update Mon Jun 19 20:51:25 2006
    diff -uNr dmd-0.160/dmd/html/d/phobos/std_file.html dmd-0.161/dmd/html/d/phobos/std_file.html --- dmd-0.160/dmd/html/d/phobos/std_file.html 2006-06-04 02:35:48.000000000 +0200 +++ dmd-0.161/dmd/html/d/phobos/std_file.html 2006-06-19 20:51:26.000000000 +0200 @@ -28,7 +28,7 @@ -
    Last update Sun Jun 4 02:35:47 2006 +
    Last update Mon Jun 19 20:51:24 2006
    @@ -332,9 +332,9 @@ void main(char[][] args) { - char[][] dirs = std.file.listdir(args[1]); + auto dirs = std.file.listdir(args[1]); - foreach (char[] d; dirs) + foreach (d; dirs) writefln(d); }
    @@ -366,9 +366,9 @@ void main(char[][] args) { - char[][] d_source_files = std.file.listdir(args[1], "*.d"); + auto d_source_files = std.file.listdir(args[1], "*.d"); - foreach (char[] d; d_source_files) + foreach (d; d_source_files) writefln(d); }
    @@ -380,9 +380,9 @@ void main(char[][] args) { - char[][] d_source_files = std.file.listdir(args[1], RegExp(r"\.(d|obj)$")); + auto d_source_files = std.file.listdir(args[1], RegExp(r"\.(d|obj)$")); - foreach (char[] d; d_source_files) + foreach (d; d_source_files) writefln(d); } @@ -410,21 +410,18 @@ void main(char[][] args) { - char[] pathname - = args[1]; + auto pathname = args[1]; char[][] result; bool listing(char[] filename) { - result ~= std.path.join(pathname -, filename); + result ~= std.path.join(pathname, filename); return true; // continue } - listdir(pathname -, &listing); + listdir(pathname, &listing); - foreach (char[] name; result) + foreach (name; result) writefln("%s", name); } @@ -451,19 +448,16 @@ void main(char[][] args) { - bool callback -(DirEntry* de) + bool callback(DirEntry* de) { if (de.isdir) - listdir(de.name, &callback -); + listdir(de.name, &callback); else writefln(de.name); return true; } - listdir(args[1], &callback -); + listdir(args[1], &callback); } diff -uNr dmd-0.160/dmd/html/d/phobos/std_format.html dmd-0.161/dmd/html/d/phobos/std_format.html --- dmd-0.160/dmd/html/d/phobos/std_format.html 2006-06-04 02:35:48.000000000 +0200 +++ dmd-0.161/dmd/html/d/phobos/std_format.html 2006-06-19 20:51:26.000000000 +0200 @@ -28,7 +28,7 @@ -
    Last update Sun Jun 4 02:35:47 2006 +
    Last update Mon Jun 19 20:51:24 2006
    @@ -397,14 +397,12 @@ void formattedPrint(...) { - void putc -(char c) + void putc(char c) { fputc(c, stdout); } - std.format.doFormat(&putc -, _arguments, _argptr); + std.format.doFormat(&putc, _arguments, _argptr); } ... diff -uNr dmd-0.160/dmd/html/d/phobos/std_gc.html dmd-0.161/dmd/html/d/phobos/std_gc.html --- dmd-0.160/dmd/html/d/phobos/std_gc.html 2006-06-04 02:35:50.000000000 +0200 +++ dmd-0.161/dmd/html/d/phobos/std_gc.html 2006-06-19 20:51:26.000000000 +0200 @@ -28,7 +28,7 @@ -
    Last update Sun Jun 4 02:35:48 2006 +
    Last update Mon Jun 19 20:51:25 2006
    diff -uNr dmd-0.160/dmd/html/d/phobos/std_intrinsic.html dmd-0.161/dmd/html/d/phobos/std_intrinsic.html --- dmd-0.160/dmd/html/d/phobos/std_intrinsic.html 2006-06-04 02:35:50.000000000 +0200 +++ dmd-0.161/dmd/html/d/phobos/std_intrinsic.html 2006-06-19 20:51:26.000000000 +0200 @@ -28,7 +28,7 @@ -
    Last update Sun Jun 4 02:35:48 2006 +
    Last update Mon Jun 19 20:51:25 2006
    @@ -155,20 +155,14 @@ int main() { - uint v -; + uint v; int x; - v - = 0x21; - x = bsf(v -); - printf("bsf(x%x) = %d\n", v -, x); - x = bsr(v -); - printf("bsr(x%x) = %d\n", v -, x); + v = 0x21; + x = bsf(v); + printf("bsf(x%x) = %d\n", v, x); + x = bsr(v); + printf("bsr(x%x) = %d\n", v, x); return 0; } @@ -211,8 +205,7 @@ index a bit number, starting with bit 0 of p[0], and progressing. It addresses bits like the expression: -
    p
    -[index / (uint.sizeof*8)] & (1 << (index & ((uint.sizeof*8) - 1)))
    +
    p[index / (uint.sizeof*8)] & (1 << (index & ((uint.sizeof*8) - 1)))
     

    diff -uNr dmd-0.160/dmd/html/d/phobos/std_math.html dmd-0.161/dmd/html/d/phobos/std_math.html --- dmd-0.160/dmd/html/d/phobos/std_math.html 2006-06-04 02:35:48.000000000 +0200 +++ dmd-0.161/dmd/html/d/phobos/std_math.html 2006-06-19 20:51:24.000000000 +0200 @@ -28,7 +28,7 @@ -
    Last update Sun Jun 4 02:35:46 2006 +
    Last update Mon Jun 19 20:51:23 2006
    @@ -425,16 +425,8 @@
    Calculates the inverse hyperbolic sine of x.

    Mathematically, -
      asinh(x
    -) =  log( x
    - + sqrt( x
    -*x
    - + 1 )) // if x >= +0
    -  asinh(x
    -) = -log(-x
    - + sqrt( x
    -*x
    - + 1 )) // if x <= -0
    +
      asinh(x) =  log( x + sqrt( x*x + 1 )) // if x >= +0
    +  asinh(x) = -log(-x + sqrt( x*x + 1 )) // if x <= -0
     
    @@ -681,9 +673,7 @@ For a positive, finite x:

    -
     1 <= x
    - * FLT_RADIX-logb(x
    -) < FLT_RADIX
    +
     1 <= x * FLT_RADIX-logb(x) < FLT_RADIX
     
    diff -uNr dmd-0.160/dmd/html/d/phobos/std_md5.html dmd-0.161/dmd/html/d/phobos/std_md5.html --- dmd-0.160/dmd/html/d/phobos/std_md5.html 2006-06-04 02:35:48.000000000 +0200 +++ dmd-0.161/dmd/html/d/phobos/std_md5.html 2006-06-19 20:51:26.000000000 +0200 @@ -28,7 +28,7 @@ -
    Last update Sun Jun 4 02:35:47 2006 +
    Last update Mon Jun 19 20:51:24 2006
    diff -uNr dmd-0.160/dmd/html/d/phobos/std_mmfile.html dmd-0.161/dmd/html/d/phobos/std_mmfile.html --- dmd-0.160/dmd/html/d/phobos/std_mmfile.html 2006-06-04 02:35:50.000000000 +0200 +++ dmd-0.161/dmd/html/d/phobos/std_mmfile.html 2006-06-19 20:51:26.000000000 +0200 @@ -28,7 +28,7 @@ -
    Last update Sun Jun 4 02:35:48 2006 +
    Last update Mon Jun 19 20:51:25 2006
    diff -uNr dmd-0.160/dmd/html/d/phobos/std_openrj.html dmd-0.161/dmd/html/d/phobos/std_openrj.html --- dmd-0.160/dmd/html/d/phobos/std_openrj.html 2006-06-04 02:35:50.000000000 +0200 +++ dmd-0.161/dmd/html/d/phobos/std_openrj.html 2006-06-19 20:51:26.000000000 +0200 @@ -28,7 +28,7 @@ -
    Last update Sun Jun 4 02:35:48 2006 +
    Last update Mon Jun 19 20:51:25 2006
    diff -uNr dmd-0.160/dmd/html/d/phobos/std_outbuffer.html dmd-0.161/dmd/html/d/phobos/std_outbuffer.html --- dmd-0.160/dmd/html/d/phobos/std_outbuffer.html 2006-06-04 02:35:48.000000000 +0200 +++ dmd-0.161/dmd/html/d/phobos/std_outbuffer.html 2006-06-19 20:51:24.000000000 +0200 @@ -28,7 +28,7 @@ -
    Last update Sun Jun 4 02:35:46 2006 +
    Last update Mon Jun 19 20:51:23 2006
    diff -uNr dmd-0.160/dmd/html/d/phobos/std_path.html dmd-0.161/dmd/html/d/phobos/std_path.html --- dmd-0.160/dmd/html/d/phobos/std_path.html 2006-06-04 02:35:48.000000000 +0200 +++ dmd-0.161/dmd/html/d/phobos/std_path.html 2006-06-19 20:51:24.000000000 +0200 @@ -28,7 +28,7 @@ -
    Last update Sun Jun 4 02:35:46 2006 +
    Last update Mon Jun 19 20:51:23 2006
    diff -uNr dmd-0.160/dmd/html/d/phobos/std_process.html dmd-0.161/dmd/html/d/phobos/std_process.html --- dmd-0.160/dmd/html/d/phobos/std_process.html 2006-06-04 02:35:50.000000000 +0200 +++ dmd-0.161/dmd/html/d/phobos/std_process.html 2006-06-19 20:51:26.000000000 +0200 @@ -28,7 +28,7 @@ -
    Last update Sun Jun 4 02:35:48 2006 +
    Last update Mon Jun 19 20:51:25 2006
    diff -uNr dmd-0.160/dmd/html/d/phobos/std_random.html dmd-0.161/dmd/html/d/phobos/std_random.html --- dmd-0.160/dmd/html/d/phobos/std_random.html 2006-06-04 02:35:48.000000000 +0200 +++ dmd-0.161/dmd/html/d/phobos/std_random.html 2006-06-19 20:51:26.000000000 +0200 @@ -28,7 +28,7 @@ -
    Last update Sun Jun 4 02:35:47 2006 +
    Last update Mon Jun 19 20:51:24 2006
    diff -uNr dmd-0.160/dmd/html/d/phobos/std_regexp.html dmd-0.161/dmd/html/d/phobos/std_regexp.html --- dmd-0.160/dmd/html/d/phobos/std_regexp.html 2006-06-04 02:35:50.000000000 +0200 +++ dmd-0.161/dmd/html/d/phobos/std_regexp.html 2006-06-19 20:51:28.000000000 +0200 @@ -28,7 +28,7 @@ -
    Last update Sun Jun 4 02:35:48 2006 +
    Last update Mon Jun 19 20:51:26 2006
    @@ -133,22 +133,56 @@

    - + - + - + - +
    Attribute - Action +
    Attribute Characters
    Attribute Action
    g - global; repeat over the whole input string + gglobal; repeat over the whole input string
    i - case insensitive + icase insensitive
    m - treat as multiple lines separated by newlines + mtreat as multiple lines separated by newlines
    +

    + + The format[] string has the formatting characters: +

    + + + + + + + + + + + + + + + +
    Formatting Characters
    Format Replaced With
    $$ $
    $& The matched substring.
    $` The portion of string that precedes the matched substring.
    $' The portion of string that follows the matched substring.
    $n The nth capture, where n + is a single digit 1-9 + and n is not followed by a decimal digit.
    $nn The nnth capture, where nn + is a two-digit decimal + number 01-99. + If nnth capture is undefined or more than the number + of parenthesized subexpressions, use the empty + string instead.
    +

    + + Any other $ are left as is. + +

    +References:
    +Wikipedia

    const char[] email; @@ -188,7 +222,18 @@ Regular expression attributes.
    Returns:
    -the resulting string. +the resulting string +

    +Example:
    +Replace the letters 'a' with the letters 'ZZ'. +
     s = "Strap a rocket engine on a chicken."
    + sub(s, "a", "ZZ")        // result: StrZZp a rocket engine on a chicken.
    + sub(s, "a", "ZZ", "g")   // result: StrZZp ZZ rocket engine on ZZ chicken.
    +
    + The replacement format can reference the matches using + the $&, $$, $', $`, .. 9 notation: +
     sub(s, "[ar]", "[$&]", "g") // result: St[r][a]p [a] [r]ocket engine on [a] chi
    +


    @@ -212,6 +257,17 @@
    Returns:
    the resulting string. +

    +Example:
    +Capitalize the letters 'a' and 'r': +
     s = "Strap a rocket engine on a chicken.";
    + sub(s, "[ar]",
    +    delegate char[] (RegExp m)
    +    {
    +         return toupper(m.match(0));
    +    },
    +    "g");    // result: StRAp A Rocket engine on A chicken.
    +


    @@ -230,6 +286,12 @@
    Returns:
    index into string[] of match if found, -1 if no match. +

    +Example:
    +
     auto s = "abcabcabab";
    + std.regexp.find(s, "b");    // match, returns 1
    + std.regexp.find(s, "f");    // no match, returns -1
    +


    @@ -248,6 +310,12 @@
    Returns:
    index into string[] of match if found, -1 if no match. +

    +Example:
    +
     auto s = "abcabcabab";
    + std.regexp.find(s, "b");    // match, returns 9
    + std.regexp.find(s, "f");    // no match, returns -1
    +


    @@ -256,12 +324,28 @@
    Split string[] into an array of strings, using the regular expression pattern[] with attributes[] as the separator. - string = String to search. - pattern = Regular expression pattern. - attributes = Regular expression attributes.

    +Params:
    + + + + + + +
    char[] stringString to search.
    char[] patternRegular expression pattern.
    char[] attributesRegular expression attributes.

    Returns:
    array of slices into string[] +

    +Example:
    +
     foreach (s; split("abcabcabab", "C.", "i"))
    + {
    +     writefln("s = '%s'", s);
    + }
    + // Prints:
    + // s = 'ab'
    + // s = 'b'
    + // s = 'bab'
    +


    @@ -287,7 +371,7 @@ void main() { - if (m; std.regexp.search("abcdef", "c")) + if (auto m = std.regexp.search("abcdef", "c")) { writefln("%s[%s]%s", m.pre, m.match(0), m.post); } @@ -322,6 +406,12 @@
    Throws:
    RegExpException if there are any compilation errors. +

    +Example:
    +Declare two variables and assign to them a RegExp object: +
     auto r = new RegExp("pattern");
    + auto s = new RegExp(r"p[1-5]\s*");
    +


    @@ -338,6 +428,12 @@
    Throws:
    RegExpException if there are any compilation errors. +

    +Example:
    +Declare two variables and assign to them a RegExp object: +
     auto r = RegExp("pattern");
    + auto s = RegExp(r"p[1-5]\s*");
    +


    @@ -498,28 +594,6 @@
    After a match is found with test(), this function will take the match results and, using the format string, generate and return a new string. - The format string has the formatting characters: - - - - - - - - - - - - - - -
    Format Replaced With
    $$ $
    $& The matched substring.
    $` The portion of string that precedes the matched substring.
    $' The portion of string that follows the matched substring.
    $n The nth capture, where n is a single digit 1-9 - and $n is not followed by a decimal digit.
    $nn The nnth capture, where nn is a two-digit decimal - number 01-99. - If nnth capture is undefined or more than the number - of parenthesized subexpressions, use the empty - string instead.
    - Any other $ are left as is.

    diff -uNr dmd-0.160/dmd/html/d/phobos/std_socket.html dmd-0.161/dmd/html/d/phobos/std_socket.html --- dmd-0.160/dmd/html/d/phobos/std_socket.html 2006-06-04 02:35:50.000000000 +0200 +++ dmd-0.161/dmd/html/d/phobos/std_socket.html 2006-06-19 20:51:28.000000000 +0200 @@ -28,7 +28,7 @@ -
    Last update Sun Jun 4 02:35:48 2006 +
    Last update Mon Jun 19 20:51:26 2006
    diff -uNr dmd-0.160/dmd/html/d/phobos/std_socketstream.html dmd-0.161/dmd/html/d/phobos/std_socketstream.html --- dmd-0.160/dmd/html/d/phobos/std_socketstream.html 2006-06-04 02:35:50.000000000 +0200 +++ dmd-0.161/dmd/html/d/phobos/std_socketstream.html 2006-06-19 20:51:28.000000000 +0200 @@ -28,7 +28,7 @@ -
    Last update Sun Jun 4 02:35:48 2006 +
    Last update Mon Jun 19 20:51:26 2006
    diff -uNr dmd-0.160/dmd/html/d/phobos/std_stdint.html dmd-0.161/dmd/html/d/phobos/std_stdint.html --- dmd-0.160/dmd/html/d/phobos/std_stdint.html 2006-06-04 02:35:50.000000000 +0200 +++ dmd-0.161/dmd/html/d/phobos/std_stdint.html 2006-06-19 20:51:28.000000000 +0200 @@ -28,7 +28,7 @@ -
    Last update Sun Jun 4 02:35:48 2006 +
    Last update Mon Jun 19 20:51:26 2006
    diff -uNr dmd-0.160/dmd/html/d/phobos/std_stdio.html dmd-0.161/dmd/html/d/phobos/std_stdio.html --- dmd-0.160/dmd/html/d/phobos/std_stdio.html 2006-06-04 02:35:50.000000000 +0200 +++ dmd-0.161/dmd/html/d/phobos/std_stdio.html 2006-06-19 20:51:28.000000000 +0200 @@ -28,7 +28,7 @@ -
    Last update Sun Jun 4 02:35:49 2006 +
    Last update Mon Jun 19 20:51:26 2006
    diff -uNr dmd-0.160/dmd/html/d/phobos/std_stream.html dmd-0.161/dmd/html/d/phobos/std_stream.html --- dmd-0.160/dmd/html/d/phobos/std_stream.html 2006-06-04 02:35:48.000000000 +0200 +++ dmd-0.161/dmd/html/d/phobos/std_stream.html 2006-06-19 20:51:26.000000000 +0200 @@ -28,7 +28,7 @@ -
    Last update Sun Jun 4 02:35:46 2006 +
    Last update Mon Jun 19 20:51:23 2006
    diff -uNr dmd-0.160/dmd/html/d/phobos/std_string.html dmd-0.161/dmd/html/d/phobos/std_string.html --- dmd-0.160/dmd/html/d/phobos/std_string.html 2006-06-04 02:35:48.000000000 +0200 +++ dmd-0.161/dmd/html/d/phobos/std_string.html 2006-06-19 20:51:26.000000000 +0200 @@ -28,7 +28,7 @@ -
    Last update Sun Jun 4 02:35:47 2006 +
    Last update Mon Jun 19 20:51:24 2006
    diff -uNr dmd-0.160/dmd/html/d/phobos/std_system.html dmd-0.161/dmd/html/d/phobos/std_system.html --- dmd-0.160/dmd/html/d/phobos/std_system.html 2006-06-04 02:35:50.000000000 +0200 +++ dmd-0.161/dmd/html/d/phobos/std_system.html 2006-06-19 20:51:28.000000000 +0200 @@ -28,7 +28,7 @@ -
    Last update Sun Jun 4 02:35:49 2006 +
    Last update Mon Jun 19 20:51:26 2006
    diff -uNr dmd-0.160/dmd/html/d/phobos/std_thread.html dmd-0.161/dmd/html/d/phobos/std_thread.html --- dmd-0.160/dmd/html/d/phobos/std_thread.html 2006-06-04 02:35:50.000000000 +0200 +++ dmd-0.161/dmd/html/d/phobos/std_thread.html 2006-06-19 20:51:28.000000000 +0200 @@ -28,7 +28,7 @@ -
    Last update Sun Jun 4 02:35:49 2006 +
    Last update Mon Jun 19 20:51:26 2006
    diff -uNr dmd-0.160/dmd/html/d/phobos/std_uni.html dmd-0.161/dmd/html/d/phobos/std_uni.html --- dmd-0.160/dmd/html/d/phobos/std_uni.html 2006-06-04 02:35:50.000000000 +0200 +++ dmd-0.161/dmd/html/d/phobos/std_uni.html 2006-06-19 20:51:28.000000000 +0200 @@ -28,7 +28,7 @@ -
    Last update Sun Jun 4 02:35:49 2006 +
    Last update Mon Jun 19 20:51:26 2006
    diff -uNr dmd-0.160/dmd/html/d/phobos/std_uri.html dmd-0.161/dmd/html/d/phobos/std_uri.html --- dmd-0.160/dmd/html/d/phobos/std_uri.html 2006-06-04 02:35:50.000000000 +0200 +++ dmd-0.161/dmd/html/d/phobos/std_uri.html 2006-06-19 20:51:28.000000000 +0200 @@ -28,7 +28,7 @@ -
    Last update Sun Jun 4 02:35:49 2006 +
    Last update Mon Jun 19 20:51:26 2006
    diff -uNr dmd-0.160/dmd/html/d/phobos/std_utf.html dmd-0.161/dmd/html/d/phobos/std_utf.html --- dmd-0.160/dmd/html/d/phobos/std_utf.html 2006-06-04 02:35:50.000000000 +0200 +++ dmd-0.161/dmd/html/d/phobos/std_utf.html 2006-06-19 20:51:28.000000000 +0200 @@ -28,7 +28,7 @@ -
    Last update Sun Jun 4 02:35:49 2006 +
    Last update Mon Jun 19 20:51:26 2006
    diff -uNr dmd-0.160/dmd/html/d/phobos/std_windows_charset.html dmd-0.161/dmd/html/d/phobos/std_windows_charset.html --- dmd-0.160/dmd/html/d/phobos/std_windows_charset.html 2006-06-04 02:35:50.000000000 +0200 +++ dmd-0.161/dmd/html/d/phobos/std_windows_charset.html 2006-06-19 20:51:28.000000000 +0200 @@ -28,7 +28,7 @@ -
    Last update Sun Jun 4 02:35:49 2006 +
    Last update Mon Jun 19 20:51:26 2006
    diff -uNr dmd-0.160/dmd/html/d/phobos/std_zip.html dmd-0.161/dmd/html/d/phobos/std_zip.html --- dmd-0.160/dmd/html/d/phobos/std_zip.html 2006-06-04 02:35:48.000000000 +0200 +++ dmd-0.161/dmd/html/d/phobos/std_zip.html 2006-06-19 20:51:26.000000000 +0200 @@ -28,7 +28,7 @@ -
    Last update Sun Jun 4 02:35:47 2006 +
    Last update Mon Jun 19 20:51:24 2006
    diff -uNr dmd-0.160/dmd/html/d/phobos/std_zlib.html dmd-0.161/dmd/html/d/phobos/std_zlib.html --- dmd-0.160/dmd/html/d/phobos/std_zlib.html 2006-06-04 02:35:48.000000000 +0200 +++ dmd-0.161/dmd/html/d/phobos/std_zlib.html 2006-06-19 20:51:26.000000000 +0200 @@ -28,7 +28,7 @@ -
    Last update Sun Jun 4 02:35:47 2006 +
    Last update Mon Jun 19 20:51:25 2006
    diff -uNr dmd-0.160/dmd/html/d/portability.html dmd-0.161/dmd/html/d/portability.html --- dmd-0.160/dmd/html/d/portability.html 2006-05-31 17:12:00.000000000 +0200 +++ dmd-0.161/dmd/html/d/portability.html 2006-06-06 16:38:20.000000000 +0200 @@ -27,11 +27,12 @@ " title="Read/write comments and feedback">Comments
  • D
  • Search
  • +
  • Downloads
  • Home
  • -
    Last update Wed May 31 17:11:58 2006 +
    Last update Tue Jun 6 16:38:20 2006
    @@ -106,8 +107,6 @@
  • Garbage Collection
  • -
  • Memory Management
  • -
  • Floating Point
  • Inline Assembler
  • diff -uNr dmd-0.160/dmd/html/d/pragma.html dmd-0.161/dmd/html/d/pragma.html --- dmd-0.160/dmd/html/d/pragma.html 2006-05-31 17:11:58.000000000 +0200 +++ dmd-0.161/dmd/html/d/pragma.html 2006-06-06 16:38:20.000000000 +0200 @@ -27,11 +27,12 @@ " title="Read/write comments and feedback">Comments
  • D
  • Search
  • +
  • Downloads
  • Home
  • -
    Last update Wed May 31 17:11:57 2006 +
    Last update Tue Jun 6 16:38:19 2006
    @@ -106,8 +107,6 @@
  • Garbage Collection
  • -
  • Memory Management
  • -
  • Floating Point
  • Inline Assembler
  • diff -uNr dmd-0.160/dmd/html/d/pretod.html dmd-0.161/dmd/html/d/pretod.html --- dmd-0.160/dmd/html/d/pretod.html 2006-05-31 17:11:58.000000000 +0200 +++ dmd-0.161/dmd/html/d/pretod.html 2006-06-13 16:04:02.000000000 +0200 @@ -27,11 +27,12 @@ " title="Read/write comments and feedback">Comments
  • D
  • Search
  • +
  • Downloads
  • Home
  • -
    Last update Wed May 31 17:11:56 2006 +
    Last update Tue Jun 13 16:04:02 2006
    @@ -111,7 +112,7 @@

    The C Preprocessor Way

    - C and C++ rely heavilly on textual inclusion of header files. + C and C++ rely heavily on textual inclusion of header files. This frequently results in the compiler having to recompile tens of thousands of lines of code over and over again for every source file, an obvious source of slow compile times. What header files are normally used for is @@ -191,11 +192,11 @@
  • Macros have no concept of scope; they are valid from the point of definition to the end of the source. They cut a swath across .h files, nested code, etc. When #include'ing tens of thousands of lines of macro definitions, it becomes - problematicalto avoid inadvertent macro expansions. + problematical to avoid inadvertent macro expansions.
  • Macros are unknown to the debugger. Trying to debug a program with symbolic data is undermined by the debugger only knowing about macro - expansions, not themacros themselves. + expansions, not the macros themselves.
  • Macros make it impossible to tokenize source code, as an earlier macro change can arbitrarily redo tokens. @@ -205,7 +206,7 @@ introduced with templates in C++.)
  • Macros are still used to make up for deficits in the language's expressive - capabiltiy, such as for "wrappers" around header files. + capability, such as for "wrappers" around header files. @@ -306,10 +307,10 @@

    The C Preprocessor Way

    #define EXTERN extern
    -#include "declations.h"
    +#include "declarations.h"
     #undef EXTERN
     #define EXTERN
    -#include "declations.h"
    +#include "declarations.h"
     
    In declarations.h: @@ -377,7 +378,7 @@ }
  • -
  • Hiding __near or __far pointer wierdness: +
  • Hiding __near or __far pointer weirdness:

    The C Preprocessor Way

    diff -uNr dmd-0.160/dmd/html/d/property.html dmd-0.161/dmd/html/d/property.html --- dmd-0.160/dmd/html/d/property.html 2006-05-31 17:11:58.000000000 +0200 +++ dmd-0.161/dmd/html/d/property.html 2006-06-06 16:38:20.000000000 +0200 @@ -27,11 +27,12 @@ " title="Read/write comments and feedback">Comments
  • D
  • Search
  • +
  • Downloads
  • Home
  • -
    Last update Wed May 31 17:11:57 2006 +
    Last update Tue Jun 6 16:38:19 2006
    @@ -106,8 +107,6 @@
  • Garbage Collection
  • -
  • Memory Management
  • -
  • Floating Point
  • Inline Assembler
  • diff -uNr dmd-0.160/dmd/html/d/rationale.html dmd-0.161/dmd/html/d/rationale.html --- dmd-0.160/dmd/html/d/rationale.html 2006-05-31 17:12:00.000000000 +0200 +++ dmd-0.161/dmd/html/d/rationale.html 2006-06-06 16:38:20.000000000 +0200 @@ -27,11 +27,12 @@ " title="Read/write comments and feedback">Comments
  • D
  • Search
  • +
  • Downloads
  • Home
  • -
    Last update Wed May 31 17:11:58 2006 +
    Last update Tue Jun 6 16:38:20 2006
    @@ -91,10 +92,14 @@ @@ -102,7 +107,7 @@

    Tools

    -
    Last update Wed May 31 17:11:57 2006 +
    Last update Fri Jun 16 13:32:26 2006
    @@ -106,8 +107,6 @@
  • Garbage Collection
  • -
  • Memory Management
  • -
  • Floating Point
  • Inline Assembler
  • @@ -201,37 +200,32 @@ by { }. The statements are executed in lexical order.

    A block statement introduces a new scope for local - symbols. A local symbol's name, however, must be unique within - the function. + symbols. + Local symbol declarations cannot shadow (hide) other + local symbol declarations in the same function.

    void func1(int x)
    -{   int x;	// illegal, x is multiply defined in function scope
    -}
    -
    -void func2()
    -{
    -    int x;
    -
    -    {   int x;	// illegal, x is multiply defined in function scope
    -    }
    -}
    +{   int x;	// illegal, x shadows parameter x
    +
    +    int y;
     
    -void func3()
    -{
    -    {   int x;
    -    }
    -    {   int x;	// illegal, x is multiply defined in function scope
    +    { int y; }	// illegal, y shadows enclosing scope's y
    +
    +    void delegate() dg;
    +    dg = { int y; };	// ok, this y is not in the same function
    +
    +    struct S
    +    {
    +	int y;		// ok, this y is a member, not a local
         }
    -}
     
    -void func4()
    -{
    -    {   int x;
    -    }
    -    {   x++;	// illegal, x is undefined
    -    }
    -}
    +    { int z; }
    +    { int z; }	// ok, this z is not shadowing the other z
    +
    +    { int t; }
    +    { t++;   }	// illegal, t is undefined
    +}
     

    The idea is to avoid bugs in complex functions caused by @@ -895,7 +889,8 @@ function return type.

    - At least one return statement is required if the function + At least one return statement, throw statement, or assert(0) expression + is required if the function specifies a return type that is not void.

    @@ -1147,7 +1142,7 @@ done

    - A FinallyStatement may not exit with a goto, break, + A FinallyStatement may not exit with a throw, goto, break, continue, or return; nor may it be entered with a goto.

    @@ -1250,7 +1245,9 @@

    0412
     
    - Do not throw exceptions inside the Statement. + A scope(exit) or scope(success) statement + may not exit with a throw, goto, break, continue, or + return; nor may it be entered with a goto.

    Volatile Statement

    diff -uNr dmd-0.160/dmd/html/d/struct.html dmd-0.161/dmd/html/d/struct.html --- dmd-0.160/dmd/html/d/struct.html 2006-05-31 17:11:58.000000000 +0200 +++ dmd-0.161/dmd/html/d/struct.html 2006-06-06 16:38:20.000000000 +0200 @@ -27,11 +27,12 @@ " title="Read/write comments and feedback">Comments
  • D
  • Search
  • +
  • Downloads
  • Home
  • -
    Last update Wed May 31 17:11:57 2006 +
    Last update Tue Jun 6 16:38:19 2006
    @@ -106,8 +107,6 @@
  • Garbage Collection
  • -
  • Memory Management
  • -
  • Floating Point
  • Inline Assembler
  • diff -uNr dmd-0.160/dmd/html/d/template.html dmd-0.161/dmd/html/d/template.html --- dmd-0.160/dmd/html/d/template.html 2006-05-31 17:11:58.000000000 +0200 +++ dmd-0.161/dmd/html/d/template.html 2006-06-19 18:30:24.000000000 +0200 @@ -27,11 +27,12 @@ " title="Read/write comments and feedback">Comments
  • D
  • Search
  • +
  • Downloads
  • Home
  • -
    Last update Wed May 31 17:11:57 2006 +
    Last update Mon Jun 19 18:30:22 2006
    @@ -106,8 +107,6 @@
  • Garbage Collection
  • -
  • Memory Management
  • -
  • Floating Point
  • Inline Assembler
  • @@ -691,16 +690,18 @@ If a template declares exactly one member, and that member is a function with the same name as the template: -
    template Square(T)
    +
    FunctionTemplateDeclaration:
    +    Type Identifier ( TemplateParameterList ) ( FunctionParameterList ) FunctionBody
    +
    + +

    A function template to compute the square of type T is: +

    +
    T Square(T)(T t)
     {
    -    T Square(T t)
    -    {
    -	return t * t;
    -    }
    +    return t * t;
     }
     
    - then that template is called a Function Template. Function templates can be explicitly instantiated with a !(TemplateArgumentList): @@ -717,10 +718,7 @@ deduced may not have specializations: -
    template Foo(T : T*)
    -{
    -    void Foo(T t) { ... }
    -}
    +
    void Foo(T : T*)(T t) { ... }
     
     int x,y;
     Foo!(int*)(&x);  // ok, T is not deduced from function argument
    @@ -729,10 +727,7 @@
     
     	Template arguments not implicitly deduced can have default values:
     
    -
    template Foo(T, U=T*)
    -{
    -    void Foo(T t) { U p; ... }
    -}
    +
    void Foo(T, U=T*)(T t) { U p; ... }
     
     int x;
     Foo(&x);    // T is int, U is int*
    diff -uNr dmd-0.160/dmd/html/d/templates-revisited.html dmd-0.161/dmd/html/d/templates-revisited.html
    --- dmd-0.160/dmd/html/d/templates-revisited.html	2006-05-31 17:12:00.000000000 +0200
    +++ dmd-0.161/dmd/html/d/templates-revisited.html	2006-06-13 16:04:04.000000000 +0200
    @@ -28,11 +28,12 @@
     " title="Read/write comments and feedback">Comments
     	
  • D
  • Search
  • +
  • Downloads
  • Home
  • -
    Last update Wed May 31 17:11:58 2006 +
    Last update Tue Jun 13 16:04:03 2006
    @@ -92,10 +93,14 @@ @@ -103,7 +108,7 @@

    Tools

    • DMD D Compiler
    • -
    • GDC D Compiler
    • +
    • GDC D Compiler
    • Linker
    • @@ -240,7 +245,7 @@

      are syntactically ambiguous, both to the compiler and the programmer. If you run across a<b,c>d; in unfamiliar code, you've got to slog through -an arbitrarilly large amount of declarations and .h files to figure out +an arbitrarily large amount of declarations and .h files to figure out if it is a template or not. How much effort has been expended by programmers, compiler writers, and language standard writers to deal with this? diff -uNr dmd-0.160/dmd/html/d/type.html dmd-0.161/dmd/html/d/type.html --- dmd-0.160/dmd/html/d/type.html 2006-05-31 17:11:58.000000000 +0200 +++ dmd-0.161/dmd/html/d/type.html 2006-06-06 16:38:20.000000000 +0200 @@ -27,11 +27,12 @@ " title="Read/write comments and feedback">Comments

    • D
    • Search
    • +
    • Downloads
    • Home
    -
    Last update Wed May 31 17:11:57 2006 +
    Last update Tue Jun 6 16:38:19 2006
    @@ -106,8 +107,6 @@
  • Garbage Collection
  • -
  • Memory Management
  • -
  • Floating Point
  • Inline Assembler
  • diff -uNr dmd-0.160/dmd/html/d/warnings.html dmd-0.161/dmd/html/d/warnings.html --- dmd-0.160/dmd/html/d/warnings.html 2006-05-31 17:12:00.000000000 +0200 +++ dmd-0.161/dmd/html/d/warnings.html 2006-06-06 16:38:22.000000000 +0200 @@ -26,11 +26,12 @@ -
    Last update Wed May 31 17:11:58 2006 +
    Last update Tue Jun 6 16:38:21 2006
    @@ -90,10 +91,14 @@ @@ -101,7 +106,7 @@

    Tools

    • DMD D Compiler
    • -
    • GDC D Compiler
    • +
    • GDC D Compiler
    • Linker
    • diff -uNr dmd-0.160/dmd/html/d/wc.html dmd-0.161/dmd/html/d/wc.html --- dmd-0.160/dmd/html/d/wc.html 2006-05-31 17:12:00.000000000 +0200 +++ dmd-0.161/dmd/html/d/wc.html 2006-06-06 16:38:20.000000000 +0200 @@ -27,11 +27,12 @@ " title="Read/write comments and feedback">Comments
    • D
    • Search
    • +
    • Downloads
    • Home
    -
    Last update Wed May 31 17:11:58 2006 +
    Last update Tue Jun 6 16:38:20 2006
    @@ -91,10 +92,14 @@ @@ -102,7 +107,7 @@

    Tools

    • DMD D Compiler
    • -
    • GDC D Compiler
    • +
    • GDC D Compiler
    • Linker
    • diff -uNr dmd-0.160/dmd/html/d/version.html dmd-0.161/dmd/html/d/version.html --- dmd-0.160/dmd/html/d/version.html 2006-06-02 01:48:58.000000000 +0200 +++ dmd-0.161/dmd/html/d/version.html 2006-06-06 16:38:20.000000000 +0200 @@ -27,11 +27,12 @@ " title="Read/write comments and feedback">Comments
    • D
    • Search
    • +
    • Downloads
    • Home
    -
    Last update Fri Jun 2 01:48:56 2006 +
    Last update Tue Jun 6 16:38:20 2006
    @@ -106,8 +107,6 @@
  • Garbage Collection
  • -
  • Memory Management
  • -
  • Floating Point
  • Inline Assembler
  • diff -uNr dmd-0.160/dmd/html/d/windbg.html dmd-0.161/dmd/html/d/windbg.html --- dmd-0.160/dmd/html/d/windbg.html 2006-05-31 17:12:00.000000000 +0200 +++ dmd-0.161/dmd/html/d/windbg.html 2006-06-06 16:38:22.000000000 +0200 @@ -26,11 +26,12 @@ -
    Last update Wed May 31 17:11:58 2006 +
    Last update Tue Jun 6 16:38:21 2006
    @@ -90,10 +91,14 @@ @@ -101,7 +106,7 @@

    Tools