d2.099
DMD
的2.099.0
版本于3月6日
发布.这是大型版本,包含100
个贡献者的20
个主要更改
和221
个已关闭的Bugzilla
问题.此版本一些亮点:D
模块可通过ImportC
导入C代码
;D
现在有throw
表达式;现在窗口
上DMD
中的默认为PE/COFF
输出.完整更改日志.
使用ImportC
在导入C源码模块
ImportC
是D的有益补充.一旦解决了所有问题
并实现了处理C预处理
指令,避免了大部分绑定到C库
的需求,可引入C头
文件,无需外部工具,直接编译C源文件
到D程序
中.
从D2.099.0
开始,还可用__import
关键字直接导入D模块
至C文件
.
// dsayhello.d
import core.stdc.stdio : puts;
extern(C) void helloImport() {
puts("你好 __import!");
}
// dhelloimport.c
//c文件.
__import dsayhello;
__import core.stdc.stdio : puts;
int main(int argc, char** argv) {
helloImport();
puts("酷不酷");
return 0;
}
这样编译:
dmd dhelloimport.c dsayhello.d
还可用它来导入通过ImportC
编译的C模块
:
// csayhello.c
__import core.stdc.stdio : puts;
void helloImport() {
puts("你好 __import!");
}
// chelloimport.c
__import csayhello;
__import core.stdc.stdio : puts;
int main(int argc, char** argv) {
helloImport();
puts("酷不酷?");
return 0;
}
编译:
dmd chelloimport.c csayhello.c
实现了throw
表达式
以前,D中,throw
一直是个语句
.它不能在表达式
中使用,因为表达式
必须有类型
,并且由于throw
不返回值,所以无合适类型.这阻止了与以下语法一起使用:
(string err) => throw new Exception(err);
而要求这样:
(string err) { throw new Exception(err); }
DIP1034
引入了底层类型
,提供了启用throw
表达式方法:"throw
语句按底层类型表达式
返回时.从D2.099.0
开始,以下代码可编译:
void foo(int function() f) {}
void main() {
foo(() => throw new Exception());
}
PE/COFF
是窗口
上的默认DMD
输出
多年来,DMD
在窗口
上以OMF
格式输出目标.主要原因概括为两个要点:
d作者
已拥有生成OMF
输出的C编译器后端
,为Win32API
分发OMF
链接库的许可证
,及理解OMF
的(OPTLINK
)链接器.
当他1999
年开始研究D时,窗口
上没有系统
链接器,因此不能依赖安装
的特定
链接器.
重用
编译器后端和链接器
允许Walter
按编译器开箱即用
发布DMD
.这对D的早期采纳
很重要.缺点是限制了窗口
上的DMD
为32
位.
最终,他不得不支持PE/COFF
并要求微软
链接器才能支持64
位输出,同时,实现了32
位的PE/COFF
,但对不想安装微软构建工具
(用于链接器
)和SDK
(用于Win32
链接库)的人,他坚持DMD
继续开箱即用
.
最终,OPTLINK
太旧了.随着D代码库
增长,链接器
错误越来越多.有要求默认启用PE/COFF
.最后,有人提出了伴随LLVM
的LLD
链接器及从MinGW
项目生成的链接库
的想法.允许DMD
最终默认为PE/COFF
,并同时保持开箱即用
.现在PE/COFF
是窗口
上的默认DMD
输出.
即已弃用-m32mscoff
开关,-m32
现在指定PE/COFF
,如果需要,新开关-m32omf
可用于产生OMF
输出(但最终会删除OMF
).-m64
开关一直产生PE/COFF
输出,所以不变.
ldc
3月10
日发布LDC1.29.01
的测试版.此版本基于LLVM
的D编译器基于D2.099.0+
前端.它包括支持LLVM13
,不再默认用ld.gold
(lld),并包括对extern(D)ABI
的重大更改.更改日志
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现