编程语言之D语言
2015-02-02 16:59:04 阿炯

D语言是由Digital Mars公司的Walter Bright所开发的面向对象、指令式、多范型系统程序设计语言。其起源自C++,并受到其很大的影响,不过D语言并不是C++的变种。它对C++的部分特性进行了重新设计,并受到其它编程语言观念的影响,如Java、C#以及Eiffel。2007年1月2日发布1.0稳定版本,实验性版本2.0发布于同年1月17日。


D is a language with C-like syntax and static typing. It pragmatically combines efficiency, control, and modeling power, with safety and programmer productivity.

Walter Bright本身是Symantec C++ 编译器的作者。另一名作者Andrei Alexandrescu是Facebook的研究科学家,他与一个团队用D语言重写一些Facebook的重要操作。


D语言是一种通用的系统和应用编程语言。它是比 C++ 更高级的语言,同时还保持了生成高效代码以及直接访问操作系统API和硬件的能力。D 很适合于编写从中等规模到那些由团队合作完成、数百万行代码规模的各种程序。它易于学习,为编程者提供了很多便利,并且适用各种野心勃勃的编译器优化技术。

D 不是脚本语言,也不是一种解释型语言。它不需要虚拟机、宗教、或者高于一切的哲学。它是给实际的编程者使用的实际的语言,它帮助编程者快速、可靠的完成易于维护、易于理解的代码。它是数十年来实现多种语言编译器的经验的积累,是用那些语言构造大型工程的尝试的积累。D 从那些语言(主要是 C++ )那里获得了灵感,并使用经验和现实世界中的实用性来驯服它。

为什么需要D语言

自从 C 语言被发明以来,软件工业走过了一段很长的路。许多新的概念被加入了 C++ 中,但同时维护了同 C 的向后兼容性,包括兼容了原始设计中的所有的弱点。有很多修正这些弱点的尝试,但是兼容性是最大的困扰。同时 C 和 C++ 都在不断引入新的特性,这些新特性必须被小心的加入到现有的结构中,以免重写旧的代码。最终的结果十分复杂—— C 标准将近 500 页,C++ 标准大概有 750 页!其实现起来既困难又代价高昂,造成的结果就是各种实现之间都有差别,因此很难写出完全可以移植的 C++ 代码。

C++程序员倾向于使用语言中的孤岛来编程,也就是说,他们倾向于十分精通语言中的某个特性而避免使用其他特性。尽管代码通常在编译器之间是可移植的,但在程序员之间移植就不那么容易了。C++ 的一个长处是它支持很多根本上不同的编程风格——但从长远来看,互相重复和互相冲突的风格会给开发带来妨碍。

C++ 在标准库而不是语言核心中实现了可改变大小的数组和字符串拼接等。不在语言核心中实现这些功能造成了几种不太理想的结果。是否能把 C++ 的能力释放、重新设计并重铸到一门简单、正交并实用的语言中呢? 这种语言是否能做到易于正确实现,并使编译器有能力有效地生成高度优化的代码呢?

现代编译器技术已经取得了很大的进步,有些原来用作原始编译技术的补充的语言特性已经可以被忽略了(一个这样的例子是 C 语言中的‘register’关键字,一个更为微妙的例子是 C 中的宏预处理程序)。我们可以依赖现代编译器的优化技术而不是使用语言特性(如同原始的编译器所做的那样)来获得可以接受的代码质量。

特性

D的设计来自实际的C++用法的经验教训,而不是从理论的角度。尽管D用到很多C/C++观念,同时也废除了某部分,因此其并不完全向后兼容C/C++源代码。D加入了C++的功能,也实现了契约式设计(design by contract)、单元测试、真正的模块性、自动化存储器管理(垃圾回收)、第一类数组(first class array)、关系数组、动态数组、数组切片、嵌套函数(嵌套函数)、内部类、闭包的限制形式、匿名函数、编译时期函数运行、惰性计算以及革新的模板语法。它保有C++的性能以进行低级程序设计,并加入完整的内联汇编器支持。C++的多重继承改以Java 单继承与接口混合的风格取代。D的声明、语句和表达式语法几乎和C++一样。


最新版本:2.0
D 语言(DLang) 2.098 版本已于2021年11月初发布,公告显示,现在以 DMD 2.098.0(D 编译器)和 LDC 1.28.0(基于 LLVM 的 D 编译器)的形式提供。此外D语言已经支持 OpenBSD。此版本包含 17 项目主要变更,同时修复了 160 个 issue。

编译器变更
添加别名赋值 (Alias Assignment) 功能
通过 ImportC 编译器从 D 语言访问 C 语言的声明
使用 syntax (args) => {} 会触发一条 deprecation 消息
对生成 C++ 头文件的改进
默认启用 -preview=dtorfields
为向量类型添加 .min, .max 等属性
使用可变变量作为 switch case 会触发错误
越界的数组访问现在会提供更友好的错误消息
从 D 语言中删除类分配器 (Class allocators)
初始化来自 static this 的不可变全局数据现在会触发一个错误
添加 -target=<triple> 用于操作系统、C 和 C++ 运行时交叉编译
默认初始化 union 不是第一个成员的字段现在会触发错误

运行时变更
聚合体的 TypeInfo 名称完全符合要求,因此目前是唯一的
针对 Posix 系统的并发 GC
改进 POSIX imports

库变更
在 std.utf 中新增函数 isValidCharacter

Dub 变更
在 dub 设置文件和 dub.json/dub.sdl 中增加了对环境变量的支持,可使用编译和运行(或测试)选项


官方主页:http://dlang.org/

参考来源:
http://www.d-programming-language-china.org/

http://zh.wikipedia.org/wiki/D語言