gpt4 book ai didi

compilation - 为什么D编译需要这么长时间?

转载 作者:行者123 更新时间:2023-12-03 18:29:04 25 4
gpt4 key购买 nike

D 是编译速度最快的编程语言之一,即使不是最快的,但情况并非总是如此。当 unittest 时,事情变得非常缓慢。已打开。我目前的项目有 6-7 个模块(~2000 LOC),每个模块都有包含基准的单元测试。以下是我当前项目中的一些数字:
dmd -O -noboundscheck需要0m1.287sdmd -O -release -noboundscheck需要0m1.382sdmd -O -inline -noboundscheck需要0m1.499sdmd -O -inline -release -noboundscheck需要0m3.477s
添加 -unittest以上任何一项都将大大增加编译时间:
dmd -O -inline -release -noboundscheck -unittest需要0m21.918s
有时它会使 DMD 崩溃:
time dmd -O t1.d -inline -noboundscheck -version=Double -unittest需要0m2.297sInternal error: ../ztc/gdag.c 776
显然,unittest 是有缺陷的,但同时它已经成为我项目的重要组成部分。我想知道减速是正常的还是正在处理的事情?我的项目正在增长,并且随着每个新的单元测试,编译需要的时间越来越长。我知道的唯一解决方案是禁用 -release-inline ,但这并不总是可取的。

最佳答案

DMD 有一个已知的优化问题:long blocks of code optimise with an O(n^2) algorithm ,所以长函数需要很长时间才能通过优化进行编译。

尝试将代码拆分为更小的函数,同时您应该获得更好的编译时间。您可以使用内联函数很容易地做到这一点:

void foo()
{
// lots of code
// more code
}

把它变成:
void foo()
{
void block1()
{
// lots of code
}
block1();

void block2()
{
// more code
}
block2();
}

这对我有用。

关于compilation - 为什么D编译需要这么长时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8635797/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com