Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Pilotprojekt: High-Performance macOS-App (C++20/Metal) komplett von KI bauen lassen – Ein Erfahrungsbericht

Empfohlene Antworten

Hallo zusammen,

ich möchte hier ein aktuelles Pilotprojekt von mir teilen und zur Diskussion stellen. Es geht um die Frage, wie weit man die Code-Generierung durch KI treiben kann, wenn man als Mensch konsequent nur noch die Rolle des Software-Architekten einnimmt.

Das Projekt: Axiom Trader (aktuell v0.4.0-alpha) – ein hochperformantes Handelssystem für macOS.

Das Experiment: Ich schreibe keine einzige Zeile Code selbst. Jede Implementierung, jeder Bugfix, das Speichermanagement und die Render-Pipelines werden komplett von der KI umgesetzt.

Der Tech-Stack:

* Sprachen: C++20 und Objective-C++ (Gewichtung ca. 52% zu 45% im Repo).

* UI/Rendering: Ein "Blender-Modell". Dear ImGui eingebettet in ein natives CAMetalLayer-Hosting-View für minimale Latenzen unter macOS 15/16.

* Plattform: Optimiert für Apple Silicon (M-Chips), Zero-Overhead-Schleifen, explizite Metal-Pipeline-Zustände.

Wie funktioniert das in der Praxis?

Der Schlüssel zum Erfolg ist eine extrem strikte ARCHITECT.md im Repository. Diese fungiert als unumstößliches Regelwerk (Guardrails) für die KI.

Die wichtigsten Regeln, die das System stabil halten:

1. Strikte Schichtentrennung: Der Core src/core/) enthält die deterministische Logik und darf absolut keine UI- oder Grafik-Header (ImGui, Metal) importieren.

2. RAII-Zwang: Ressourcenmanagement erfolgt ausnahmslos über RAII, um Speicherlecks im C++-Code von vornherein auszuschließen.

3. UI-Scoping: Dynamische ImGui-Tabellen müssen zwingend über ID-Scoping ImGui::PushID / PopID) abgesichert werden, um State-Konflikte im UI-Thread zu verhindern.

Bisherige Erkenntnis:

Wenn die architektonischen Leitplanken eng und mathematisch präzise genug gesteckt sind, neigt die KI nicht zu Halluzinationen. Stattdessen liefert sie hochoptimierten, sauberen C++20-Code, der sich in Xcode tadellos kompilieren lässt. Das Build-System von Xcode 16 verarbeitet diesen hybriden C++/Obj-C++ Mix extrem performant.

Das Projekt steuert gerade auf die Version v0.5.x zu (Anbindung von SQLite für die Persistenz und Textur-Streaming via stb_image.h in die Metal-Buffer).

Mich würde euer Feedback interessieren:

Hat jemand von euch schon ähnliche Projekte umgesetzt, bei denen die KI vollständige* Code-Autonomie hatte?

* Wie steuert ihr die Code-Qualität bei generiertem C++20-Code (Stichwort: statische Codeanalyse vs. Prompt-Guardrails)?

* Seht ihr bei so einem "Architekt (Mensch) vs. Developer (KI)"-Modell langfristig die Zukunft in der Anwendungsentwicklung?

Wer sich das Regelwerk oder den Code genauer ansehen möchte: Das Projekt ist Open Source auf GitHub (Link packe ich in die Kommentare/Signatur).

Freue mich auf eine sachliche Diskussion!

GitHub
No image preview

GitHub - tkreutz0-cmyk/axiom-trader: The Vision: A high-p...

The Vision: A high-performance, deterministic trading journal built on the "Blender Model"—prioritizing full GUI control, local data sovereignty, and zero App Store friction. - tkreutz0-c...

Hey, vielen Dank dass du das online stellst.

Ich habe es mir selber oberflaechlich angeschaut und einmal durch Claude Opus 4.7 gejagt und es gibt da einige Punkte anzumerken.
Ein smell ist fuer mich natuerlich das Darstellen von Geldwerten als Fliesskommazahl.
Dokumentation is an verschiedenen Orten uneinhetlich abgelegt.

Claudes Anmerkungen sind:
- High Performance C++ ist in der Code Base selber nicht zu erkennen (Allokation im Hotpath und dergleichen)
- Die verschiedenen konkurrierenden Implementierung (src.main.mm vs Sqlite.hpp vs StorageManager.hpp)

Meine Erfahrungen mit komplett AI generiertem Code sind ehrlicherweise bisher ernuechternd.
Ich wollte mal schauen wie es sich verhaelt wenn es mehr Richtung persistent Specs / BDD geht.

  • Autor
vor 7 Minuten, Wodar Hospur hat gesagt:

Meine Erfahrungen mit komplett AI generiertem Code sind ehrlicherweise bisher ernuechternd.
Ich wollte mal schauen wie es sich verhaelt wenn es mehr Richtung persistent Specs / BDD geht.

Vielen Dank für das ehrliche und detaillierte Feedback!

Genau das ist der springende Punkt: Es gibt hier definitiv noch einiges zu tun. Einige Funktionen und optimierte Codepfade sind aktuell auch bewusst temporär ausgeschaltet oder als Prototyp hinterlegt, während an ganz anderen Baustellen parallel weitergearbeitet wird.

Man muss bei diesem Projekt massiv berücksichtigen, dass hier absolut iterativ vorgegangen wird. Der Code, den du jetzt siehst, ist der Zustand eines fließenden Übergangs. Insgesamt ist das ein völlig neuer, experimenteller Workflow, den es so in klassischen, (echten) Produktiv-Projekten eins zu eins wahrscheinlich nie geben wird – da dort von Anfang an ganz andere Code-Reviews und statische Analysen greifen.

Es ist und bleibt ein Experiment, um die Grenzen der rein KI-gesteuerten Generierung auszuloten. Aber dafür ist es immerhin schon ein ganzes Stück weit gekommen und liefert eine stabile, native Metal-Oberfläche auf macOS, auf der wir jetzt die feineren architektonischen Klingen (wie Fixed-Point für Geldwerte und Allokations-Stopps im Hotpath) iterativ schleifen können.

Ich halte euch hier über die nächsten Refactoring-Schritte auf dem Laufenden!



vor 6 Stunden, Wodar Hospur hat gesagt:

Claudes Anmerkungen sind:

vor 5 Stunden, tkreutz2 hat gesagt:

Grenzen der rein KI-gesteuerten Generierung auszuloten


Was erwartest du genau zu erfahren?
Die Grenzen hängen davon ab, wo du die Grenzen ziehst.

Ein aussagekräftiger Vergleich zwischen KI-generierter und menschlicher Softwareentwicklung erfordert:

Quantitative Metriken (z. B. Entwicklungszeit, Fehlerrate, Testabdeckung) für objektive Daten.
Qualitative Metriken (z. B. Code-Design, Entwicklerzufriedenheit) für subjektive Bewertungen.
Langfristige Studien zur Bewertung von Wartbarkeit und Skalierbarkeit und kontextspezifische Analysen (z. B. Projektgröße, Teamdynamik, Domänenkomplexität).

Mir scheinen bestimmte Beobachtungen sehr nützlich zu sein, um zu einer Bewertung zu kommen.

Am 13.5.2026 um 17:08, tkreutz2 hat gesagt:

Wie steuert ihr die Code-Qualität bei generiertem C++20-Code (Stichwort: statische Codeanalyse vs. Prompt-Guardrails)?

* Seht ihr bei so einem "Architekt (Mensch) vs. Developer (KI)"-Modell langfristig die Zukunft in der Anwendungsentwicklung?

Die Qualität der KI-Ausgabe hängt stark von den Prompt-Guardrails ab.

Testet du, welche Formulierungen mehr oder weniger gut arbeiten?
Wenn sowas wie Best-Practice-to-generate herauskommt, würde ich das unterstützen.




  • Autor

Hallo @hellerKopf ,

du triffst hier einen extrem wichtigen Punkt. Ein Experiment ohne klare Metriken und Definition von „Grenzen“ läuft Gefahr, rein anekdotisch zu bleiben. Vielen Dank für diesen methodischen Anstoß!

Zu deiner Frage, was ich genau erfahren will und wo ich die Grenzen ziehe:
Meine primäre Hypothese ist: Kann eine KI komplexe, plattformspezifische Systemarchitekturen (wie hardwarenahes Metal-Rendering gepaart mit deterministischer Trading-Logik) fehlerfrei verwalten, wenn der Mensch ausschließlich abstrakte Regeln vorgibt?

Die Grenze ziehe ich da, wo die KI architektonische Brüche erzeugt (wie die von dir/Claude entdeckte Dreifach-Implementierung der Persistenz), weil der Kontext-Fenster-Horizont oder das logische Verständnis für das Gesamtgefüge reißt.

Zu den Metriken (Quantitativ & Qualitativ):
Da ich das Projekt alleine in meiner Freizeit hochziehe, sind vollumfängliche Langzeitstudien schwer machbar. Aber ich tracke für mich bereits einige Daten, die ich gerne im Verlauf des Projekts teilen kann:

  • Entwicklungszeit (Time-to-Market): Wie viele Minuten vergehen vom Architektur-Konzept in der ARCHITECT.md bis zum kompilierbaren Feature in Xcode? (Spoiler: Bei UI-Prototypen extrem schnell, bei Refactorings im Core bricht die Geschwindigkeit ein).

  • Fehlerrate / Regressionen: Wie oft führt ein neuer Prompt dazu, dass eigentlich funktionierende Features an anderer Stelle unbemerkt wegbrechen?

Zu deiner Frage bezüglich der Formulierungen (Best-Practice-to-generate):
Ja, absolut! Das ist im Grunde der Kern der ARCHITECT.md. Ich teste intensiv, welche Detailtiefe die KI benötigt.

Meine bisherige Erkenntnis: Allgemeine Phrasen wie "Schreibe performanten Code" bewirken gar nichts. Die KI benötigt restriktive, imperative Verbote und mathematische Konzepte. Ein Beispiel: Erst als ich die Regel "Nutze RAII" durch die konkrete Anweisung "Nutze ausnahmslos std::unique_ptr oder Stack-Allokation für Ressourcen in src/core/" ersetzt habe, sank die Memory-Leak-Rate im generierten Code gegen Null.

Ich dokumentiere diese Erkenntnisse parallel. Wenn daraus am Ende eine Art strukturiertes „Best-Practice-Template“ für C++20-Generierung entsteht, teile ich das sehr gerne hier im Forum!

Die "feine Klinge" (Fixed-Point-Math für die Währungen) schlage ich übrigens gerade ein – ich poste das Update, sobald die Pipeline fehlerfrei steht.

vor 3 Stunden, tkreutz2 hat gesagt:

Ein Beispiel: Erst als ich die Regel "Nutze RAII" durch die konkrete Anweisung "Nutze ausnahmslos std::unique_ptr oder Stack-Allokation für Ressourcen in src/core/" ersetzt habe, sank die Memory-Leak-Rate im generierten Code gegen Null.

Das ist ein Punkt, wo ich gerne tiefer gehen will.

Verglichen werden kann:
Ich fordere die Regeln von einem frisch Ausgebildeten, einem Junior (2 Jahre BE) und einem Senior.
Ich nenne die Anforderung genauso in den Anweisungen an die KI.

Das Ergebnis sollte sein zu erkennen, auf welchem Level beginnt die KI besser zu sein, als der humane Mitarbeiter.
Dann erfolgt das Tuning. Wie muss ich die Anforderung formulieren, damit KI den Junior ersetzt und ab wann ist die KI dem Senior gleich.

Ich habe das für zwei Systeme gemacht, die sich untereinander schon geringfügig unterscheiden.
Was mir die drei Arten von Mitarbeiter geantwortet hätten und welche Memory-Leak-Rate diese verursachen, versuche ich gerade vor Ort zu ermitteln.

Die LLM haben auf "Nutze RAII" wie folgt reagiert:


LLM1

LLM2

Übereinstimmung/Ergänzung

1. Ressourcen an Objektlebensdauer binden

Ressourcen werden im Konstruktor erworben und im Destruktor freigegeben.

Übereinstimmung

2. Kein manuelles new/delete im Anwendungscode

Vermeide new/delete; nutze Smart Pointer oder Container.

Übereinstimmung

3. Kein manuelles malloc/free in modernem C++

Kein manuelles Speichermanagement; nutze Standardbibliothek.

Übereinstimmung

4. Destruktor gibt die Ressource zuverlässig frei

Destruktor gibt Ressourcen frei, auch bei Ausnahmen.

Übereinstimmung

5. Destruktoren dürfen keine Exceptions werfen

Nicht explizit erwähnt, aber implizit durch Ausnahmesicherheit abgedeckt.

⚠️ Ergänzung:

6. Ressourcenbesitz eindeutig modellieren

Konsistente Ownership-Semantik (z. B. unique_ptr, shared_ptr).

Übereinstimmung

7. Rule of Zero bevorzugen

Nutzung von Standardtypen, die Ressourcen selbst verwalten.

Übereinstimmung

8. Falls eigene Ressourcenklasse nötig: Rule of Five beachten

Eigenen RAII-Wrapper erstellen, inkl. Move-Semantik.

Übereinstimmung (implizit durch Move-Semantik)

9. Kopierbarkeit bewusst entscheiden

Move-Semantik für Ownership-Übertragung; Kopieren oft gelöscht.

Übereinstimmung

10. Locks per RAII verwalten

Nutzung von std::lock_guard, std::scoped_lock.

Übereinstimmung

11. Dateien per RAII verwalten

Nutzung von std::fstream oder eigenen Wrappern.

Übereinstimmung

12. Transaktionen und Rollbacks absichern

Nicht explizit erwähnt.

Fehlend

13. Frühe Returns müssen sicher sein

RAII stellt sicher, dass Ressourcen auch bei return/throw freigegeben werden.

Übereinstimmung (implizit)

14. Keine „Cleanup“-Blöcke am Funktionsende

Aufräumlogik gehört in Destruktoren.

Übereinstimmung

15. Rohpointer nur als beobachtende Pointer verwenden

Rohe Zeiger nur für Nicht-Ownership; Ownership durch RAII-Typen.

Übereinstimmung

16. Scope bewusst klein halten

Nicht explizit erwähnt.

⚠️ Ergänzung: Wichtiger Punkt,

17. Initialisierung vollständig und gültig machen

Konstruktoren sollten Objekte in gültigen Zustand versetzen.

Übereinstimmung (implizit)

18. Keine halbgültigen Objekte bevorzugen

Keine init()-Methoden; Objekte sollten nach Konstruktion gültig sein.

Übereinstimmung (implizit)

19. Qt-spezifisch: Ownership beachten

Qt’s Eltern-Kind-Mechanismus und QScopedPointer/QSharedPointer.

Übereinstimmung

20. Qt-spezifisch: Smart Pointer passend wählen

Nutzung von std::unique_ptr, QSharedPointer etc.

Übereinstimmung

Bearbeitet von hellerKopf

  • Autor

Hallo @hellerKopf ,

deine strukturierte Gegenüberstellung der LLM-Antworten deckt das Kernproblem perfekt auf. Sie zeigt genau das, was ich die „KI-Varianz-Krise“ (oder das Overconfidence-Pattern) nenne: Die KI optimiert auf Eloquenz, nicht auf Wahrheit (p. 6). Sie listet im Chat brav alle 20 RAII-Regeln auf, bricht diese aber im echten Code-Generierungsprozess, sobald der Kontext komplexer wird (p. 6). Sie verhält sich exakt wie ein Junior-Entwickler in der Theorieprüfung vs. Praxis.

Um die KI auf das Level eines Seniors zu hieven, reicht rein esoterisches Prompt-Tuning oder das Erweitern von Text-Guidelines ab einem gewissen Punkt nicht mehr aus. Man muss die Software-Architektur selbst als Kontrollmechanismus aufbauen.

Ich habe für diesen Zweck ein übergeordnetes Framework entwickelt, das ich als „Living Architecture Library“ (basierend auf einem SYNAPSE-CPP Kern) in meinen Projekten einsetze (pp. 1, 19). Das Ziel ist eine KI-Governance, die auf einem Drei-Instanzen-Modell basiert (pp. 1, 9):

  1. Instanz 1: Der Generator (Probabilistisch): Das ist die Entwickler-KI (wie Copilot oder Claude) (p. 9). Ihr Output ist grundsätzlich „untrusted“ (p. 9). Sie liefert lediglich Lösungs-Hypothesen im Akkord (Junior-Level) (p. 9).

  2. Instanz 2: Der Falsifikator (Antagonist): Ein separates KI-Agenten-System mit dem expliziten, destruktiven Auftrag: „Suche systematisch nach Fehlern, Memory Leaks und Logikbrüchen im Code von Instanz 1“ (p. 9).

  3. Instanz 3: Der Evaluator (Deterministisch): Ein harter, in C++20 geschriebener Kern, der nicht mehr auf Wahrscheinlichkeiten basiert (p. 9). Er prüft den generierten Code und die Systemzustände gegen unverrückbare mathematische und architektonische Invarianten (p. 9).

Angewandt auf dein RAII-Beispiel:
Wenn Instanz 1 Code generiert, jagt Instanz 3 (der Evaluator) diesen durch eine automatisierte Kette (z. B. zyklomatische Komplexitätsprüfung \(\le 10\), Clang-Tidy Matcher auf new/delete und automatisierte Test-Suites) (p. 9). Verletzt die KI eine dieser Invarianten, wird der Code rigoros verworfen, und das System triggert mit dem Fehlerprotokoll eine neue Iteration (p. 17).

Erst durch diese deterministische Kontrollschicht (Instanz 3) wird die unzuverlässige „Junior-KI“ gezwungen, Code auf absolutem „Senior-Niveau“ abzuliefern (p. 9). Das System sichert sich selbst ab (p. 19).

Dieses Prinzip der Markt- und Code-Governance nutzen wir auch im Axiom Trader (p. 16), um die KI-Autonomie mathematisch zu bändigen. Wenn dich (oder die anderen) die genauen mathematischen Invarianten-Prüfungen dieses Setups interessieren, kann ich das gerne mal näher aufdröseln!

vor 8 Minuten, tkreutz2 hat gesagt:

Sie verhält sich exakt wie ein Junior-Entwickler in der Theorieprüfung vs. Praxis.

Genau hier sehe ich auch die Herausforderung.
Die hitzige Diskussion, ob KI .... ersetzen kann, vernachlässigt vollkommen den 'Maßstab' nach dem man dies beurteilen kann.
Der Junior könnte mir auch alle 20 Punkte zu RAII (nur als Beispiel) aufzählen.
Aber auch beim Senior bin ich nicht sicher, ob er alle Punkte berücksichtigt.

Und ob KI/LLM alle seine Punkte auch berücksichtigt, muss ich aufwendig nachprüfen.

  • Autor

Hallo zusammen,

ich möchte die methodische Diskussion hier direkt aufgreifen und euch den nächsten Evolutionsschritt meines Experiments vorstellen. Die Frage, wie man die unzuverlässige „Junior-KI“ bändigt und reproduzierbare „Senior-Ergebnisse“ erzielt, hat mich zu einem radikalen Umdenken im Workflow gezwungen.

Reines Prompt-Tuning in der IDE reicht ab einer gewissen Projektgröße nicht mehr aus. Wenn die KI direkt im Quellcode arbeitet, entstehen die von euch völlig zu Recht kritisierten Brüche (wie die Float-Leichen oder redundante Implementierungen).

Ich habe daher ein automatisiertes KI-QS- und Pre-Check-System direkt in das Repository integriert. Die KI arbeitet ab sofort nicht mehr direkt auf den Quellcodedateien, sondern durchläuft eine strikte Vier-Phasen-Governance-Pipeline:

  1. Die Invarianten (decisions/prompt-guardrails.md): Hier sind die harten Architektur-Gesetze (wie das plattformunabhängige Blender-Prinzip, das absolute Float-Verbot und das Allokations-Verbot im Hotpath) maschinenlesbar für die KI hinterlegt.

  2. Die Sandbox (Pre-Check-Phase): Die KI darf bestehenden C++ Code nicht mehr direkt verändern. Sie muss jeden Code-Vorschlag zuerst in einer isolierten Review-Datei im neuen Verzeichnis docs/pre-checks/ablegen.

  3. Der Konformitäts-Beweis: In dieser Review-Datei muss die KI vorab schriftlich und logisch beweisen, dass ihr generierter Code-Vorschlag keine einzige Regel der Guardrails verletzt.

  4. Die Dialog-Historisierung: Parallel dazu wird der vollständige Konversations- und Prompt-Verlauf als Markdown-Dokument im Git-Repository versioniert. Wer das Repo klont, sieht somit in Zukunft nicht nur das fertige Produkt, sondern die lückenlose Evolution der "Mensch-Maschine-Diskussion".

Die Praxisprobe läuft gerade:
Ich habe die von euch angestoßene Architekturentscheidung ADR-0004 (Einführung von plattformunabhängiger FixedPoint-Arithmetik via int64_t zur Eliminierung aller Floats) ins Repo gepusht. Die Windows-Dev-Umgebung auf meinem Handheld steht.

Die Entwickler-KI hat nun den Auftrag erhalten, das großflächige Core-Refactoring exakt nach diesem neuen Pre-Check-Muster in docs/pre-checks/0004-fixed-point-review.md vorzubereiten. Sobald die KI den Code und ihren Konformitätsbeweis dort abgelegt hat, werde ich als menschlicher Chef-Architekt das finale Review durchführen, bevor der Code live in den Xcode-Core fließt.

Ich halte euch über die Ergebnisse dieses kontrollierten KI-Einsatzes auf dem Laufenden!

  • Autor

Hallo @hellerKopf ,

exakt an diesem Punkt schließt sich der Kreis zu meinem neuen Pre-Check-System. Du hast vollkommen recht: Wenn ich den Code genauso mühsam Zeile für Zeile prüfen muss, habe ich zeitlich nichts gewonnen.

Genau deshalb zwinge ich die KI, die Beweislast umzukehren und das Konformitäts-Audit vorab selbst zu schreiben. Als menschlicher Architekt lese ich nicht mehr kopflos C++ Code, sondern prüfe primär die Plausibilität der von der KI gelieferten Beweiskette gegen meine Invarianten.

Und hier ist der direkte Praxis-Beweis, wie dieses System ein rein menschliches Review schlägt:

Ich habe die KI über meine Pipeline das Refactoring der Festkomma-Arithmetik (ADR-0004) in die Sandbox docs/pre-checks/0004-fixed-point-review.md generieren lassen. Beim Überfliegen des von der KI geschriebenen Audits fiel der Blick sofort auf Kapitel 4: „Grenzen und Risiken – Compiler-Unterstützung“.

Die KI stellte dort in ihrem eigenen Audit fest: „Implementierung nutzt int128. Wenn der Compiler keine int128-Unterstützung bietet (z. B. MSVC ohne Emulation), schlägt die Compilation fehl.“

Einem menschlichen Junior-Entwickler (und Hand aufs Herz: auch vielen Senioren!) wäre dieser plattformspezifische Fehler beim schnellen Tippen unter macOS niemals aufgefallen. Sie hätten den Code eingecheckt, und das Windows-Build-System wäre Stunden später auf die Nase geflogen.

Weil meine Pipeline die KI aber dazu zwingt, ein eigenes Risiko-Audit abzuliefern, wurde diese architektonische Sollbruchstelle sichtbar, bevor auch nur eine einzige Zeile Code live in den Core geflossen ist.

Ich habe die KI aufgrund ihres eigenen Audits nun angewiesen, ein plattformunabhängiges Fallback via Compiler-Guards und x64-Hardware-Intrinsics (_umul128 / _udiv128) für den MSVC-Compiler auf Windows einzubauen, um das Blender-Prinzip (vollkommene OS-Unabhängigkeit) zu wahren.

Der Code sieht im Pre-Check für Windows nun so aus:

Screenshot 2026-05-15 112528.png

 Vollständiger Source ist im Repository

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Konto

Navigation

Suchen

Suchen

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.