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 | |||||
Templates | Yes | No | Yes | No | No |
Mixins | Yes | No | No | No | No |
typeof | Yes | No | No | Yes | No |
foreach | Yes | No | No | Yes | No |
Constraints | Yes | No | No | No | No |
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 | No |
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 |
template <class Base> class Mixin : public Base { ... mixin body ... }D mixins are different.