diff -uNr dmd-0.126/dmd/html/d/changelog.html dmd-0.127/dmd/html/d/changelog.html --- dmd-0.126/dmd/html/d/changelog.html 2005-06-07 21:54:28.000000000 +0200 +++ dmd-0.127/dmd/html/d/changelog.html 2005-06-16 21:54:14.000000000 +0200 @@ -37,7 +37,7 @@ | D
-Last update Tue Jun 07 2005 +Last update Thu Jun 16 2005
@@ -45,6 +45,7 @@
+

+ What's New for + D 0.127 +

+ +Jun 16, 2005 +

+ +

New/Changed Features

+ + +

Bugs Fixed

+ + +

What's New for D 0.126 diff -uNr dmd-0.126/dmd/html/d/class.html dmd-0.127/dmd/html/d/class.html --- dmd-0.126/dmd/html/d/class.html 2005-06-07 01:31:22.000000000 +0200 +++ dmd-0.127/dmd/html/d/class.html 2005-06-15 11:43:08.000000000 +0200 @@ -37,7 +37,7 @@ | D
-Last update Tue Jun 07 2005 +Last update Wed Jun 15 2005
@@ -957,7 +957,7 @@ { int m; static int n; - class Inner + static class Inner { int foo() { diff -uNr dmd-0.126/dmd/html/d/comparison.html dmd-0.127/dmd/html/d/comparison.html --- dmd-0.126/dmd/html/d/comparison.html 2005-06-06 18:21:14.000000000 +0200 +++ dmd-0.127/dmd/html/d/comparison.html 2005-06-08 12:43:58.000000000 +0200 @@ -1,775 +1,852 @@ - - - - - -Digital Mars - The D Programming Language - Comparison - - - - -www.digitalmars.com - -[Home] -[Search] -[D] - -
Last modified May 1, 2005. -
- -

D vs Other Languages

- - This table is a quick and rough comparison of various features of - D - with other languages it is frequently compared with. - While many capabilities are available with standard libraries, this - table is for features built in to the core language itself. - Rationale. - Only official standardized features are considered, not proposed - features, betas, or extensions. And, like all language comparisons, - it is biased in terms of what features are mentioned, omitted, and - my interpretation of those features. -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Feature - D - C - C++ - C# - Java -
Garbage Collection - Yes - No - No - Yes - Yes - -
Functions - - - - - - -
Function delegates - Yes - No - No - Yes - No - -
Function overloading - Yes - No - Yes - Yes - Yes - -
Out function parameters - Yes - Yes - Yes - Yes - No - -
Nested functions - Yes - No - No - No - No - -
Function literals - Yes - No - No - No - No - -
Dynamic closures - Yes - No - No - No - No - -
Arrays - - - - - - -
Lightweight arrays - Yes - Yes - Yes - No - No - -
Resizeable arrays - Yes - No - No - No - No - -
Arrays of bits - Yes - No - No - No - No - -
Built-in strings - Yes - No - No - Yes - Yes - -
Array slicing - Yes - No - No - No - No - -
Array bounds checking - Yes - No - No - Yes - Yes - -
Associative arrays - Yes - No - No - No - No - -
Strong typedefs - Yes - No - No - No - No - -
String switches - Yes - No - No - Yes - No - -
Aliases - Yes - Yes - Yes - No - No - -
OOP - - - - - - -
Object Oriented - Yes - No - Yes - Yes - Yes - -
Multiple Inheritance - No - No - Yes - No - No - -
Interfaces - Yes - No - Yes - Yes - Yes - -
Operator overloading - Yes - No - Yes - Yes - No - -
Modules - Yes - No - Yes - Yes - Yes - -
Dynamic class loading - No - No - No - Yes - Yes - -
Nested classes - Yes - Yes - Yes - Yes - Yes - -
Inner (adaptor) classes - No - No - No - No - Yes - -
Covariant return types - Yes - No - Yes - No - No - -
Properties - Yes - No - No - Yes - No - -
Performance - - - - - - -
Inline assembler - Yes - Yes - Yes - No - No - -
Direct access to hardware - Yes - Yes - Yes - No - No - -
Lightweight objects - Yes - Yes - Yes - Yes - No - -
Explicit memory allocation control - Yes - Yes - Yes - No - No - -
Independent of VM - Yes - Yes - Yes - No - No - -
Direct native code gen - Yes - Yes - Yes - No - No - -
Generic Programming - - - - - - -
Class Templates - Yes - No - Yes - Yes - Yes - -
Function Templates - Yes - No - Yes - No - Yes - -
Partial and Explicit Specialization - Yes - No - Yes - No - No - -
Value Template Parameters - Yes - No - Yes - No - No - -
Template Template Parameters - Yes - No - Yes - No - No - -
Mixins - Yes - No - No - No - No - -
typeof - Yes - No - No - Yes - No - -
foreach - Yes - No - No - Yes - Yes - -
Reliability - - - - - - -
Contract Programming - Yes - No - No - No - No - -
Unit testing - Yes - No - No - No - No - -
Static construction order - Yes - No - No - Yes - Yes - -
Guaranteed initialization - Yes - No - No - Yes - Yes - -
RAII (automatic destructors) - Yes - No - Yes - Yes - No - -
Exception handling - Yes - No - Yes - Yes - Yes - -
try-catch-finally blocks - Yes - No - No - Yes - Yes - -
Thread synchronization primitives - Yes - No - No - Yes - Yes - -
Compatibility - - - - - - -
C-style syntax - Yes - Yes - Yes - Yes - Yes - -
Enumerated types - Yes - Yes - Yes - Yes - Yes - -
Support all C types - Yes - Yes - No - No - No - -
80 bit floating point - Yes - Yes - Yes - No - No - -
Complex and Imaginary - Yes - Yes - No - No - No - -
Direct access to C - Yes - Yes - Yes - No - No - -
Use existing debuggers - Yes - Yes - Yes - No - No - -
Struct member alignment control - Yes - No - No - No - No - -
Generates standard object files - Yes - Yes - Yes - No - No - -
Macro text preprocessor - No - Yes - Yes - No - No - -
Other - - - - - - -
Conditional compilation - Yes - Yes - Yes - Yes - No - -
Unicode source text - Yes - Yes - Yes - Yes - Yes - -
- -

Notes

- -
- -
C Language Specification -
ANSI/ISO/IEC 9899-1999 (a.k.a. C99) -

- -

C++ Language Specification -
ISO/IEC 14882-1998 (a.k.a. C++98) -

- -

C# Language Specification -
ECMA-334 -

- -

Java Language Specification -
"The Java Language Specification" by Gosling, Joy, and Steele, - Addison-Wesley, ISBN 0-201-63451-1 -

- -

Object Oriented -
This means support for classes, member functions, - inheritance, and virtual function dispatch. -

- -

Inline assembler -
Many C and C++ compilers support an inline assembler, but - this is not a standard part of the language, and implementations - vary widely in syntax and quality. -

- -

Interfaces -
Support in C++ for interfaces is weak enough that an - IDL (Interface Description Language) was invented to compensate. -

- -

Modules -
Many correctly argue that C++ doesn't really have modules. - But C++ namespaces coupled with header files share many features - with modules. -

- -

Garbage Collection -
The Hans-Boehm garbage collector can be successfully used - with C and C++, but it is not a standard part of the language. -

- -

Contract Programming -
The Digital Mars C++ compiler supports - Contract Programming - as an extension. - Compare some C++ techniques for - doing Contract Programming with D. -

- -

Resizeable arrays -
Part of the standard library for C++ implements resizeable - arrays, however, they are not part of the core language. - A conforming freestanding implementation of C++ (C++98 17.4.1.3) does - not need to provide these libraries. -

- -

Built-in Strings -
Part of the standard library for C++ implements strings, - however, they are not part of the core language. - A conforming freestanding implementation of C++ (C++98 17.4.1.3) does - not need to provide these libraries. - Here's a comparison of C++ strings - and D built-in strings. -

- -

Strong typedefs -
Strong typedefs can be emulated in C/C++ by wrapping a type - in a struct. Getting this to work right requires much tedious - programming, and so is considered as not supported. -

- -

Use existing debuggers -
By this is meant using common debuggers that can operate - using debug data in common formats embedded in the executable. - A specialized debugger useful only with that language is not required. -

- -

Struct member alignment control -
Although many C/C++ compilers contain pragmas to specify - struct alignment, these are nonstandard and incompatible from - compiler to compiler.
- The C# standard ECMA-334 25.5.8 says only this about struct member - alignment: - "The order in which members are packed - into a struct is unspecified. For alignment purposes, there may be - unnamed padding at the beginning of a struct, within a struct, and at - the end of the struct. The contents of the bits used as padding are - indeterminate." - Therefore, although Microsoft may - have extensions to support specific member alignment, they are not an - official part of standard C#. -

- -

Support all C types -
C99 adds many new types not supported by C++. -

- -

80 bit floating point -
While the standards for C and C++ specify long doubles, few - compilers (besides Digital Mars C/C++) actually implement - 80 bit (or longer) floating point types. -

- -

Mixins -
Mixins have many different meanings in different programming - languages. D mixins mean taking an arbitrary - sequence of declarations - and inserting (mixing) them into the current scope. Mixins can be done - at the global, class, struct, or local level. -

- -

C++ Mixins -
C++ mixins refer to a couple different techniques. The first - is analogous to D's interface classes. The second is to create - a template of the form: -
-	template <class Base> class Mixin : public Base
-	{
-	    ... mixin body ...
-	}
- D mixins are different. -

- -

Comparison with Ada -
James S. Rogers has written a - comparison chart with Ada. -

- -

Inner (adaptor) classes -
A nested class is one whose definition is within the scope - of another class. An inner class is a nested class that - can also reference the members and fields of the lexically - enclosing class; one can think of it as if it contained a 'this' - pointer to the enclosing class. - -
- -

Errors

- - If I've made any errors in this table, please contact me so - I can correct them: - -

Feedback and Comments

- - - -
Copyright © 2003-2005 by Digital Mars, All Rights Reserved - -
- - - + + + + + + + + + + + + + + + + + + + + + +Digital Mars - The D Programming Language - Comparison + + + + +www.digitalmars.com + +Home +| Search +| D + +
+Last update Wed Jun 08 2005 +
+ +

D vs Other Languages

+ + This table is a quick and rough comparison of various features of + D + with other languages it is frequently compared with. + While many capabilities are available with standard libraries, this + table is for features built in to the core language itself. + Rationale. + Only official standardized features are considered, not proposed + features, betas, or extensions. And, like all language comparisons, + it is biased in terms of what features are mentioned, omitted, and + my interpretation of those features. +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Feature + D + C + C++ + C# + Java +
Garbage Collection + Yes + No + No + Yes + Yes + +
Functions + + + + + + +
Function delegates + Yes + No + No + Yes + No + +
Function overloading + Yes + No + Yes + Yes + Yes + +
Out function parameters + Yes + Yes + Yes + Yes + No + +
Nested functions + Yes + No + No + No + No + +
Function literals + Yes + No + No + No + No + +
Dynamic closures + Yes + No + No + No + No + +
Typesafe variadic arguments + Yes + No + No + Yes + Yes + +
Arrays + + + + + + +
Lightweight arrays + Yes + Yes + Yes + No + No + +
Resizeable arrays + Yes + No + No + No + No + +
Arrays of bits + Yes + No + No + No + No + +
Built-in strings + Yes + No + No + Yes + Yes + +
Array slicing + Yes + No + No + No + No + +
Array bounds checking + Yes + No + No + Yes + Yes + +
Associative arrays + Yes + No + No + No + No + +
Strong typedefs + Yes + No + No + No + No + +
String switches + Yes + No + No + Yes + No + +
Aliases + Yes + Yes + Yes + No + No + +
OOP + + + + + + +
Object Oriented + Yes + No + Yes + Yes + Yes + +
Multiple Inheritance + No + No + Yes + No + No + +
Interfaces + Yes + No + Yes + Yes + Yes + +
Operator overloading + Yes + No + Yes + Yes + No + +
Modules + Yes + No + Yes + Yes + Yes + +
Dynamic class loading + No + No + No + Yes + Yes + +
Nested classes + Yes + Yes + Yes + Yes + Yes + +
Inner (adaptor) classes + Yes + No + No + No + Yes + +
Covariant return types + Yes + No + Yes + No + Yes + +
Properties + Yes + No + No + Yes + No + +
Performance + + + + + + +
Inline assembler + Yes + Yes + Yes + No + No + +
Direct access to hardware + Yes + Yes + Yes + No + No + +
Lightweight objects + Yes + Yes + Yes + Yes + No + +
Explicit memory allocation control + Yes + Yes + Yes + No + No + +
Independent of VM + Yes + Yes + Yes + No + No + +
Direct native code gen + Yes + Yes + Yes + No + No + +
Generic Programming + + + + + + +
Class Templates + Yes + No + Yes + Yes + Yes + +
Function Templates + Yes + No + Yes + No + Yes + +
Implicit Function Template Instantiation + No + No + Yes + No + No + +
Partial and Explicit Specialization + Yes + No + Yes + No + No + +
Value Template Parameters + Yes + No + Yes + No + No + +
Template Template Parameters + Yes + No + Yes + No + No + +
Mixins + Yes + No + No + No + No + +
static if + Yes + No + No + No + No + +
is expressions + Yes + No + No + No + No + +
typeof + Yes + No + No + Yes + No + +
foreach + Yes + No + No + Yes + Yes + +
Reliability + + + + + + +
Contract Programming + Yes + No + No + No + No + +
Unit testing + Yes + No + No + No + No + +
Static construction order + Yes + No + No + Yes + Yes + +
Guaranteed initialization + Yes + No + No + Yes + Yes + +
RAII (automatic destructors) + Yes + No + Yes + Yes + No + +
Exception handling + Yes + No + Yes + Yes + Yes + +
try-catch-finally blocks + Yes + No + No + Yes + Yes + +
Thread synchronization primitives + Yes + No + No + Yes + Yes + +
Compatibility + + + + + + +
C-style syntax + Yes + Yes + Yes + Yes + Yes + +
Enumerated types + Yes + Yes + Yes + Yes + Yes + +
Support all C types + Yes + Yes + No + No + No + +
80 bit floating point + Yes + Yes + Yes + No + No + +
Complex and Imaginary + Yes + Yes + No + No + No + +
Direct access to C + Yes + Yes + Yes + No + No + +
Use existing debuggers + Yes + Yes + Yes + No + No + +
Struct member alignment control + Yes + No + No + No + No + +
Generates standard object files + Yes + Yes + Yes + No + No + +
Macro text preprocessor + No + Yes + Yes + No + No + +
Other + + + + + + +
Conditional compilation + Yes + Yes + Yes + Yes + No + +
Unicode source text + Yes + Yes + Yes + Yes + Yes + +
+ +

Notes

+ +
+ +
C Language Specification +
ANSI/ISO/IEC 9899-1999 (a.k.a. C99) +

+ +

C++ Language Specification +
ISO/IEC 14882-1998 (a.k.a. C++98) +

+ +

C# Language Specification +
ECMA-334 +

+ +

Java Language Specification +
"The Java Language Specification" by Gosling, Joy, and Steele, + Addison-Wesley, ISBN 0-201-63451-1 +

+ +

Object Oriented +
This means support for classes, member functions, + inheritance, and virtual function dispatch. +

+ +

Inline assembler +
Many C and C++ compilers support an inline assembler, but + this is not a standard part of the language, and implementations + vary widely in syntax and quality. +

+ +

Interfaces +
Support in C++ for interfaces is weak enough that an + IDL (Interface Description Language) was invented to compensate. +

+ +

Modules +
Many correctly argue that C++ doesn't really have modules. + But C++ namespaces coupled with header files share many features + with modules. +

+ +

Garbage Collection +
The Hans-Boehm garbage collector can be successfully used + with C and C++, but it is not a standard part of the language. +

+ +

Contract Programming +
The Digital Mars C++ compiler supports + Contract Programming + as an extension. + Compare some C++ techniques for + doing Contract Programming with D. +

+ +

Resizeable arrays +
Part of the standard library for C++ implements resizeable + arrays, however, they are not part of the core language. + A conforming freestanding implementation of C++ (C++98 17.4.1.3) does + not need to provide these libraries. +

+ +

Built-in Strings +
Part of the standard library for C++ implements strings, + however, they are not part of the core language. + A conforming freestanding implementation of C++ (C++98 17.4.1.3) does + not need to provide these libraries. + Here's a comparison of C++ strings + and D built-in strings. +

+ +

Strong typedefs +
Strong typedefs can be emulated in C/C++ by wrapping a type + in a struct. Getting this to work right requires much tedious + programming, and so is considered as not supported. +

+ +

Use existing debuggers +
By this is meant using common debuggers that can operate + using debug data in common formats embedded in the executable. + A specialized debugger useful only with that language is not required. +

+ +

Struct member alignment control +
Although many C/C++ compilers contain pragmas to specify + struct alignment, these are nonstandard and incompatible from + compiler to compiler.
+ The C# standard ECMA-334 25.5.8 says only this about struct member + alignment: + "The order in which members are packed + into a struct is unspecified. For alignment purposes, there may be + unnamed padding at the beginning of a struct, within a struct, and at + the end of the struct. The contents of the bits used as padding are + indeterminate." + Therefore, although Microsoft may + have extensions to support specific member alignment, they are not an + official part of standard C#. +

+ +

Support all C types +
C99 adds many new types not supported by C++. +

+ +

80 bit floating point +
While the standards for C and C++ specify long doubles, few + compilers (besides Digital Mars C/C++) actually implement + 80 bit (or longer) floating point types. +

+ +

Mixins +
Mixins have many different meanings in different programming + languages. D mixins mean taking an arbitrary + sequence of declarations + and inserting (mixing) them into the current scope. Mixins can be done + at the global, class, struct, or local level. +

+ +

C++ Mixins +
C++ mixins refer to a couple different techniques. The first + is analogous to D's interface classes. The second is to create + a template of the form: +
+	template <class Base> class Mixin : public Base
+	{
+	    ... mixin body ...
+	}
+ D mixins are different. +

+ +

Static If +
The C and C++ preprocessor directive #if would appear to + be equivalent to the D static if. But there are major and crucial + differences - the #if does not have access to any of the constants, + types, or symbols of the program. It can only access preprocessor + macros. + See this example. +

+ +

Is Expressions +
Is expressions enable conditional compilation based + on the characteristics of a type. This is done after a fashion in + C++ using template parameter pattern matching. + See this example + for a comparison of the different approaches. +

+ +

Comparison with Ada +
James S. Rogers has written a + comparison chart with Ada. +

+ +

Inner (adaptor) classes +
A nested class is one whose definition is within the scope + of another class. An inner class is a nested class that + can also reference the members and fields of the lexically + enclosing class; one can think of it as if it contained a 'this' + pointer to the enclosing class. + +
+ +

Errors

+ + If I've made any errors in this table, please contact me so + I can correct them: + +

Feedback and Comments

+ + Add feedback and comments regarding this + page. + +
+Copyright © 1999-2005 by Digital Mars, All Rights Reserved

+ + + + + + + + + + diff -uNr dmd-0.126/dmd/html/d/cppstrings.html dmd-0.127/dmd/html/d/cppstrings.html --- dmd-0.126/dmd/html/d/cppstrings.html 2005-05-19 15:08:48.000000000 +0200 +++ dmd-0.127/dmd/html/d/cppstrings.html 2005-06-14 15:15:54.000000000 +0200 @@ -37,7 +37,7 @@ | D
-Last update Thu May 19 2005 +Last update Tue Jun 14 2005


D Strings vs C++ Strings

@@ -129,13 +129,13 @@ // string is empty

- In D, an empty string is just null: + In D, an empty string has zero length:


 	char[] str;
-	if (!str)
+	if (!str.length)
 		// string is empty
 

diff -uNr dmd-0.126/dmd/html/d/cpptod.html dmd-0.127/dmd/html/d/cpptod.html --- dmd-0.126/dmd/html/d/cpptod.html 2005-06-06 17:53:30.000000000 +0200 +++ dmd-0.127/dmd/html/d/cpptod.html 2005-06-14 15:15:54.000000000 +0200 @@ -38,7 +38,7 @@ | D
-Last update Mon Jun 06 2005 +Last update Tue Jun 14 2005


Programming in D for C++ Programmers

@@ -756,9 +756,8 @@

The D Way

The D version could also be written with recursive templates, - but there's a better way. The most obvious thing about this - solution is it is a lot shorter. - Next, unlike the C++ example, this one is fairly easy to + but there's a better way. + Unlike the C++ example, this one is fairly easy to figure out what is going on. It compiles quickly, and gives a sensible compile time message if it fails. @@ -835,8 +834,8 @@

The D Way

- SFINAE can be done in D without resorting to template partial - specializations: + SFINAE can be done in D without resorting to template argument + pattern matching:

diff -uNr dmd-0.126/dmd/html/d/expression.html dmd-0.127/dmd/html/d/expression.html --- dmd-0.126/dmd/html/d/expression.html 2005-06-07 01:31:22.000000000 +0200 +++ dmd-0.127/dmd/html/d/expression.html 2005-06-15 12:43:22.000000000 +0200 @@ -37,7 +37,7 @@ | D
-Last update Tue Jun 07 2005 +Last update Wed Jun 15 2005

Expressions

@@ -120,7 +120,7 @@ RelExpression !< ShiftExpression RelExpression !<= ShiftExpression - InExpression: + InExpression: RelExpression in ShiftExpression ShiftExpression: diff -uNr dmd-0.126/dmd/html/d/function.html dmd-0.127/dmd/html/d/function.html --- dmd-0.126/dmd/html/d/function.html 2005-05-22 19:28:06.000000000 +0200 +++ dmd-0.127/dmd/html/d/function.html 2005-06-08 11:55:44.000000000 +0200 @@ -37,7 +37,7 @@ | D
-Last update Sun May 22 2005 +Last update Wed Jun 08 2005

Functions

@@ -563,7 +563,7 @@ return sum(ii); // returns 15 } - void sum(int[] ar ...) + int sum(int[] ar ...) { int s; foreach (int x; ar) @@ -591,7 +591,7 @@ return sum(jj); // error, type mismatch } - void sum(int[3] ar ...) + int sum(int[3] ar ...) { int s; foreach (int x; ar) diff -uNr dmd-0.126/dmd/html/d/overview.html dmd-0.127/dmd/html/d/overview.html --- dmd-0.126/dmd/html/d/overview.html 2005-05-19 15:08:48.000000000 +0200 +++ dmd-0.127/dmd/html/d/overview.html 2005-06-09 02:17:28.000000000 +0200 @@ -37,7 +37,7 @@ | D
-Last update Thu May 19 2005 +Last update Thu Jun 09 2005

Overview

@@ -183,15 +183,17 @@ D development.
    -
  • The general look and feel of C/C++ will be maintained. - It will use the same algebraic syntax, most of the same expression +
  • The general look and feel of C/C++ is maintained. + It uses the same algebraic syntax, most of the same expression and statement forms, and the general layout.
  • D programs can be written either in - C style function-and-data or - in C++ style object-oriented, or any mix of the two. + C style function-and-data, + C++ style object-oriented, + C++ style template metaprogramming, + or any mix of the three. -
  • The compile/link/debug development model will be +
  • The compile/link/debug development model is carried forward, although nothing precludes D from being compiled into bytecode and interpreted. @@ -217,7 +219,7 @@ D programs can overload operators enabling extension of the basic types with user defined types. -
  • Templates. +
  • Template Metaprogramming. Templates are a way to implement generic programming. Other ways include using macros or having a variant data type. Using macros is out. Variants are straightforward, but @@ -232,7 +234,7 @@ RAII techniques are an essential component of writing reliable software. -
  • Down and dirty programming. D will retain the ability to +
  • Down and dirty programming. D retains the ability to do down-and-dirty programming without resorting to referring to external modules compiled in a different language. Sometimes, it's just necessary to coerce a pointer or dip into assembly @@ -282,13 +284,14 @@ of struct's are in a separate but parallel symbol table. C++ attempted to merge the tag name space with the regular name space, while retaining backward compatibility with legacy C code. The - result is not printable. + result is needlessly confusing.
  • Forward declarations. C compilers semantically only know about what has lexically preceded the current state. C++ extends this a little, in that class members can rely on forward referenced class members. D takes this to its logical conclusion, forward declarations - are no longer necessary at all. Functions can be defined in a natural + are no longer necessary at the module level. + Functions can be defined in a natural order rather than the typical inside-out order commonly used in C programs to avoid writing forward declarations. @@ -297,18 +300,8 @@ must reparse enormous quantities of header files. Include files should be done as importing a symbol table. -
  • Creating object instances on the stack. In D, all class objects - are by reference. This eliminates the need for copy constructors, - assignment operators, complex destructor - semantics, and interactions with exception handling stack unwinding. - Memory resources get freed by the garbage collector, other resources - are freed by using the RAII features of D. -
  • Trigraphs and digraphs. Unicode is the future. -
  • Preprocessor. Modern languages should not be text processing, - they should be symbolic processing. -
  • Non-virtual member functions. In C++, a class designer decides in advance if a function is to be virtual or not. Forgetting to retrofit the base class member function to be virtual when the function gets @@ -336,7 +329,7 @@ makes it more likely that multiple, correct implementations are available. -
  • Distinction between . and ->. This distinction +
  • Distinction between . and ->. This distinction is really not necessary. The . operator serves just as well for pointer dereferencing.
@@ -625,7 +618,7 @@ which is much simpler to understand. - D arrays come in 4 varieties: pointers, static arrays, dynamic + D arrays come in several varieties: pointers, static arrays, dynamic arrays, and associative arrays. See Arrays. @@ -639,7 +632,7 @@

Resource Management

-

Garbage Collection

+

Automatic Memory Management

D memory allocation is fully garbage collected. Empirical experience suggests that a lot of the complicated features of C++ are necessary