डी सबसे तेज़ प्रोग्रामिंग भाषाओं में से एक है, जो सबसे तेज़ नहीं है, लेकिन यह हमेशा मामला नहीं है। unittest
चालू होने पर चीजें दर्द से धीमी हो जाती हैं। मेरी वर्तमान परियोजना में 6-7 मॉड्यूल (~ 2000 एलओसी) हैं, जिनमें से प्रत्येक में एकजुटता है जिसमें बेंचमार्क भी होते हैं।डी संकलन इतना लंबा क्यों लेता है?
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
लेता है और कभी कभी यह दुर्घटनाओं डीएमडी:
time dmd -O t1.d -inline -noboundscheck -version=Double -unittest
0m2.297s
Internal error: ../ztc/gdag.c 776
Evidentially लेता है, unittest गाड़ी है, लेकिन एक ही समय में यह का एक महत्वपूर्ण हिस्सा बन गया है मेरी परियोजना। मैं जानना चाहता हूं कि मंदी सामान्य है या क्या ऐसा कुछ है जिस पर काम किया जा रहा है? मेरी परियोजना बढ़ रही है और प्रत्येक नए अवांछित के साथ संकलन लंबे और लंबे समय तक ले रहा है। मुझे पता है कि एकमात्र समाधान -release
और -inline
अक्षम करना है, लेकिन यह हमेशा वांछनीय नहीं है।
auto foo(T)(T t) { return t; }
version(unittest) {
alias foo!int fooInt;
}
unittest {
auto x = fooInt(1);
}
इस रूपरेखा, मैं चारों ओर ~30msec
गति सुधार मिल अगर मैं में aliased टेम्पलेट उदाहरण का उपयोग करें:
क्या आपके पास अपने यूनिट परीक्षणों में कई टेम्पलेट तत्काल हैं? –
@ साइबरशैडो हां, यह ज्यादातर टेम्पलेट इंस्टॉलेशन है क्योंकि बहुत सामान्य प्रोग्रामिंग है। – Arlen
यह संभवतः कारण है। टेम्पलेट के बाहर अपने कोड के गैर-जेनेरिक भागों को स्थानांतरित करने का प्रयास करें। –