返回首页 - Notes - 2013

D语言基础入门


环境的搭建

访问 http://dlang.org/download.html 下载 dmd.2.xxx.zip 解压即可(当前最新为 dmd.2.063.2

如果是 Windows 平台,则只需要解压后的 windowssrc 两个子文件夹,余者可删除

确保有这样的目录结构:dmd/windowsdmd/src,此外需要将 dmd/windows/bin 路径加入你的 path 环境变量

使用 Vim 的用户可上 https://github.com/JesseKPhillips/d.vim 下载 D语言 最新的语法支持插件(最新的 Vim7.4 已自带 D语言 语法高亮)


编译与运行

经典的 helloworldD语言 演绎如下:

import std.stdio;

void main ()
{
    writeln("hello, world");
}
  1. 编译:dmd -wi hello.d-wi 指令是告诉编译器,将编译警告提示出来,但不终止编译)
  2. 运行:hello.exeWindows) 或 ./helloLinux
  3. 不编译直接运行:dmd -run hello.d 或者 rdmd hello.d,对于 Linux 系统还可以在源文件第一行书写 #!/usr/bin/env rdmd

语言概述

D语言 是一门旨在改进 C++ 易用性而诞生的系统编程语言,既拥有访问系统层级资源的能力,又有着动态语言的优美和便捷

Go语言 颠覆式的革新不同,D语言 才真正是 “更好的C、更好的C++”,D语言 每一个特性的添加无一不针对 C/C++ 已有的不便进行

DPython 引入了 import 语法和模块机制,以取代 C/C++ 传统的 #include 预处理,因为导入的只是一个符号,所以不再有 C/C+ 头文件重复包含的困扰

Ruby 借鉴了 Mixin 思想以取代多重继承,借用 .. 语法以便捷地生成 Range

变量声明不再需要显式指定数据类型,实际类型将由 D 编译器自动推导得出(当然,手动指定也是允许的),在 C/C++ 中一般不显式指定的 auto 关键字,在 D 中却用的很频繁


数据类型

不再有 C/C++ 中的 unsigned 修饰符,取而代之的是在数据类型最前面加上 u 表示无符号


数组

不同于 C/C++D 的数组是可动态延伸的,且会记住自己的长度(可通过 数组名.length 取得)

数组/关联数组:元素类型[数组初始大小] 数组名值类型[键类型] 关联数组名

C/C++ 语法结构上的不同在于,C/C++ 声明数组时将 [] 写在变量名后面,而 D[] 写在类型名后面,如 int arr[10] in C/C++ and int[10] arr in D

数组默认是复制指针,也就是浅复制,修改新数组的值将影响到原数组,如果需要深复制,则需要使用形如 int[] arr2 = arr1.dup 的写法(这貌似是从 Ruby 那拿来的)

对于 Slice(切片),用 .. 代表区间,前包后不包(a..b 等同于数学集合 [a,b)),且美元符代表当前处理数组的长度,所以 0..美元符 就和数组本身是一样的了


结构体

结构体定义:

struct 结构体名 {
    结构体内容
}

D 不像 C++ 一样,把 结构体 混在一起,在 D 里面,结构体 就只是一个自定义的数据结构,和 没有半毛钱关系


流程控制

foreach 循环:

foreach (循环变量; 目标数组) {
    循环体
}

foreach (循环下标, 循环变量; 目标数组) {
    循环体
}

函数

函数定义:

返回值类型 函数名 (可选的类型声明) (参数表列)
{
    函数体
}

函数调用时,默认按值传递,但如果在函数定义中给参数指定 ref 修饰符,则对应的参数将按引用传递,这与 C/C++/PHP& 取地址运算符的使用是一致的

匿名函数:

(参数表列) { 函数体 }

单元测试

一个源文件中可定义任意多个单元测试,语法如下:

unittest {
    测试语句
}

单元测试之类的功能,很多语言都是作为外部库来实现的,但 D 把它集成到了语言核心之中,可以向编译器传递 -unittest 参数运行测试


类/接口


模板


输入输出

D语言 使用一族 writeln 取代 C 中传统的 printf 系列函数


常用内建方法


date : 2013-07-22、2013-07-23、2013-07-24、2013-08-14