D là một trong những ngôn ngữ lập trình nhanh nhất để biên dịch, nếu không phải là nhanh nhất, nhưng điều này không phải luôn luôn như vậy. Mọi thứ trở nên rất chậm khi unittest
được bật. Dự án hiện tại của tôi có 6-7 mô-đun (~ 2000 LOC), với mỗi một trong số chúng có unittests cũng chứa điểm chuẩn. Dưới đây là một vài con số từ dự án hiện tại của tôi:Tại sao quá trình biên soạn D mất quá lâu?
dmd -O -noboundscheck
mất 0m1.287s
dmd -O -release -noboundscheck
mất 0m1.382s
dmd -O -inline -noboundscheck
mất 0m1.499s
dmd -O -inline -release -noboundscheck
mất 0m3.477s
thêm -unittest
cho bất kỳ một trong những ý trên tăng đáng kể compi Hiện lation:
dmd -O -inline -release -noboundscheck -unittest
mất 0m21.918s
và đôi khi nó bị treo DMD:
time dmd -O t1.d -inline -noboundscheck -version=Double -unittest
mất 0m2.297s
Internal error: ../ztc/gdag.c 776
Evidentially, unittest là buggy nhưng đồng thời nó đã trở thành một phần quan trọng của dự án của tôi. Tôi muốn biết nếu sự chậm lại là bình thường hay nó là một cái gì đó đang được làm việc trên? Dự án của tôi đang phát triển và với mọi bản dịch mới nhất không được biên soạn sẽ mất nhiều thời gian hơn và lâu hơn. Giải pháp duy nhất tôi biết là tắt -release
và -inline
, nhưng điều đó không phải lúc nào cũng mong muốn.
Bạn có nhiều bản mẫu tức thì trong các bài kiểm tra đơn vị của mình không? –
@CyberShadow Vâng, nó chủ yếu là mẫu instantiations vì có rất nhiều chương trình chung chung. – Arlen
Đó là lý do rất có thể. Hãy thử di chuyển các phần không chung chung của mã của bạn bên ngoài các mẫu. –