James Turner
13.04.2021, 12:53 Uhr
Pro und Contra C#-Source-Generatoren
Entwickler James Turner hat sich darangemacht, einen C#-Quellcode-Generator zu entwickeln und berichtet in einem Beitrag auf seiner Homepage über die Vorteile und die "Schmerzpunkte" eines solchen Hilfsprogramms.
Quellcode-Generatoren sind ein neues Feature in C#, mit dem man bestehenden Quellcode analysieren und neuen Quellcode generieren kann, und zwar direkt aus C# heraus. Als ersten grossen Vorteil eines C#-Quellcode-Generators nennt Turner die Möglichkeit zur Kompilierzeit eines Programmes einen idealen Serialisierer zu generieren und dabei nicht auf Reflection zur Laufzeit zurückgreifen zu müssen.
Als ersten Schmerzpunkt verweist Turner auf das Debuggen von Quellcode-Generatoren. Das klappt nämlich nicht so, wie man es gerne hätte. Der Grund: Der Quellcode-Generator läuft während der Kompilierung, aber das Debugging beginnt erst danach, was bedeutet, dass ein zuvor gesetzter Haltepunkt niemals erreicht werden würde. Er hat zwei Optionen gefunden, das Debuggen dennoch zu ermöglichen: Man kann den Debugger vom Quellcode-Generator aus aufrufen oder den Quellcode-Geraator manuell ausführen. Über die Vor- und Nachteile der beiden Methoden berichtet er in seinem Artikel.
Als zweiten Schmerzpunkt verweist er auf das fehlende Async/Await. Die Methoden, die von den Source-Generatoren (Initialize und Execute) angeboten werden, geben keine Tasks zurück, so dass sich keine asynchronen APIs aufrufen lassen. Laut Roslyn-Team ist dies beabsichtigt, da das IO zum Lesen/Schreiben von Dateien vom Compiler gehandhabt wird.
Schmerzpunkt 3 sind Transiente Abhängigkeiten. Turner sagt: "Ein Problem mit Abhängigkeiten war etwas, das ich überhaupt nicht erwartet hatte, als ich mit meinem Source-Generator begann.
In seinem Fazit bekräftigt Turner trotz der Schmerzpunkte, dass sich die Umstellung auf Quellgeneratoren lohnt! In seinem Musterprojekt hat er für den Quellcode-Generator 700 Zeilen Code hinzugefügt, konnte dafür jedoch mehr als 69000 Codezeilen entfernen. Turner: "Während die Schmerzpunkte ärgerlich sind, sind die Quellcode-Generatoren ein grossartiges Feature, von dem ich hoffe, dass es Tool-Updates geben wird, welche die Erfahrung der Entwickler verbessern."
Den kompletten englischsprachigen Text von James Turner lesen Sie hier. Eine ausführliche Einführung in C#-Source-Generatorn von Phillip Carter, Program Manager .NET bei Microsoft, finden Sie auf dieser Seite.