Ich programmiere momentan in einem akademischen Umfeld, damit ich alles verwenden kann, was ich will. Ich verwende die Boost-Diagrammbibliothek für einige Dinge und frage mich, ob es sich lohnt, Anstrengungen zu unternehmen, um GP besser zu verstehen.
Ich bin neugierig - wird generische Programmierung (GP) in der Industrie häufig verwendet? Ich vermute, dass die meisten Programmierer mit OOP viel besser vertraut sind oder Sprachen verwenden, die GP nicht hervorheben oder unterstützen, so dass ich den Eindruck habe, dass GP außerhalb des Aufrufs von STL-Datenstrukturen / -Funktionen in C ++ nicht allzu häufig verwendet wird in der Praxis. Aber da wir im Moment außerhalb der Industrie sind, wäre es schön, von Praktizierenden darüber zu hören.
(Während ich dies schreibe, sehe ich, dass generische Programmierung nicht einmal ein gültiges Tag ist!)
Antworten:
Es hängt wirklich stark vom Kontext des Teams und des Projekts ab.
Beispielsweise ist in Videospielen der Code häufig der "einfachste" (und manchmal sogar zu einfache) Code, jedoch in großen Architekturen. Das liegt daran, dass Spieleentwickler viele Probleme zu beheben haben und sich nicht mit Meta-Programmierung beschäftigen möchten (dies ist eine separate, sehr abstrakte und schwer verständliche Sprache in C ++).
Gleichzeitig ist die grundlegende Verwendung von Vorlagen auch in diesen Shops üblich, und Sie können einige vorlagenbasierte Optimierungen in einigen sehr spezifischen Funktionen einiger Engines sehen.
Aber in Spielentwicklern vermeiden die meisten Leute einfach jede Metaprogrammierung.
Auf der anderen extremen Seite erfordern einige wirklich komplexe oder schwere Verarbeitungsanwendungen, die nicht üblich sind, eine schwere Metaprogrammierung, da die Anforderungen an Leistung und Flexibilität (zur Kompilierungszeit) nicht üblich sind. Ich arbeite gerade in einem.
Es ist nicht üblich, aber es existiert und einige Nischendomänen (in einigen wissenschaftlichen oder in Zahlen verknüpften eingebetteten Kontexten) erfordern Menschen, die viel über Metaprogrammierung wissen oder lernen wollen.
In der Mitte verwenden die meisten Leute nur Meta-Programmierung als "Client", nicht als "Designer". Die meisten Meta-Programmiercodes werden in Bibliotheken gebündelt, da Bibliotheken Tools für Code sind. Was ist besser als eine Bibliothek, die sich an die benutzerdefinierten Typen anpassen kann, mit denen Sie bisher gearbeitet haben?
Boost (http://boost.org) ist eine Reihe von Bibliotheken, von denen einige aus starker metaprogrammierender schwarzer Magie bestehen und in vielen C ++ - Shops als "STL ++" verwendet werden, eine Erweiterung der STL (und das ist es auch). Nicht jeder Shop verwendet es aus verschiedenen Gründen, z. B. aus Gründen der Compilerkompatibilität (einige Boost-Bibliotheken können Ihren Compiler jedes Mal um Verzeihung bitten, wenn er Ihr Gefühl verletzt hat ...) und häufiger, weil einige Entwickler es nicht mögen, nicht verstehen zu können wie ein Tool im Inneren funktioniert (versuchen Sie, Boost.Spirit zu verstehen ...)
Unabhängig von den Unternehmen, für die Sie arbeiten, werden einige dieses Paradigma verwenden, andere weniger oder gar nicht oder sogar verbieten.
Es gibt keinen Konsens, weil niemand die gleichen Bedürfnisse, den gleichen Kontext oder das gleiche Team hat.
Aber offensichtlich wird es immer noch verwendet. Vielleicht fragen Sie, wer Boost auf seiner Mailingliste verwendet, um mehr Beispiele aus der Praxis zu erhalten?
quelle
Generische Programmierung, akademisch als parametrischer Polymorphismus bezeichnet , wird in den Bereichen sehr häufig verwendet. In meinem Unternehmen verwenden wir es hauptsächlich, um typunabhängige Editoren für Daten aufzubauen, unabhängig von ihrer Art. Sie brauchen es einfach nicht so oft wie andere Funktionen, aber es ist definitiv eine Funktion, die ich nicht missen möchte. Sie verwenden es, wenn ein Verhalten für eine große Anzahl von Typen geeignet ist. Es ist ein klares Zeichen dafür, dass Sie Generika benötigen, wenn Sie denselben Code mehrmals für verschiedene Typen schreiben.
Zumindest aus meiner Erfahrung ist Ihr Standpunkt falsch. OOP und generische Programmierung schließen sich nicht gegenseitig aus. In der Tat sollten Sie die Synergieeffekte der Kombination nutzen. Wie ich bereits sagte, ist der Grund, warum Sie es nicht so häufig sehen wie andere Techniken, der, dass Sie es nicht so oft brauchen. Aber es ist eine starke Funktion, die Ihnen dabei hilft, Ihren Code trocken zu halten . Welche Sprachen betonen die Unterstützung von GP bei der Programmierung auf hoher Ebene nicht wirklich? 3 von 5 Sprachen der Tiobe Top 5 unterstützen Generika / Vorlagen. Und PHP wird dynamisch getippt, sodass es sie nicht wirklich benötigt. Na und?
quelle
C ++ - Vorlagen werden häufig für andere Dinge als Container verwendet - zumindest in meinem Problembereich (quantitative Finanzen). Ich würde sogar sagen, dass es manchmal zu oft verwendet wird, für Zwecke, bei denen einfache alte virtuelle Funktionen ausreichen würden (und die Kompilierungszeit nicht so sehr verlängern würden).
Die Benutzer verwenden es, um Codeduplikationen zu vermeiden und einen Polymorphismus zur Kompilierungszeit zu erzielen (ohne virtuellen Versand).
quelle