D语言是一种通用的系统和应用编程语言,它保持了生成高效代码以及直接访问操作系统API和硬件的能力。《D程序设计语言》是一本介绍D语言的权威书籍,全面、系统、专业地讲解了D语言相关的内容。书中涵盖了D语言的方方面面,不但介绍了语言的表达式、语句、类型、函数、契约、模块、类和结构等基本内容,还通过常见示例,深入解释了所有语言特性,讲解了如何将语言特性进行组合以支持重要的编程范型,阐述了每一项主要特性的基本原理,对它们的最佳用途给出了建议,并对跨领域的问题(如错误处理、契约编程和并发性)进行了讨论。此外,书中还通过大量的图表,为使用D语言解决日常问题提供了快速参考。其细致入微的讲解让人几乎觉得有些“啰嗦”,但正是这些“啰嗦”内容更能加深人们对D语言程序设计的理解,进而拓展到对一般意义上的编程语言程序设计的理解。
《D程序设计语言》不仅适合于D语言初学者,对于想学习编译器实现的研究人员、想拓展学生的编程语言知识面的教师以及想深入了解编程语言设计的人,也能提供很好的帮助和指导。
第1章 进入D世界 1
1.1 数字与表达式 2
1.2 语句 4
1.3 函数基础 5
1.4 数组与关联数组 6
1.4.1 构建词汇表 6
1.4.2 数组分割、泛型函数、单元测试 8
1.4.3 频率统计、λ函数 9
1.5 基本数据结构 11
1.6 接口和类 15
1.7 值与引用 19
1.8 小结 20
第2章 基本类型、表达式 21
2.1 符号 22
2.2 字面量 23
2.2.1 布尔字面量 23
2.2.2 整数字面量 23
2.2.3 浮点数字面量 24
2.2.4 字符字面量 26
2.2.5 字符串字面量 26
2.2.6 数组与关联数组字面量 29
2.2.7 函数字面量 30
2.3 操作符 31
2.3.1 左值和右值 31
2.3.2 隐式数值转换 31
2.3.3 数值操作符的类型 34
2.3.4 基本表达式 34
2.3.5 后缀表达式 37
2.3.6 一元表达式 38
2.3.7 幂表达式 41
2.3.8 乘法表达式 41
2.3.9 加法表达式 41
2.3.10 移位表达式 41
2.3.11 in表达式 42
2.3.12 比较操作符 43
2.3.13 按位操作符 44
2.3.14 逻辑与 45
2.3.15 逻辑或 45
2.3.16 条件操作符 45
2.3.17 赋值表达式 46
2.3.18 逗号表达式 46
2.4 小结和快速参考 46
第3章 语句 49
3.1 表达式语句 49
3.2 复合语句 50
3.3 if语句 50
3.4 static if语句 51
3.5 switch语句 53
3.6 final switch语句 54
3.7 循环语句 55
3.7.1 while语句 55
3.7.2 do-while语句 55
3.7.3 for语句 55
3.7.4 foreach语句 56
3.7.5 数组foreach 57
3.7.6 continue语句和break语句 58
3.8 goto语句 59
3.9 with语句 60
3.10 return语句 61
3.11 throw语句和try语句 61
3.12 mixin语句 62
3.13 scope语句 63
3.14 synchronized语句 66
3.15 asm语句 67
3.16 小结和快速参考 67
第4章 数组、关联数组和字符串 70
4.1 动态数组 70
4.1.1 长度 71
4.1.2 边界检查 72
4.1.3 分割 73
4.1.4 复制 73
4.1.5 相等性比较 74
4.1.6 拼接 75
4.1.7 数组表达式 75
4.1.8 收缩 76
4.1.9 扩张 77
4.1.10 对.length赋值 79
4.2 固定大小的数组 80
4.2.1 长度 81
4.2.2 边界检查 81
4.2.3 分割 81
4.2.4 复制和隐式转换 82
4.2.5 相等性比较 82
4.2.6 拼接 83
4.2.7 数组运算 83
4.3 多维数组 83
4.4 关联数组 85
4.4.1 长度 85
4.4.2 读写槽 86
4.4.3 复制 86
4.4.4 相等性比较 86
4.4.5 移除元素 87
4.4.6 迭代 87
4.4.7 将自定义类型作为键 88
4.5 字符串 88
4.5.1 代码点 88
4.5.2 编码 89
4.5.3 字符类型 90
4.5.4 字符数组 + 优势 = 字符串 91
4.6 数组的远房表亲:指针 93
4.7 小结和快速参考 95
第5章 数据与函数、函数式 98
5.1 编写一个简单函数并进行单元测试 98
5.2 传递约定和存储类别 100
5.2.1 ref参数与返回 101
5.2.2 in参数 102
5.2.3 out参数 102
5.2.4 static数据 103
5.3 类型参数 103
5.4 签名约束 105
5.5 重载 106
5.5.1 偏序函数 108
5.5.2 跨模块重载 110
5.6 高阶函数、函数字面量 111
5.7 嵌套函数 113
5.8 闭包 114
5.9 超越数组、范围、伪成员 116
5.9.1 伪成员和@property属性 117
5.9.2 reduce——不只是证法 119
5.10 可变参数函数 120
5.10.1 同构可变参数函数 120
5.10.2 异构可变参数函数 121
5.11 函数属性 124
5.11.1 纯函数 124
5.11.2 函数属性nothrow 127
5.12 编译时计算 127
第6章 类、面向对象风格 132
6.1 类 132
6.2 对象名就是引用 133
6.3 对象的生命周期 136
6.3.1 构造函数 137
6.3.2 转发构造函数 138
6.3.3 构造步骤 139
6.3.4 析构与解除分配 140
6.3.5 拆毁步骤 141
6.3.6 静态的构造函数与析构函数 142
6.4 方法和继承 143
6.4.1 术语大杂烩 144
6.4.2 继承就是子类型化,静态类型和动态类型 145
6.4.3 改写只能是自愿的 146
6.4.4 调用被改写的方法 147
6.4.5 协变返回类型 148
6.5 静态成员的类级封装 149
6.6 使用final方法来限制扩展性 149
6.7 封装 151
6.7.1 private 152
6.7.2 package 152
6.7.3 protected 152
6.7.4 public 152
6.7.5 export 153
6.7.6 封装到什么程度 153
6.8 一统天下的根类 155
6.8.1 string toString() 156
6.8.2 size_t toHash() 156
6.8.3 bool opEquals(Object rhs) 156
6.8.4 int opC mp(Object rhs) 159
6.8.5 static Object factory(string className) 160
6.9 接口 161
6.9.1 非虚接口(NVI)惯用法 162
6.9.2 protected原语 164
6.9.3 选择性实现 165
6.10 抽象类 166
6.11 嵌套类 168
6.11.1 函数嵌套类 170
6.11.2 静态嵌套类 171
6.11.3 匿名类 172
6.12 多重继承 172
6.13 多重子类型化 175
6.14 参数化的类和接口 177
6.15 小结 180
第7章 其他自定义类型 181
7.1 结构 182
7.1.1 复制语义 183
7.1.2 将结构对象传递给函数 184
7.1.3 结构对象的生命周期 184
7.1.4 静态构造函数和析构函数 192
7.1.5 方法 193
7.1.6 静态成员 197
7.1.7 访问指示符 197
7.1.8 嵌套结构和类 198
7.1.9 在函数内部嵌套结构 199
7.1.10 结构子类型化与@disable属性 199
7.1.11 字段布局与对齐 202
7.2 联合 204
7.3 枚举值 206
7.3.1 枚举类型 208
7.3.2 枚举特性 208
7.4 别名 209
7.5 使用模板实现参数化作用域 211
7.6 使用mixin模板注入代码 214
7.7 小结与参考 216
第8章 类型修饰符 217
8.1 immutable修饰符 218
8.2 immutable的书写 220
8.3 immutable参数和方法 221
8.4 immutable构造函数 222
8.5 immutable相关的转换 223
8.6 const修饰符 225
8.7 const与immutable进行交互 226
8.8 将修饰符从参数传送至结果 226
8.9 小结 227
第9章 错误处理 229
9.1 抛出与捕捉 229
9.2 类型 230
9.3 finally子句 232
9.4 nothrow函数和Throwable的特殊本质 233
9.5 附属异常 234
9.6 栈展开与异常安全代码 235
9.7 未捕捉的异常 237
第10章 契约编程 238
10.1 契约 239
10.2 断言 240
10.3 前置条件 241
10.4 后置条件 243
10.5 不变量 244
10.6 跳过契约检查与发行版本 246
10.6.1 enforce不(完全)是assert 247
10.6.2 assert(false) 248
10.7 契约:请不要用于洗涤输入 248
10.8 契约与继承 250
10.8.1 继承与in契约 250
10.8.2 继承与out契约 252
10.8.3 继承与invariant契约 253
10.9 接口里的契约 253
第11章 扩展性 255
11.1 包和模块 255
11.1.1 import声明 256
11.1.2 模块搜索根目录 257
11.1.3 名字查找 258
11.1.4 public import声明 260
11.1.5 static import声明 261
11.1.6 选择性导入 262
11.1.7 在导入里重新命名 262
11.1.8 module声明 264
11.1.9 模块摘要 264
11.2 安全性 267
11.2.1 定义行为和未定义行为 267
11.2.2 @safe、@trusted和@system属性 268
11.3 模块的构造函数与析构函数 269
11.3.1 模块内的执行顺序 270
11.3.2 跨模块的执行顺序 270
11.4 文档注释 271
11.5 与C和C++进行交互 271
11.6 deprecated声明 272
11.7 version声明 272
11.8 debug声明 273
11.9 D语言标准库 273
第12章 操作符重载 275
12.1 重载操作符 276
12.2 重载一元操作符 276
12.2.1 使用mixin加强操作符定义 277
12.2.2 后增值与后减值 278
12.2.3 重载cast操作符 278
12.2.4 三元操作符重载测试和if测试 279
12.3 重载二元操作符 280
12.3.1 操作符重载的平方 281
12.3.2 交换律 281
12.4 重载比较操作符 282
12.5 重载赋值操作符 283
12.6 重载索引操作符 284
12.7 重载分割操作符 285
12.8 $操作符 286
12.9 重载foreach 286
12.9.1 带有迭代原语的foreach 286
12.9.2 带有内部迭代的foreach 287
12.10 在类里定义重载操作符 289
12.11 完全不一样的重载:opDispatch 290
12.12 小结与快速参考 292
第13章 并发性 294
13.1 并发门 295
13.2 数据共享简史 296
13.3 快瞧瞧,没有(默认)共享 299
13.4 启动线程 300
13.5 线程间的信息交换 302
13.6 receive的模式匹配 303
13.6.1 首次匹配 305
13.6.2 匹配所有消息 305
13.7 文件复制——稍有改变 305
13.8 线程终止 307
13.9 带外通信 308
13.10 邮箱堵塞 309
13.11 shared类型修饰符 310
13.12 shared数据操作及其效果 312
13.13 使用synchronized类实现基于锁的同步 313
13.14 synchronized类里的字段类型化 316
13.14.1 临时保护==无脱离 317
13.14.2 局部保护==尾部共享 317
13.14.3 强制同质的互斥量 319
13.14.4 不可思议:shared可被强制转换掉 320
13.15 死锁与synchronized语句 320
13.16 使用shared类进行无锁编码 321
13.16.1 shared类 322
13.16.2 几种无锁结构 323
13.17 小结 325
参考文献 327
作者简介:中嶋谦互从小学开始学习游戏编程,进入大学后正式参与游戏开发。1996年开发了世界上第一款使用JavaApplet的MMORPG,19
Weliveinanewageforstatisticalinference,wheremodernscientifictechnologysuchasmicr...
《在苍茫中点灯(珍藏版)》内容简介:继《掬水月在手》之后,《在苍茫中点灯》是陈春花老师的第二本散文集。散文中穿插着各种管理
《造型原本》是作者中央美术学院教授吕胜中以广受学生欢迎的“造型原本”课的讲稿为基础,结合大量作品实例,带读者发现各种风格
《雷卡纳蒂语言哲学思想研究》内容简介:“当代西方语言哲学翻译与研究”拟包括2016年国家社科基金项目成果:四部译著和一本专著,
HTML5实战 本书特色 作为web开发领域里发展*快的技术之一,html5凭借其动态特性及跨平台特性日益成为程序设计领域备受推崇的语言。作为一门新兴语言,ht...
《说服力·工作型PPT该这样做(第3版)》内容简介:工作型PPT,唯“快”不破!作为日常工作中的PPT,不能为了追求完美设计而无限度
《Excel财务数据处理与分析自动化案例视频精讲》内容简介:财务人员每天都在处理各种各样的表格,计算各种各样的数据,然而,有些财
联邦学习 本书特色 如何在保证本地训练数据不公开的前提下,实现多个数据拥有者协同训练一个共享的机器学习模型?传统的机器学习方法需要将所有的数据集中到一个地方(例...
《数据挖掘(第2版)》较全面系统地介绍了数据挖掘中常用和常见的数据挖掘方法,以及文本与视频数据挖掘方法。《数据挖掘(第2版)》
Stata统计分析与应用-赢在职场-第2版-(附光盘) 本书特色 本书主要讲解数据的基本处理、图形的绘制、统计分析、回归与建模分析、编程等方面的内容,讲解力求细...
CAD/CAM/CAE自学视频教程:AutoCAD 2014电气设计自学视频教程(附光盘) 本书特色 autocad专家通过教学视频、疑难技巧汇总、典型习题、全...
《蔡澜说美食:学会浅尝二字》内容简介:蔡澜先生说: 吃不饱的菜,最妙。豆那么细小,一颗颗吃,爱惜每一粒的滋味,也爱惜了人生中
《德育鉴》内容简介:清华国学院导师梁启超为时人和后人所编的修身读本,帮助读者以凝聚的篇幅集中领略历代先哲的亲口传授。浙江大
本书是为高等院校电子信息类专业编写,凝结了北京邮电大学电信工程学院电路与系统中心各位老师多年的教学经验。本书主要内容包括
CorelDRAW服装结构设计实用教程-(附光盘) 本书特色 本书简单介绍了corelDRAW 11的基本功能,与服装设计制图相关的工具与功能;介绍了服装原型的...
《搜索模式》内容简介:本书是信息架构领域创始人彼得·莫维里的又一力作,全书详尽剖析了10种搜索模式,告诉读者如何为不同情境设
来吧!带你玩转Excel VBA(含CD光盘1张)(双色) 本书特色 全面:从录制宏开始带你步入vba殿堂详细:每个案例都详述思路与步骤贴心:提供售后服务论坛与...
5所世界著名设计学府:哈佛大学、哥伦比亚大学、库珀联盟、麻省理工学院、宾夕法尼亚大学,5个精彩纷呈的故事。学习设计到底是追
《Go语言学习指南:惯例模式与编程实践》内容简介:本书Go语言正在迅速成为构建Web服务的优选语言。本书很好地阐述了Go语言的特性,