Arbeitet ihr schon mit den C++ 20 Modulen?



  • Arbeitet ihr schon mit den C++ 20 Modulen oder noch mit Source Header Trennung? Wenn ja, wie macht sich das in VisualStudio2019, gibt es da Probleme?



  • Nur erste Experimente für privaten Code. Läuft, wenn auch nicht undbedingt alles auf Anhieb direkt rund. Modul-Support muss via Compiler-Flag aktiviert werden (-std:c++latest -experimental:module) und wichtig, dass man die Modul-Variante der Standardbibliothek nachinstalliert, wenn man import std.core; machen will. Ich glaube das Paket heisst Module für v142-Buildtools im VS Installer.

    Es empfiehlt sich, eigene Projekte mit Modulen nach den Konventionen zu strukturieren, die MS auch in ihren Blogeinträgen und Beispielen verwendet. So hatte ich z.B. ziemliche Schwierigkeiten meine Modul-Quellcodes .cppm zu nennen (irgendwelche Pfade und Dateien nicht gefunden, obwohl explizit konfiguriert war, dass diese Dateien als Module kompiliert werden sollen). Nachdem ich sie .ixx genannt habe, fluppte alles deutlich besser.

    Auch gab es Probleme mit dem zu der zeit aktuellen VS-Release so dass ich dafür zu der Zeit VS 16.9.0 Preview 2 verwendet habe. Der Compiler hatte Probleme bestimmte Modul-Partitionen zu finden, wenn diese von einem übergeordneten Modul eingebunden und re-exportiert werden sollten via export import :module_partition;, obwohl die Dateien korrekt eingebunden waren und alles gefunden wurde, wenn ich aus den Partitionen eigenständige Module gemacht habe. Ich vermute das hing damit zusammen, dass meine Modul-Partitionen nicht nur eine Ebene tief geschachtelt waren, sondern es auch Partitionen gab, die selbst wiederum Partitionen importiert/exportiert haben. Mit der Preview-Version war das dann kein Problem mehr. Ich vermute aber, dass die Fixes mittlerweile wohl auch in der Mainline-Version drin sind.

    Alles in allem ist das Modul-Feature wohl noch aus gutem Grund "experimentell" und wird es wohl auch noch eine ganze Weile bleiben. Vor allem hat man es bei dem Modul-Gedöns auch mit einer Reihe neuer Dateitypen abseits der altbekannten .cpp, .hpp .o .obj .lib .a etc. zu tun, die für einen erfolgreichen Build ebenso wichtig sind. Da muss man erstmal lernen, für was die gut sind und wie die mit dem Build-Prozess zusamenhängen, wenn man eine Chance haben will Build-Probleme selbst zu debuggen (die Problematik stellt sich aber nur für Leute die nicht nur in der IDE auf "Run" klicken und beten, sondern das Projekt auch über die Kommandozeile kompilieren könnten 😉 ).

    Bei MSVC sind diese neuen Dateien z.B. die .ifc-Dateien, das ist die MSVC-Variante des BMI (Binary Module Interface) und dazu noch irgendwelche generierten JSON-Dateien, die spezifizieren, wo das jeweilige BMI für einen gegebenen Modul- und/oder Partitionsnamen zu finden ist. Das ist auch für mich noch alles ziemlich neu und erschwert auf jeden Fall die Fehlersuche, wenn man etwas augenscheinlich simples, machen will, wie die Modul-Sourcen .cppm statt .ixx zu nennen und wissen möchte, warum VS darauf nicht klarkommt.

    Diese neuen, für den Build-Prozess erforderlichen Dateien sind wohl auch der Grund, warum es wohl noch eine ganze Weile dauern wird, bis Module "normal" geworden sind. Da gibt es eine ganze Menge Tools und Build-Systeme anzupassen. Das ist aber ein Problem, dass man weniger haben wird, wenn man ausschliesslich mit VS arbeitet, dass einem die neue Komplexität, ein Projekt zu kompilieren hinter einer hübschen IDE versteckt in der dann (hoffentlich) alles einfach nur "funktioniert".

    Meine Projekte richte ich aber eher so ein, dass sie auf beliebigen Plattformen mit beliebigen Compilern gebaut werden können. VS-Projekte generiere ich mit CMake und da sehe ich noch eine einige Arbeit von Tool-Entwicklern wie auch von mir, bis ich ein modul-basiertes Projekt "produktiv" plattformübergreifend bauen kann. Da werden wohl noch Jahre ins Land ziehen 😉



  • Vielen Dank für die sehr ausführliche Antwort. Ich glaube, ich warte dann doch noch eine Weile bis das Module Feature wirklich ausgereift ist.



  • @Computerwelt sagte in Arbeitet ihr schon mit den C++ 20 Modulen?:

    Vielen Dank für die sehr ausführliche Antwort. Ich glaube, ich warte dann doch noch eine Weile bis das Module Feature wirklich ausgereift ist.

    Für private Projekte kann ich das mit VS durchaus schon empfehlen. Produktiv für nen Job würde ich es aber noch nicht einsetzen.


Log in to reply