Wege möglichst kurze Compile-Zeiten zu erreichen
-
Ich beschäftige mich immer noch nur zu Lernzwecken mit C++ und schreibe an einem kleinen GUI-Toolkit. Immer wenn ich mal etwas Zeit und Lust habe. *g
Dabei ist mir nun aufgefallen, dass ich des öfteren an den Basisklassen Änderungen vornehmen muss, weil ich dort noch Funktionalität einbauen muss. Ich habe dann bei jedem Compile-Vorgang Zeiten von ca. 14 Sekunden, was sich nicht unbedingt lang anhört, aber die Zeit entspricht auch fast einem kompletten Rebuild. Da habe ich mir gedacht, dass es da doch Wege geben muss, um die Zeit des partiellen Übersetzens zu verkürzen.
Ich habe folgende Vererbungshierarchie:
+- Object +- guiObject +- EventHandler +- Widget +- Window +- Control +- Label +- TextfieldHierbei ändere ich in Widget relativ häufig. Was zur Folge hat, dass Window, Control, Label, Textfield ebenfalls neu übersetzt werden müssen. Da ich noch lerne und längst nicht alles weiß habe ich Zweifel, ob die Hierarchie wirklich so gut gewählt ist, wobei mir das aber am sinnvollsten erscheint. Was ich mir nun überlegt habe ist, dass ich den EventHandler nicht als Basisklasse nehme, sondern als Member von Widget, somit würde schonmal eine Stufe wegfallen, aber die Zeitprobleme treten ja erst danach auf.
Da ich schon öfter gelesen habe, dass man die ein oder anderen Dinge tun kann, um die Compile-Zeiten zu optimieren würden mich da mal die Techniken als Übersicht interessieren. Links, etc. sind natürlich auch willkommen.

In den FAQs konnte ich leider nichts finden, aber evtl. wäre das ja auch für die FAQs interessant oder, falls es länger wird einen Artikel im Magazin?
-
Dein Fehler ist, daß du ziemlich weit unten in die Verarbungshierarchie eingereifen willst - normalerweise baut man erst die Basisklassen fertig, bevor man sich darum kümmert, sie zu spezialisieren.
(ich bin mir nicht sicher, was diese Struktur genau darstellen soll - aber eventuell könntest du Widget aus der Hierarchie herausnehmen (oder aufteilen in eine Interface-Klasse und eine Hilfsklasse, die vom Interface genutzt werden kann))
-
mantiz schrieb:
Dabei ist mir nun aufgefallen, dass ich des öfteren an den Basisklassen Änderungen vornehmen muss, weil ich dort noch Funktionalität einbauen muss.
Wenn sich an der nicht-privaten Schnittstelle nichts ändert, kannst du das pImpl-Idiom anwenden.
-
Naja, mein Problem dabei ist, dass ich in Widget alle Windows-spezifischen Funktionen reinhaue und diese dann in den anderen Klassen dann verwende. Damit ich nur eine Klasse habe, die ich bei einer evtl. Portierung auf Linux oder so ändern muss. In Wirklichkeit sind's ein paar mehr, aber bei den genannten nur Widget.
Und ich baue die Klasse nach und nach auf, also immer das, was ich dann gerade in einer anderen Klasse benötige. Das pImpl-Idiom kommt nicht in Frage, da sich ebenfalls public und protected Dinge ändern.
Naja, dann werd' ich wohl mit leben müssen. Bisher geht's ja noch.

Evtl. überdenke ich auch nochmal meine Struktur. Aber wenn noch jmd. weitere Tipps hat, immer her damit.

Vielen Dank auf jeden Fall schonmal.