Entwicklung & Code
Programmiersprache C++26: Reflexion zur Kompilierungszeit
Im heutigen Beitrag meines C++-Blogs möchte ich über C++26 und eine der wahrscheinlich wirkungsvollsten Funktionen schreiben, die dem Arbeitsentwurf hinzugefügt wurden. Auch wenn C++26 noch ein paar Wochen bis zur offiziellen Fertigstellung braucht, wissen wir seit dem WG21-Sommertreffen im Juni 2025, was in C++26 enthalten sein wird.
Weiterlesen nach der Anzeige

Andreas Fertig ist erfahrener C++-Trainer und Berater, der weltweit Präsenz- sowie Remote-Kurse anbietet. Er engagiert sich im C++-Standardisierungskomitee und spricht regelmäßig auf internationalen Konferenzen. Mit C++ Insights ( hat er ein international anerkanntes Tool entwickelt, das C++-Programmierenden hilft, C++ noch besser zu verstehen.
Der neue Standard wird viele spannende Verbesserungen bringen, aber die wahrscheinlich größte Veränderung ist die Reflexion (Reflection) zur Kompilierungszeit! In Sofia hat das Standardisierungs-Komitee sieben Reflection-Papiere für C++26 angenommen:
- P1306R5: Expansion statements
- P2996R13: Reflection for C++26
- P3096R12: Function parameter reflection in reflection for C++26
- P3293R3: Splicing a base class subobject
- P3394R4: Annotations for reflection
- P3491R3: define_static_{string,object,array}
- P3560R2: Error handling in reflection
Die verlinkten Beiträge bieten genügend theoretischen Lesestoff.
Kommen wir zur Praxis
Die wichtigste Frage ist: Was kannst du mit dieser neuen Funktion machen? Einige haben bereits ihre Ideen veröffentlicht.
Steve Downey hat ein Beispiel, das eine JSON-Zeichenkette zur Kompilierungszeit analysiert und daraus C++-Objekte erstellt. Der direkte Link zum Compiler Explorer lautet godbolt.org/z/YsEK418K6.
Weiterlesen nach der Anzeige
Das zweite Beispiel stammt von Jason Turner und ermöglicht es, Bindungen zu anderen Sprachen zu generieren. Der direkte Link zum Compiler Explorer lautet godbolt.org/z/6Y17EG984.
Ich finde beide Beispiele prima, aber will auch ein eigenes zeigen. Das Problem, das ich jahrelang zu lösen versucht habe und das auch in verschiedenen Schulungen und sogar in meinem eigenen Buch Programming with C++20 – Concepts, Coroutines, Ranges, and more auftaucht. Ich musste die bittere Pille schlucken, einen nicht so tollen Code zu zeigen.
Reflexion, Reflexion an der Wand, was kann ich mit dir alles machen?
Ich rede von Enums und nicht davon, wie man ein Enum in einen String konvertiert und umgekehrt. Der Code dafür ist übrigens in den oben verlinkten Beiträgen zu finden.
Nein, ich hab mindestens noch ein anderes Problem mit Enums: Iteration. Wie oft wollte ich schon über ein enum iterieren. Es gibt Lösungen, die meist makrobasiert und mit vielen Regeln sind. Zum Beispiel nur aufeinanderfolgende Zahlen und ein letztes Mitglied namens Last oder MAX. Aber was ist, wenn es Lücken in einem enum gibt? Wie
enum class Color { Transparent, Red = 2, Green, Blue = 8, Yellow };
Genau, dann greift die Regel, dass nicht aufeinanderfolgende Nummerierungen nicht erlaubt sind.
Folgender Code zeigt einen Ansatz, der anderen Sprachen wie C# ähnelt, in denen das Iterieren der enum-Werte ohne weitere Umstände möglich ist:
// #A
template
requires std::is_enum_v
constexpr inline auto num_enumerators_of{
std::meta::enumerators_of(^^E).size()};
// #B
template
requires std::is_enum_v
consteval auto get_enum_values()
{
std::array> res;
template for(size_t i{}; constexpr auto& e : std::define_static_array(
std::meta::enumerators_of(^^E)))
{
res[i++] = [:e:];
}
return res;
}
Ich habe in #A eine Hilfsvariable erstellt, einfach weil es für sich schon hilfreich ist, die Anzahl der Werte in einem enum zu ermitteln.
Die Implementierung für die Aufgabe selbst befindet sich dann in #B. Du kannst dir eine andere Implementierung ausdenken, die für größere Enums besser geeignet ist, aber diese hier ist schön kurz und bündig.
Die Utility-Funktion sieht in Aktion nicht besonders aus, und man merkt nicht, dass im Hintergrund eine Reflexion stattfindet:
for(const auto e : get_enum_values()) {
std::print("{} ", std::to_underlying(e));
}
std::println();
Wie du siehst, gibt #B den stark typisierten Enum-Wert zurück. Deshalb ist std::to_underlying erforderlich, wenn der Wert mit std::print verwendet wird. Das ist eine Designentscheidung: Der Code bleibt so lange wie möglich stark typisiert.
Es gibt noch weitere Designüberlegungen, beispielsweise ob get_enum_values auch eine Variable sein sollte, da sie für jeden Typ konstant ist.
An dieser Stelle werde ich nicht alle neuen Teile erklären, da ich nur zeigen möchte, was mit C++26 möglich ist.
Den vollständigen Code zum Experimentieren findest du im Compiler Explorer.
P.S.: Falls du dich fragst, ob die Implementierung von #B für ein leeres enum, welches ein std::array der Größe Null ergibt, korrekt ist, lautet die Antwort: Ja, der Code ist korrekt. Einer der Vorteile von std::array ist, dass es einen Sonderfall für den Fall der Größe Null gibt. Ein Array im C-Stil wäre nicht gültig.
(rme)
Entwicklung & Code
Neu in .NET 10.0 [21]: Ausgabe der Befehle und Parameter in JSON bei SDK-Tools
Mit dem neuen Parameter --cli-schema erhalten Entwicklerinnen und Entwickler seit .NET 10.0 bei den .NET-SDK-Kommandozeilenbefehlen eine Ausgabe der Befehlsoptionen und Parameter in JavaScriot Object Notation (JSON).
Weiterlesen nach der Anzeige

Dr. Holger Schwichtenberg ist technischer Leiter des Expertennetzwerks www.IT-Visions.de, das mit 53 renommierten Experten zahlreiche mittlere und große Unternehmen durch Beratungen und Schulungen sowie bei der Softwareentwicklung unterstützt. Durch seine Auftritte auf zahlreichen nationalen und internationalen Fachkonferenzen sowie mehr als 90 Fachbücher und mehr als 1500 Fachartikel gehört Holger Schwichtenberg zu den bekanntesten Experten für .NET und Webtechniken in Deutschland.
Zuvor waren diese Informationen bereits in reiner Textform über die Hilfefunktion abrufbar, allerdings durch mehrere Einzelbefehle, wie beispielsweise
dotnet package -h
dotnet package add -h
dotnet package list -h

Der Screenshot zeigt einen Ausschnitt aus der Ausgabe des JSON-Schemas eines .NET-SDK-CLI-Befehls (Abb. 1).

Der Screenshot zeigt einen Ausschnitt der Hilfeinformationen eines .NET-SDK-CLI-Befehls (Abb. 2).
(rme)
Entwicklung & Code
Sourcecode-Editor Zed erreicht Version 1.0
Der Code-Editor Zed liegt jetzt in Version 1.0 vor. Einzelne, neue Highlights benennen die Entwickler des Open-Source-Editors für ihr Release nicht.
Weiterlesen nach der Anzeige
Stattdessen betonen sie, dass Version 1.0 nach jahrelanger Entwicklungszeit den Punkt markiert, an dem Zed erstmals den vollen Funktionsumfang eines modernen Editors für macOS, Windows und Linux erreicht hat. Als Beispiele nennen sie Features wie Debugging, Git‑Integration, SSH‑Remote-Entwicklung sowie die Unterstützung dutzender Sprachen.
Maximale Geschwindigkeit durch GPUI
Der komplett in Rust geschriebene Zed bedient sich keiner Browser‑Plattform als Systemfundament, sondern ist wie ein Videospiel aufgebaut, so die Entwickler. Der Editor verfügt über eine eigene GPU‑basierte UI‑Engine (GPUI), auf der auch das Agent Client Protocol läuft. Damit lassen sich KI-Agenten wie Claude Agent, Codex CLI, Cursor und OpenCode unterstützend zur Softwareentwicklung hinzuziehen. Seit Januar 2024 ist Zed unter GPL (Editor), AGPL (Server-Komponenten) und Apache 2.0 (GPUI-Framework) lizenziert.
Die Kombination aus Rust-Unterbau und GPUI verhilft Zed zu einem Geschwindigkeitsvorteil gegenüber Web‑ oder Electron-basierenden Editoren wie Atom oder VS Code. Bereits im Mai 2025 hatte Zed-Entwicklerteam ihn in einem Blogbeitrag zum schnellsten KI-Code-Editor erklärt. Anwenderinnen und Anwender, die ohne KI-Support arbeiten wollen, können diesen in Zed ohne viel Aufhebens ausschalten. War dazu in früheren Versionen des Open-Source-Editors noch eine Einstellung in der settings.json-Datei erforderlich, funktioniert es nun direkt im UI.
(mro)
Entwicklung & Code
Geld für KI statt Open Source: pgBackRest-Projekt gibt auf
David Steele, der Maintainer des weitverbreiteten Postgres-Backup-Tools pgBackRest, hat keine Finanzierung für sein Projekt gefunden und es deswegen bei GitHub archiviert. Es ist nur noch lesbar.
Weiterlesen nach der Anzeige
Steele schreibt auf GitHub, er habe „nach einer Stelle gesucht, die es mir erlauben würde, die Arbeit fortzusetzen, aber bisher war ich nicht erfolgreich. Auch meine Bemühungen, mir Sponsoren zu sichern, haben nicht zu dem geführt, was ich brauche, um das Projekt gangbar zu halten.“ Außerdem fordert er Interessenten an Forks dazu auf, sich einen neuen Namen zu suchen.
Kritik am einseitigen Ausnutzen von Open Source
Beobachter aus der Community erwarten Forks des im Postgres-Umfeld essenziellen Programms, kritisieren aber auch die IT-Industrie in ihrem Umgang mit Open Source. Laetitia Avrot, ehemaliges Mitglied des Postgres Code of Conduct Committee, weist beispielsweise darauf hin: „Das Open-Source-Modell funktioniert, wenn die Leute, die den Wert abschöpfen, auch zum Erhalt beitragen“. Große Firmen haben enorm von pgBackRest profitiert, aber: „Der KI-Goldrausch hat offensichtlich gründlich durchgerüttelt, was Firmen als bezahlenswert ansehen.“ Derzeit sei es offensichtlich wichtiger, RAM und GPUs bereitzustellen.
Weiterlesen nach der Anzeige
In der Community beginnt nun die Suche nach einer Alternative. Für Anwenderinnen und Anwender bedeutet es, vorerst abzuwarten. Derzeit gibt es keine neuen Funktionen für pgBackRest und auch keine Bugfixes mehr. Probleme werden daher vermutlich spätestens mit neuen Versionen von Postgres auftauchen.
Ein grafischer Aufruf mit einer überarbeiteten Version des bekannten xkcd-Comics „Dependency“ appelliert daran, Open-Source-Projekte der Infrastruktur wie pgBackRest auch angemessen finanziell zu unterstützen.

(Bild: xkcd.com/2347/)
(who)
-
Künstliche Intelligenzvor 2 Monaten
Top 10: Die beste kabellose Überwachungskamera im Test – Akku, WLAN, LTE & Solar
-
Social Mediavor 2 MonatenCommunity Management und Zielgruppen-Analyse: Die besten Insights aus Blog und Podcast
-
Social Mediavor 3 MonatenCommunity Management zwischen Reichweite und Verantwortung
-
Künstliche Intelligenzvor 3 MonatenSmartphone‑Teleaufsätze im Praxistest: Was die Technik kann – und was nicht
-
Apps & Mobile Entwicklungvor 3 MonatenIntel Nova Lake aus N2P-Fertigung: 8P+16E-Kerne samt 144 MB L3-Cache werden ~150 mm² groß
-
Entwicklung & Codevor 2 MonatenCommunity-Protest erfolgreich: Galera bleibt Open Source in MariaDB
-
Künstliche Intelligenzvor 2 MonatenBlade‑Battery 2.0 und Flash-Charger: BYD beschleunigt Laden weiter
-
Social Mediavor 1 MonatVon Kennzeichnung bis Plattformpflichten: Was die EU-Regeln für Influencer Marketing bedeuten – Katy Link im AllSocial Interview
