d2.099

DMD2.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的早期采纳很重要.缺点是限制了窗口上的DMD32位.
最终,他不得不支持PE/COFF并要求微软链接器才能支持64位输出,同时,实现了32位的PE/COFF,但对不想安装微软构建工具(用于链接器)和SDK(用于Win32链接库)的人,他坚持DMD继续开箱即用.
最终,OPTLINK太旧了.随着D代码库增长,链接器错误越来越多.有要求默认启用PE/COFF.最后,有人提出了伴随LLVMLLD链接器及从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的重大更改.更改日志

posted @   zjh6  阅读(18)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示