2016-02-27 28 views
6

Idiom pimpl (także: firewall kompilatora) służy do skracania czasu kompilacji, kosztem czytelności i niewielkiej wydajności środowiska wykonawczego. W chwili obecnej projekt trwa długo, aby skompilować, jak mierzyć najlepszych kandydatów na pimpl?Jak mierzyć kandydatów na pimpl?

Mam doświadczenie w używaniu pimpl, skracając czas kompilacji projektu z dwóch godzin na dziesięć minut, ale zrobiłem to po prostu podążając za moimi instynktami: Rozważyłem, że pliki nagłówkowe klasy zawierają (1) dużo kodu źródłowego (2) klasy złożone/szablonowe, są najlepszymi kandydatami do posługiwania się kryminałem.

Czy istnieje narzędzie wskazujące, które klasy są obiektywnie dobrymi kandydatami na pimpl?

+1

OT: Zawsze byłem pod wrażeniem, że głównym powodem korzystania z PIMPL miał un-uwędzić interfejsu publicznego od szczegółów implementacji. W każdym razie, wielkie pytanie – sjaustirni

+0

czy próbowałeś użyć prekompilowanych nagłówków, aby zobaczyć, jaki był zysk wydajności podczas kompilacji? – Christophe

+0

@ Christophe: tak, użyłem prekompilowanych nagłówków. Siding moje oryginalne pytanie brzmiałoby: "Jak zmierzyć wstępnie skompilowane nagłówki?" – richelbilderbeek

Odpowiedz

0

To prawda, że ​​Pimpl jest przydatny do kompilacji przyrostowej.

Jednak głównym powodem używania Pimpl jest zachowanie kompatybilności ABI. Taka była zasada w mojej poprzedniej firmie dla niemal wszystkich klas publicznych w API.

Inną zaletą jest to, że możesz również dystrybuować swoją bibliotekę jako pakiet zawierający nagłówek, który nie ujawnia szczegółów implementacji.

W tym celu powiem: używaj Pimpl, jeśli to możliwe.

Bardzo dobry artykuł o szczegółach implementacji Qt Pimpl i korzyści: https://wiki.qt.io/D-Pointer

Problem czas kompilacji musi być skierowana w:

  • użyciu prekompilowanego nagłówek
  • podzielenie dużych projektów na małe z częstotliwością dotykową kodu. Części, które nie ulegają częstym zmianom, mogą być kompilowane w bibliotece i publikowane w lokalnym repozytorium, w którym inne projekty odwołują się do wersji.
  • ...
+0

Dzięki Saad za oświecenie mnie tymi punktami. Moje pytanie brzmi: jak zmierzyć, gdzie użycie pimpl da największy wzrost w czasie kompilacji. Najbliżej tej odpowiedzi jest Twoja sugestia "dzielenia dużych projektów na małe za pomocą częstotliwości". Moje pytanie brzmi: "Jak to mierzyć?" – richelbilderbeek