我为何喜欢d
原文
我受够了C++
了.
新语言的要求是:编译,强类型,易于学习和使用
,与现有
C系和操作系统
兼容.
go
无泛型.rust
太丑.D
主要是GC(垃集)
,但可编程
禁用垃集.通过实践,喜欢D
原因:
betterC
D
没有C++
后向兼容的包袱.同时与他们二进制
兼容且语法类似.
可在一天内学会D
,这里.没有预处理器
,有每一/模块/闭包/动态,关联数组
.
D
努力二进制兼容C/C++
.很易交互遗留库
,现在甚至还有导入C
.
一致性
标准库
功能丰富.既提供了容器,日期处理,数学函数
等基本功能,也提供了并发,正则式和密码学
等更高级功能.还有SQLite和Curl
等常用库接口.
标准库,广泛利用区间/模板
.无多继承
,但可多接口
.模板元
与运行时
代码语法一样.
内置动态和关联数组
比使用它们和外部库更简洁,提高生产力,而不必导入
外部库或构建自己库.
// 动态数组
auto array = new int[10];
// 后半切片
auto half = array[4..$].dup;
// 每一递增
half[] += 1;
// 连接两个
auto concat = array ~ half;
// 造关联数组
int[string] dict = [ "Hello": 10, "World": 23 ];
// 如存在,则执行代码
if (int* value = "Hello" in dict) {
// 用值干活.
}
// 按元素比较
assert(dict == dict);
模板元
很强大,很直观.
// 模板参数在普通参数前面
auto add(T)(T lhs, T rhs) {
return lhs + rhs;
}
int a = 5; int b = 10;
// 推导T为整
auto result1 = add(a, b);
// 强制为浮
auto result2 = add!float(a, b);
float c = 5.0;
// 推导T为浮
auto result3 = add(a, c);
更好的是,编译器编译时可安全求值D代码
子集,来允许检查复杂条件.
如下:
T[] find(T, E)(T[] haystack, E needle)
// T与E可比较.
if (is(typeof(haystack[0] != needle) == bool))
{
// 实际找代码.
}
下例展示,可变参数:
// 可变模板参数
void write(T...)(T args) {
// 编译时展开!
foreach (arg; args) {
// to()是标准库中的方便转换类型的工具
auto stringArg = to!string(arg);
stdout.rawWrite(stringArg);
}
}
write("There are ", 3, " cows");
编译时生成代码
插件
,最强大的功能了.
// 返回"int[name] = [0, 1, ..., count - 1]";
string createArray(string name, int count) {
string result = "int[" ~ to!string(count) ~ "] ";
result ~= name ~ " = [ ";
foreach (n; 0 .. count) {
result ~= to!string(n);
result ~= ", ";
}
result ~= "];";
return result;
}
// 神奇发生.
mixin(createArray("myArray", 5));
assert(myArray[0] == 0);
assert(myArray[4] == 4);
有时,创建原始串,还是过头了,还可用模板插件
创建注入代码
,非常方便!
mixin template Foo()
{
void func() { writeln("Foo.func()"); }
}
class Bar
{
mixin Foo;
}
void test()
{
Bar b = new Bar();
b.func(); // 调用Foo.func()
}
如果需要为自定义用例
生成超级优化代码
,也可以,如这里的编译时正则
.可生成优化的本机机器码来匹配正则式
.
垃集
当不考虑内存
时,可利用好垃集
.你不必管理内存,无需担心泄露.编写性能
至关重要的软件时,记住关闭垃集
.性能重要时,你可能已经编写了具有高度优化算法和数据结构
的实用程序库
.
黑客
编写shellcode
,汇编语言,可执行打包,混淆,进程黑客
.
// 等价于"\xAB\xCD\x01\x23\x45"
auto s = x"ABCD012345";
//包括二进制块
// 内联"resource.bin"
auto x = import("resource.bin");
//这也是非常强大的功能.
成熟的开发者工具
D
,花了很多年才获得坚实的生产力工具
生态系统,也是未被更广泛地采用的主要原因
.
3个主要编译器:dmd/gdc/ldc
,主要ide
的自动补全
.
dub
作为包管理器.
总之,学习D是值得
的.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现