【发布时间】:2011-12-26 12:30:53
【问题描述】:
D 是编译速度最快的编程语言之一,如果不是最快的话,但情况并非总是如此。当unittest 打开时,事情变得非常缓慢。我目前的项目有 6-7 个模块(~2000 LOC),每个模块都有包含基准的单元测试。以下是我当前项目中的一些数字:
dmd -O -noboundscheck 接受0m1.287s
dmd -O -release -noboundscheck 接受0m1.382s
dmd -O -inline -noboundscheck 接受0m1.499s
dmd -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.297s
Internal error: ../ztc/gdag.c 776
显然,unittest 是有缺陷的,但同时它已成为我项目的重要组成部分。我想知道减速是正常的还是正在处理的事情?我的项目正在增长,并且随着每个新的单元测试,编译需要的时间越来越长。我知道的唯一解决方案是禁用-release 和-inline,但这并不总是可取的。
【问题讨论】:
-
你的单元测试中有很多模板实例化吗?
-
@CyberShadow 是的,它主要是模板实例化,因为有很多通用编程。
-
这很可能是原因。尝试将代码的非通用部分移到模板之外。
-
@CyberShadow 没有非通用代码。
-
@Arlen,我认为他的意思是尝试通过只制作真正通用的部分来减少通用代码的数量,通用。通常,您可以通过从模板中提取出实际上不需要模板化的代码片段来缓解问题。即使您将此类代码分解为可以更频繁地重用的较小模板,它也会有所帮助。
标签: compilation d