static this() 和static ~this()
,模块构造和析构函数,每线程一次,总程序一次的,可用shared static this() 和 shared static ~this()
一堆模块叫一个包.
import std.stdio;
选择导入:import std.stdio :writeln;
,减少名称冲突
本地导入,可以最小化外部依赖
import carnivore = animal.jaguar;
import vehicle = car.jaguar;
重命名,避免冲突.
// The contents of the file animal/package.d:
module animal;
public import animal.cat;
public import animal.dog;
public import animal.horse;
一个:package.d
:可导入多个子包.如上书写.
公开导入
则始终可用
deprecated("过时了.")
void do_something() {
// ...
}
编译器开关:
-d,表允许使用过时开关
-dw,使用时发出警告.
-de,使用时则报错误
可以用
deprecated("Please use doSomething() instead.")
alias do_something = doSomething;
来继续使用旧名字,但实际用的新函数.
dmd deneme.d animal/cat.d animal/dog.d -w -de
还要加上其他文件,才能编译.
生成库命令:
dmd animal/cat.d animal/dog.d -lib -ofanimal -w -de
,关键在-lib
,-of
表输出名字.
这样dmd deneme.d animal.lib -w -de
就可以了.因为库中有链接.
module deneme;
import std.stdio;
import core.demangle;
void foo() {
}
void main() {
writeln(mangle!(typeof(foo))("deneme.foo"));
}//_D6deneme3fooFZv,
可用来取混杂名
.以方便链接外部库啊,c++库啊
.
外部链接类型有C, C++, D, Objective-C, Pascal, System, 和 Windows.
需要链接c库时
extern(C) void foo();//c样式的链接
void main() {
foo(); // 将编译为调用'_foo'
}
c类型都是前面加个下划线
.调用c++如下:
extern(C++, a.b.c) void bar();
void main() {
bar(); // a call to a::b::c::bar()
a.b.c.bar(); //类似上面
}
D库绑定
extern
还有一个意思:该变量是外部存储的.类似c/c++.
d编译器不用保留空间.
extern(C) extern int g_variable;
表明,本变量已在外部的c库定义.不用自己搞一个.
如果这样extern(C) int g_variable;
表明用c链接的一个d变量.
即外
有两个含义:1是链接方式,2是在外部存储.