pimpl ja/nein

Programmiersprachen, APIs, Bibliotheken, Open Source Engines, Debugging, Quellcode Fehler und alles was mit praktischer Programmierung zu tun hat.
Antworten
Benutzeravatar
Jonathan
Establishment
Beiträge: 2394
Registriert: 04.08.2004, 20:06
Kontaktdaten:

pimpl ja/nein

Beitrag von Jonathan »

Ich bin neulich nochmal über das pimple-Idiom gestoßen, und finde, dass es sich eigentlich ganz gut anhört. Folgender Artikel schien auch einen recht guten Überblick zu verschaffen:
http://herbsutter.com/gotw/_100/

Meine Frage ist jetzt: Benutzt ihr es, ist es in der Praxis den zusätzlichen Aufwand wert, wie viele Probleme macht es und benutzt man es eher überall wo es geht (auch für interne Klassen) oder nur an manchen Stellen (Schnittstelle von einer Bibliothek, z.B.). Eben so ein bisschen Praxiserfahrung.
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
RazorX
Establishment
Beiträge: 156
Registriert: 23.12.2010, 14:13
Kontaktdaten:

Re: pimpl ja/nein

Beitrag von RazorX »

Also ich benutze dieses D-Pointer Pattern (alias pimpl) schon ganz gerne, da du so lästige Abhängigkeiten eleminieren kannst. Als Beispiel du schreibst eine GameEngine und der Anwender soll nicht zwangsläufig das DX SDK installieren müssen. Dann musst du alle Member die mit DirectX in Verbindung stehen auslagern eben in diese private Implementierung. Probleme hatte ich damit bis jetzt noch nicht, kann es nur empfehlen. (Vorallem werden die Klassen in IntelliSense schön abgespeckt)

MfG
Benutzeravatar
Krishty
Establishment
Beiträge: 8268
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: pimpl ja/nein

Beitrag von Krishty »

RazorX hat geschrieben:Als Beispiel du schreibst eine GameEngine und der Anwender soll nicht zwangsläufig das DX SDK installieren müssen.
Dann muss die Engine aber vorkompiliert ausgeliefert werden. Und wenn das passiert, kannst du dasselble durch eine abstrakte Schnittstelle realisieren.

Ich benutze Pimpl aus Trotz nicht – weil das was ist, was die Sprache machen sollte und nicht der Programmierer. Bloß, weil die Trennung zwischen öffentlicher Deklaration und privater Implementierung in C++ ein riesiger Haufen Dinoscheiße ist, werde ich nicht meine Programmstruktur um eine Indirektion pro Objekt verkomplizieren.

Es gab mal eine Zeit (lange lange her), in der ich die Implementierung getrennt habe, indem die Objektdeklaration nur ein unsigned char-Array von der Größe der tatsächlichen Implementierung gekriegt hat. Das war aber von Hand quasi unwartbar und zu debuggen eine Qual. Pimpl ist da die deutlich einfachere Alternative – zumindest für den Programmierer; nicht für den Compiler.

Ich mache mir übrigens schon lange keine Gedanken mehr darüber, Implementierungen geheimzuhalten. Meine Kompilierzeit liegt dank Bruch mit der C-Laufzeitbibliothek und allen APIs knapp über einer Sekunde; einfach alle abhängigen .cpps und .hpps ins Projekt zu schmeißen ist schneller als erst statische Bibliotheken aufzubauen; davon, meine genialen Algorithmen geheim zu halten, habe ich nichts. Außerdem ist die Hälfte meiner Objekte POD; da gibt es nicht viel zu verstecken.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
kimmi
Moderator
Beiträge: 1405
Registriert: 26.02.2009, 09:42
Echter Name: Kim Kulling
Wohnort: Luebeck
Kontaktdaten:

Re: pimpl ja/nein

Beitrag von kimmi »

Wir benutzen pimpl zur Optimierung der Buildzeiten eben durch die bereits erwähnte Eleminierung von Abhängigkeiten. Das liegt aber daran, dass ein Build hier gern einige Stunden dauert.

Gruß Kimmi
simbad
Establishment
Beiträge: 132
Registriert: 14.12.2011, 14:30

Re: pimpl ja/nein

Beitrag von simbad »

Ich musste erstmal schauen, was das ist und welchen tieferen Sinn das erfüllen soll.
Halte es da wie Krishty. Wenn was nach aussen verdeckt sein soll, wird ne interface klasse definiert und die Abhängigkeiten zu den manchmal ins gigantische wachsenden includes lasse ich eh vom Code-Generator erzeugen und sind mir daher eh wurscht.

Da ich vieles unter Linux erledige, sind mir die Compile-Zeiten auch recht wurscht, da ich dafür meinen 4x4 Server habe. Da kann man getrost 20 Compiler parallel starten. Unter Windows macht man im Zweifel halt ne Kaffee/Tee Pause.
Andre
Establishment
Beiträge: 186
Registriert: 21.12.2011, 20:33

Re: pimpl ja/nein

Beitrag von Andre »

Ich lass das mal einfach hier: http://xkcd.com/303/ :roll:
Benutzeravatar
kimmi
Moderator
Beiträge: 1405
Registriert: 26.02.2009, 09:42
Echter Name: Kim Kulling
Wohnort: Luebeck
Kontaktdaten:

Re: pimpl ja/nein

Beitrag von kimmi »

simbad hat geschrieben:Ich musste erstmal schauen, was das ist und welchen tieferen Sinn das erfüllen soll.
Da ich vieles unter Linux erledige, sind mir die Compile-Zeiten auch recht wurscht, da ich dafür meinen 4x4 Server habe. Da kann man getrost 20 Compiler parallel starten.
So etwas haben wir auch, trotz dessen braucht's einige Stunden :).

Gruß Kimmi
Antworten