D vs 其他语言

D vs 其他语言

下表给出了 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 内建字符串的一个 比较 。

强类型定义 typedef
强类型定义 typedef 在 C/C++ 中可以通过将一个类型用一个结构封装来模拟。如果要采用这种方式,会使编程工作十分繁琐,所以它并不被人支持。

使用现有的调试器
采用这种方法意味着使用那些能够处理嵌入到常见可执行文件格式中的调试数据的常见调试器。不必编写一个只能用于某种语言的调试程序。

结构成员的对齐控制
尽管许多的 C/C++ 编译器包括指定结构对齐方式的编译器指令,但对此并没有一个标准,而不同编译器的做法通常是不兼容的。关于结构成员对齐,C# 标准 ECMA-334 25.5.8 只提到: “成员在结构中的顺序是未指定的。出于对齐的目的,可以在结构的开头、中间或者结尾处加入匿名填充。填充值是未定义的。”因此,尽管 Microsoft 可能进行扩展以支持特定的成员对齐方式,但它们不是 C# 官方标准的一部分。

支持所有 C 类型
C99 添加了 C++ 部支持的许多新类型。

80 位浮点数
尽管 C 和 C++ 标准规定了 long double 类型,很少有编译器(除了 Digital Mars C/C++)真正实现了 80 位(或更长)的浮点类型。

混入
在不同的程序设计语言中,混入有许多不同的意义。D 的混入 是指将任意的声明序列插入(混入)到当前作用域中。混入可以在全局、类、结构或者局部级别使用。

C++ 混入
C++ 混入指的是另一套技术。其一同 D 的接口类是同类的东西。其二是指创建一个下述形式的模板:
	 < Base>  Mixin :  Base
	{
	    ... 混入过程体 ...
	}
D 的混入与此不同。

同 Ada 的比较
James S. Rogers 编绘了 同 Ada 的比较图 。

内部(适配器)类
嵌套类 是定义在另一个类作用域内的类。 内部类 是能够引用外部类的成员和域的嵌套类;你可以把它们看作是拥有指向包含它们的外部类的‘this’指针的类。

错误

如果我在这张表中犯了任何的错误,请联系我,我将改正。 ——Walter Bright

你可能感兴趣的:(D,Language)