D语言

title: 特性.
content: D的设计来自实际的C++用法的经验教训,而不是从理论的角度。D沿用了很多C/C++观念,同时摒弃了一些概念,因此D并不完全相容C/C++代码。D实现了C++的功能,实现了契约式设计(design by contract)、单元测试、真正的模组性、自动化内存管理(垃圾回收)、第一类数组(first class array)、关联数组、动态数组、数组切片、嵌套函数(巢状函式)、内部类别、闭包的限制形式、匿名函式、编译时期函式执行、惰性计算以及革新的模板语法。D保有C++的性能以进行低阶程序设计,并加入完整的内联组译器支援。C++的多重继承改以Java 单继承与接口混合的风格取代。D的宣告、语句和表达式语法几乎和C++一样。  内联组译器(inline assembler)象征了D和Java、C#等应用程序语言的不同。内联组译器让程序员输入机器特定的组合语言码,如同标准D代码—通常由系统程序员使用的技术,以存取处理器的低阶功能,直接以硬件下的界面执行程序,如操作系统以及驱动程序。  D内建支援文件注解,不过目前为止,只有Digital Mars实作版本有提供文件产生器。
title: 程序设计范型.
content: D支援五种主要的程序设计泛型—指令式、物件导向以及元程序设计、函数式和并发(演员模型)。
title: 指令式.
content: 指令式程序设计几乎和C一样。函式、资料、语句、宣告以及表达式的运作就如同C一般,且可直接存取C执行时期程序库。
title: 物件导向.
content: 在D里面的物件导向程序设计,是以单继承分层结构,配合所有类别衍伸自类别物件为基础。多重继承可使用界面(界面很像C++的抽象类别)。
title: 元程序设计.
content: 以模板组合、编译时期函式执行、多元组以及字串混合来支援元程序设计。
title: 内存管理.
content: 内存通常以垃圾回收管理,不过当这些物件超出作用域时,可立即结束指定的物件。还是可以使用重载运算子new和delete,以及简单的直接呼叫C的malloc函数和free函数以进行显示的内存管理。垃圾回收可禁用个别的物件或事件,以健全整个程序,如果在内存管理上有更多的控制,则更为理想。当垃圾回收在程序中有所不足时,手册还提供许多如何实作不同的高度最佳化内存管理方案的范例。
title: 与其它系统的相互作用.
content: 支援C的应用程序二进制接口(ABI),以及C的基本和衍伸型态,就能直接存取现有的C代码以及程序库。C的标准函式库也是D标准的一部分。除非你使用非常清楚的命名空间,它可以稍微散乱的存取,因为它散布遍及于D模组—不过纯粹的D标准函式库也通常够用,除非要与C代码接合。  并未完整支援C++的ABI,尽管D可以存取写给C ABI的C++代码,且可存取C++COM(元件物件模型)代码。D语法分析器了解外部(C++)呼叫约定,以连结C++物件,不过它只实作在D 2.0。
title: D 2.0.
content: D 2.0,D 新一代版本,D2.0与D1.0是不兼容的,类似Python2和Python3的区别。目前D2已经稳定下来。其中一部分特性包括支援强制常数正确性(const-correctness),以及有限的支援连结以 C++ 编写的代码。
title: 实现.
content: 目前D直接编译成原生码以高效执行。  D语言1.x版本已稳定,不再功能变更或扩展,2.0版本是其正式版本,不完全相容旧版本的语言和编译器。官方编译器由Walter Bright定义语言本身。
title: 问题和争议.
title: 运算子重载.
content: D运算子重载在一定程度上不如C++强大。简单的例子是opIndex,它不允许返回引用。这使像是obj[i] = 5;的赋值不可能存在。D的解决方法是opIndexAssign运算子,它只用于这种特殊情况。此外,C++返回参考的方法允许返回型态的重载赋值运算子的用法。这在目前的D还不可能做到。D 2.0将会引入opIndexLvalue修正 - 类似运算子重载和opIndexAssign。
title: 低功的结构.
content: 结构在D之中是一种朴素旧式资料的型态,不过也可像变量一样包含方法。这对有意轻量化的建构而言相当实用,如矩阵或向量,这些不需要完整的D类别功能(以及体积)。然而,D结构没有建构子和解构子。建构子可用静态opCall运算子部分取代,不过它没有适合的解构子等价物。此外,结构不允许继承,这会是有益的设计,如诡异循环模板模式(curiously recurring template pattern)的使用。
title: 标准函式库中缺乏功能.
content: D的标准函式库称作Phobos,且时常被认为过分简单。tango专案编写另一个标准函式库试图修正这一部分,不过phobos和tango目前由于不同的物件类别实作(导致垃圾回收困难)而互不相容。存在两种事实上的标准函式库可能导致更大的问题,部分软件使用phobos,而其它软件使用tango。
title: 缺乏明确的目标.
content: D经常限于「修正并改进的C++」。这会导致过分强调功能,这起因于加入新功能只是因为他们认为有用。举个例子,
title: 未完成对共享/动态函式库的支援.
content: Unix的ELF共享函式库使用GDC编译器支援到某个程度。在Windows系统中,目前还不支援DLL。因此现阶段不可能编写插件。不像C++,经由C函式传送的D物件将不能运作,因为这将会与垃圾回收器产生冲突。
title: 范例.
title: 范例1.
content: 这个范例程序会输出它自己的命令列参数。main函式是D程序的进入点,args是表示为字串阵列的命令列参数。在D语言里的字串是一个字符阵列,以char[]表示。新版本中定义string为char[]的别名,不过别名定义必须与旧版本相容。  foreach语法可迭代所有的集合,在本例中,它从args阵列生成索引(i)和值(a)的序列。索引i和值a的型态会从args阵列的型态推断。
title: 范例2.
content: 本例使用关联阵列建立更复杂的资料结构。
title: 范例3.
content: 本例繁多的注解显示出D语言与C++ 的不同之处,以及仍然保留的方面。
title: 范例4.
content: 本例显示出一部分D语言强大的编译时期特性。

Summary: D语言是一种程序语言,具备多范型,例如物件导向、指令式。由沃尔特·布莱特和安德烈·亚历山德雷斯库所开发,起源自C++,深受C++的影响,然而其不是C++的变种,而是重新设计来自C++的部分特性,并受到其它程序语言观念的影响,如Java、C#以及Eiffel。2007年1月2日释出1.0稳定版本。版本2.0释出于2007年1月17日。

D (programming language): D, also known as Dlang, is a multi-paradigm system programming language created by Walter Bright at Digital Mars and released in 2001. Andrei Alexandrescu joined the design and development effort in 2007. Though it originated as a re-engineering of C++, D is a distinct language. It has redesigned some core C++ features, while also sharing characteristics of other languages, notably Java, Python, Ruby, C#, and Eiffel.