2016-02-27 21 views
6

Das idiom pimpl (auch: compiler firewall) wird verwendet, um die Kompilierzeiten zu verkürzen, auf Kosten der Lesbarkeit und etwas Laufzeitleistung. Im Moment dauert ein Projekt zu lange, um zu kompilieren, wie Maßnahme die besten pimpl Kandidaten?Wie pimpl Kandidaten zu messen?

Ich habe meine Erfahrung mit Pimpl, ein Projekt seine Kompilierzeit von zwei Stunden auf zehn Minuten verkürzt, aber ich tat dies nur nach meinem Instinkt: Ich überlegte, dass Klasse Header-Dateien, die (1) eine Menge Quellcode enthalten (2) komplexe/Template-Klassen, sind die besten Kandidaten, um das Pickel-Idiom zu verwenden.

Gibt es ein Tool, das aufzeigt, welche Klassen objektiv gute Pimplkandidaten sind?

+1

OT: Ich war immer unter dem Eindruck, dass der Hauptgrund die PIMPL war zu verwenden, um die öffentliche Schnittstelle von den Details Implementierung un-aufblasen. Wie auch immer, große Frage – sjaustirni

+0

haben Sie versucht, mit vorkompilierten Headern zu sehen, was der Gewinn der Leistung zur Kompilierzeit war? – Christophe

+0

@Christophe: Ja, ich habe vorkompilierte Header verwendet. Siding meine ursprüngliche Frage wäre: "Wie vorkompilierte Header-Kandidaten zu messen?" – richelbilderbeek

Antwort

0

Dies ist wahr, dass Pimpl ist nützlich für die inkrementelle Kompilierung.

Der Hauptgrund für die Verwendung von Pimpl ist jedoch die Erhaltung der ABI-Kompatibilität. Dies war die Regel in meiner bisherigen Firma für fast alle öffentlichen Klassen in der API.

Ein weiterer Vorteil ist, dass Sie Ihre Bibliothek auch als Paket mit einem Header verteilen können, der keine Implementierungsdetails enthält.

Dafür werde ich sagen: Verwenden Sie Pimpl wo immer möglich.

Ein sehr guter Artikel der Qt Pimpl Implementierungsdetails und die Vorteile:

  • mit
  • Dividieren Ihrer großen Projekte in kleinen vorkompilierte Header: https://wiki.qt.io/D-Pointer

    Die Kompilierung Problem muss angegangen werden Einsen nach Code-Touch-Frequenz. Teile, die sich nicht häufig ändern, können in der Bibliothek kompiliert und im lokalen Repository veröffentlicht werden, so dass andere Projekte nach Version referenzieren.

  • ...
+0

Danke, dass Sie mich auf diese Punkte aufmerksam gemacht haben. Dennoch ist meine Frage, wie man misst, wo die Verwendung eines pimpl die meiste Kompilierungszeit erhöht. Am nächsten kommt dieser Vorschlag: "Teilen Sie Ihre großen Projekte in kleine durch Code-Häufigkeit". Meine Frage ist: "Wie messen Sie das?" – richelbilderbeek