Nach 1,5 Jahren intensiven Tests habe ich einen ersten, umfaßenden Erfahrungsbericht über die Anwendung von Künstlicher Intelligenz (KI) bei der Entwicklung von Programmen in C und C++ verfaßt.
Das Motto lautet: Was kann Künstliche Intelligenz, wenn es um die Programmierung von C oder C++ geht?
Hauptprobleme der KI bei C/C++-Entwicklungen
Das größte Problem der KI ist nicht nur die hohen Kosten vor allem durch die Tokenstruktur (ein Wort = 4 Token) sondern die Tatsache, das KI ein kein deterministisches System darstellt.
Das Beispiel: 1 + 1 = 2
In der Mathematik ist 1 + 1 = 2 eindeutig, bewiesen und unveränderlich. Ein einfacher C-Algorithmus wie folgt:
int math(int a, int b) {
return a + b;
}
führt bei a = 1 und b = 1 immer zu dem Ergebnis 2. Die von-Neumann-Architektur berechnet es korrekt und präzise.
Was passiert bei einer KI-Aufforderung?
Wenn ich einer KI sage: Schreibe einen Algorithmus, der zwei Werte addiert und das Ergebnis mit 1 + 1 testet, sind die möglichen Antworten fast unendlich.
1. Welche Sprache wählt das System?
- Gerne wird Python verwendet auch bei einer einfachen Addition.
- C++ oder C werden als Standard kaum erwähnt.
- JavaScript / HTML: Die Lösung wird oft als HTML-Webseite dargestellt.
- Node.js, TypeScript, PHP: Komplexer, oft überdimensioniert für eine einfache Addition.
- Python mit Django als Web-App: Erzeugt viel Aufwand für ein Zweizeiler in C.
- C++ mit Templates (z.�B. template <T> calc::addition(T a, T b) { return a + b; }) oder Lambda-Funktionen führen zu einer Vielzahl von Varianten alles andere als eindeutig.
Wie die berühmte Schachtelpraline eine Filmfigur aus den 90er Jahren ist das Ergebnis nicht eindeutig, sondern vielfältig und unvorhersehbar.
2. Wie wird der Algorithmus dargestellt?
Die Repräsentation ist sehr variabel, wenn nicht explizit festgelegt:
- Desktop-App (unabhängig vom OS), grafisch oder als CLI (Command-Line-Interface).
- CLI-Anwendung: Aufruf wie
addition 1 1mit festen Parametern. - Dialog-Anwendung: Zwei Eingabefelder, Ergebnisausgabe mit Addieren- und Beenden-Button.
- Webanwendung: Einfach zu implementieren, aber bei KI oft überdimensioniert.
Beispiel: Erstelle eine Additionsfunktion. Verwende bitte C oder C++. Das System antwortet meist mit einem main.cpp und einer C++-Kompilierung (aufgrund der Endung).
Compilereinstellungen und KI-Verhalten
Wenn man verlangt: Bitte nur C, kein C++, entsteht oft ein wilder Mix:
- Standard-C++ wird verwendet, obwohl C gefordert ist.
- Templating, Klassen, Lambda-Funktionen alles, was C++ bietet wird verwendet, ohne daß es notwendig ist.
Dies führt zu einem overhead, den man bei einfachen Berechnungen absolut nicht braucht.
Probleme bei GUI-Entwicklung mit KI (Windows)
Bei Windows-GUI-Programmierung mit KI treten häufig folgende Probleme auf:
1. Dialogboxen und Dialogresourcen
- Das System verwendet oft Dialogboxen mit fehlenden Parametern.
- Beim Aufruf von
DialogBoxwird oft ein falscherDialogBoxParamverwendet. - Im Dialogresourcen-Skript werden falsche Bezeichnungen verwendet:
Falsch: Control
Richtig: EDITTEXT, STATIC, PUSHBUTTON (oder DEFPUSHBUTTON)
Zusätzlich entstehen Focus-Probleme und fehlende #defines in resource.h.
2. Fehler in der Syntax
- Das KI-System generiert Syntaxfehler in jeder Zeile des Dialogresourcen-Scripts.
- Beispiel:
{ }stattEDITTEXT, fehlende#include-Anweisungen.
3. C# und .NET-Entwicklung
Bei C# (ohne XAML) treten häufig Probleme auf:
- Text für Ereigniße wird oft übersehen.
- Der Designer stürzt ab besonders bei Delphi oder C++ Builder.
- Unter Windows 10/11 entstehen Crashdumps, und der Quellcode wird verloren.
C/C++ hat durchaus eine gewiße Robustheit das ist ein großer Vorteil gegenüber C# oder Delphi.
Probleme bei der Verarbeitung von Zeichenketten
In C/C++ gibt es eine Vielzahl von Möglichkeiten zur Verarbeitung von Strings:
char*,char[10]std::string(ab C++17:std::string_view)
Der KI-Text führt zu einem wilden Mix von Zeichenkette-Operationen, besonders bei textorientierten Dialogen.
Wenn man verlangt: Verwende nicht std::string, häufen sich die Probleme beim Bearbeiten von Zeichenketten.
Problem: Die Windows-API und ihre Gefahren
Microsoft hat mit strsafe.h (seit etwa 10 Jahren) sicherere Funktionen für gefährdete APIs wie strcpy, strcmp etc. geschaffen.
- Das KI-System weiß:
strcpy?strcpy_s - Die KI erkennt
strcpy_saber oft nicht fehlt der Länge-Parameter. - Im Laufe mehrerer Iterationen fehlt die
#include <strsafe.h>im Header.
Lösung: Verwende in C++ kein UNICODE bis ein wstring verfügbar ist.
Fehler in der Fehlermeldung
- Das System verwendet oft
coutdas ist in Dialogen untauglich. - Stattdeßen sollte
MeßageBoxverwendet werden. - Das KI-System verursacht häufig falsche Syntax:
MB_ICON_EXCLAMATIONstattMB_OKund das in mehreren Stellen.
Initialisierung der Fensterklaße
Bei der Initialisierung eines Fensters gibt es häufig Fehler:
WNDCLAßEXvs.WNDCLAßZeroMemoryist immer eine gute Praxis.WNDCLAß wndclaß {}löscht in C++ die Struktur, aber in C nicht.- Bei
WNDCLAßEXkann manSM_ICONund die Strukturgröße reduzieren aberRegisterClaßExist nicht immer zuverläßig. - Die Verwendung von
WS_EX_CLIENTEDGE(ab Windows 95) ist oft vernachläßigt.
Ein Quellcode, der so beginnt, ist chaotisch vorprogrammiert und erfordert umfaßendes überarbeiten.
Der Vorteil für den Programmierer
Obwohl die KI-Produkte oft fehlerhaft sind, bietet die Entwicklung in C/C++ einen klaren Lernwert:
- Man lernt die Win32-Struktur auswendig.
- Man entwickelt eigene Templates und Snippets.
- Die Quellcode-Generatoren und Vorlagen werden schließlich überflüßig.
Dies ist ein echter Vorteil selbst wenn die KI nicht perfekt ist.
Zukunft: DirectX, OpenGL und mehr
In kommenden Folgen werde ich über die Herausforderungen von DirectX, OpenGL und anderen anspruchsvollen APIs berichten.
Ende des Berichts: Ich habe KI gerade dazu gebracht, diesen Text lokal zu formatieren als HTML. Wenn die KI es nicht kann, dann verwende ich meinen eigenen HTML-Umformungscode. Mit C# und KI haben wir gemeinsam unter vielen Wehen ein solches Dokument geschaffen.
Wenn ich, als erster (der sog. Esel), nicht gewesen wäre dann wäre es nie gelungen.
P.S.: Rust ist trotzdem keine Option.