不如D:3)从输出hello说起

此篇开始不如D系列正式开始D语言的一系列教程。本系列非系统性教程,对于一些基本概念和约定很多都不会介绍,而且地方会与其他语言对比。笔者设想的思路是从例子入手,面向有编程基础的人士,一篇处理一个例子,在解释例子的同时,引入D语言的一些特性介绍和使用教程。这就注定不会有完全整体的教程顺序和很详细的基础介绍。如果想完整的学习D语言,可以先把《D语言程序设计》(百度网盘下载) 这本书过一下(注:D语言发展很快,书中有的细节在最新编译器下已经有不适用的地方了。此书也比较基础,D的高级用法很多都未提及)。由于笔者没有经验和角度已经不完全新手新手,可能行文的顺序和侧重点比较乱。有不足之处还请评论指出。

Hello World

说到编程语言,开篇地一个教程例子,非hello world莫属。我们也就先学习和分析D中的hello world。

import std.stdio;

int main() 
{
    writeln("Hello world!"); // 输出 Hello world 到控制台
    return 0;
}

D 语言是基于模块的,所以第一句是先引入标准输入输出的模块。在书中的第11章,273页。官方文档链接:点我,点我
D语言是根据文件区分模块的。 对于模块的引用使用:import 关键字。默认是引入模块中所有有访问权限的模块,当然你也可以只引入个别符号,例如:

import std.stdio : writeln; // 只引入writeln 函数,

hello world 这个程序太简单了,我们就先了解下模块的概念。本文也就先写这么多吧。剩下我们根据特性,一个例子一个例子的去说明吧。
另外,中文版的D tour启动了翻译,希望有兴趣的可以去贡献: https://github.com/ExpertD/D-tour-Chinese
国内翻译群也在陆陆续续的翻译另外一本D的书,也欢迎贡献: https://github.com/DlangRen/Programming-in-D

不如D:2)官网主页例子解析

这篇,我们先从进入官网的例子开始见识下D的强大。

此篇不是入门介绍,没有D基础,不要深究里面的实现细节,当开阔眼界即可。

进入D官网,就有一个例子,那个例子加上注释也就17行代码, 真正main函数里就一句代码,但是却完成了:从控制台按行读取,然后正则提取可能是浮点数的数,把其替换为四舍五入后的整数,然后在输出。 继续阅读“不如D:2)官网主页例子解析”

不如D:1)开篇说明

想写个D的系列介绍和用法的想法有很长时间了,但是由于个人比较懒惰,而且写作不及格,一直迟迟没有动手。今天在知乎上又看到rust和kotlin的专栏了,就决定必须动手了。

这两年用D语言,也算入门了,应该不会出现误人子弟的错误,自己写作向来没有条理,也希望能组织出来条理, 继续阅读“不如D:1)开篇说明”

垃圾回收介绍与D语言内存管理

此文是个ppt的分享,主要内容是:

  • GC 算法的基本介绍
  • D语言的GC的介绍
  • D语言内存管理的方法
  • 混合管理字节的经验

相信见ppt:

GC和D语言垃圾回收

PPT 内容顺序:

一、 GC 相关概念与基本算法

先介绍三种基本GC算法: 继续阅读“垃圾回收介绍与D语言内存管理”

D语言中的值类型,引用类型和函数传递方式

D语言和C#,java类似,是一门区分值类型和引用类型的语言。

概念和区分:

(注:没有找到权威的定义,维基百科没有,只有勉强链接到百度百科了)

  • 值类型:百度百科 , 说下个人理解:默认在栈中分配的,传递时默认(自定义赋值函数可以做其他实现)是占用的内存的copy的。
  • 引用类型:百度百科 ,说下个人理解:默认在堆中分配,使用的时候都是其引用,也就是其指针。所谓的赋值也就是引用(指针)更新。

继续阅读“D语言中的值类型,引用类型和函数传递方式”

D语言内存管理杂谈

D是一个系统级语言,但是也是一个GC语言(虽然现在GC在可选化,但是有的语言特性是基于GC的,例如:关联数组,数组连接等等)。D是GC语言,但不是全GC语言,D同时也提供了简单的手动管理内存的方式。所以下面我就分为GC,NoGC的方式来说。

继续阅读“D语言内存管理杂谈”