下表给出了
D 同其他经常提到的语言在各个特征上的粗略的比较。尽管各个语言的标准库中也提供了很多功能,但这张表格只考虑内建到语言核心中的特征。我们只考虑官方的标准特征,不考虑被提议的特征、测试版的特征或者非标准的扩展特征。而且,如同所有其他的语言比较一样,提到什么特征、忽略什么特征以及我对这些特征的解释都是带有偏向性的。
特性
D
C
C++
C#
Java
垃圾收集
Yes
No
No
Yes
Yes
函数
函数委托
Yes
No
No
Yes
No
函数重载
Yes
No
Yes
Yes
Yes
传出(out)函数参数
Yes
Yes
Yes
Yes
No
嵌套函数
Yes
No
No
No
No
函数文字量
Yes
No
No
No
No
动态闭包
Yes
No
No
No
No
数组
轻量数组
Yes
Yes
Yes
No
No
变长数组
Yes
No
No
No
No
位数组
Yes
No
No
No
No
内建字符串
Yes
No
No
Yes
Yes
数组切片
Yes
No
No
No
No
数组边界检查
Yes
No
No
Yes
Yes
关联数组
Yes
No
No
No
No
强类型定义 typedef
Yes
No
No
No
No
字符串 switch 语句
Yes
No
No
Yes
No
别名
Yes
Yes
Yes
No
No
OOP
面向对象
Yes
No
Yes
Yes
Yes
多重继承
No
No
Yes
No
No
接口
Yes
No
Yes
Yes
Yes
运算符重载
Yes
No
Yes
Yes
No
模块
Yes
No
Yes
Yes
Yes
动态类装入
No
No
No
Yes
Yes
嵌套类
Yes
Yes
Yes
Yes
Yes
内部(适配器)类
No
No
No
No
Yes
协变返回型别
Yes
No
Yes
No
No
属性
Yes
No
No
Yes
No
性能
内联汇编
Yes
Yes
Yes
No
No
直接访问硬件
Yes
Yes
Yes
No
No
轻量对象
Yes
Yes
Yes
Yes
No
显示内存分配控制
Yes
Yes
Yes
No
No
独立于虚拟机
Yes
Yes
Yes
No
No
直接生成本地代码
Yes
Yes
Yes
No
No
泛型编程
模板
Yes
No
Yes
No
No
混入
Yes
No
No
No
No
typeof
Yes
No
No
Yes
No
foreach
Yes
No
No
Yes
No
约束
Yes
No
No
No
No
可靠性
契约式编程
Yes
No
No
No
No
单元测试
Yes
No
No
No
No
静态构造顺序
Yes
No
No
Yes
Yes
确保初始化
Yes
No
No
Yes
Yes
RAII(自动析构函数)
Yes
No
Yes
Yes
No
异常处理
Yes
No
Yes
Yes
Yes
try-catch-finally 基本块
Yes
No
No
Yes
Yes
线程同步原语
Yes
No
No
Yes
Yes
兼容性
C风格语法
Yes
Yes
Yes
Yes
Yes
枚举型别
Yes
Yes
Yes
Yes
No
支持所有 C 型别
Yes
Yes
No
No
No
80 位浮点数
Yes
Yes
Yes
No
No
负数和虚数
Yes
Yes
No
No
No
直接访问 C
Yes
Yes
Yes
No
No
使用现有的调试器
Yes
Yes
Yes
No
No
结构成员对齐控制
Yes
No
No
No
No
生成标准目标文件
Yes
Yes
Yes
No
No
宏文本预处理器
No
Yes
Yes
No
No
其他
条件编译
Yes
Yes
Yes
Yes
No
Unicode源代码
Yes
Yes
Yes
Yes
Yes
注记
C 语言规范
ANSI/ISO/IEC 9899-1999 (a.k.a. C99)
C++ 语言规范
ISO/IEC 14882-1998 (a.k.a. C++98)
C# 语言规范
ECMA-334
Java 语言规范
"The Java Language Specification" by Gosling, Joy, and Steele, Addison-Wesley, ISBN 0-201-63451-1
面向对象
这意味着支持类、成员函数、继承和虚函数分派。
内联汇编
许多 C 和 C++ 编译器支持内联汇编,但这并不是语言标准的一部分,并且各种实现的语法和质量都有很大差别。
接口
C++ 对接口的支持是如此不完善,以至于专门发明了 IDL(接口定义语言)弥补这个不足。
模块
许多人指出 C++ 并不真正支持模块,他们是对的。但是 C++ 的名字空间和头文件一起可以实现模块的许多特征。
垃圾收集
Hans-Boehm 垃圾收集器可以成功的用于 C 和 C++ ,但是这并不是语言标准的一部分。
契约式编程
Digital Mars 的 C++ 编译器的一个扩展支持 契约式编程 。可以对比一下实现契约式编程的 C++ 技术 和 D 支持的契约式编程。
变长数组
C++ 标准库中有一部分是用于实现变长数组的,但是,它们并不是核心语言的一部分。一个符合标准的独立的 C++(C++98 17.4.1.3)实现并不必须提供这些库。
内建字符串
C++ 标准库中有一部分是用于实现字符串的,但是,它们并不是核心语言的一部分。一个符合标准的独立的 C++(C++98 17.4.1.3)实现并不必须提供这些库。这有关于 C++ 字符串和 D 内建字符串的一个 比较 。