5 Punkte von darjeeling 2026-02-05 | Noch keine Kommentare. | Auf WhatsApp teilen

Zusammenfassung:

  • Der Beitrag beschreibt den vollständigen Ersatz des C-Sprachparsers pycparser, der fast 20 Jahre lang auf PLY (Python Lex-Yacc) basierte, durch einen manuell geschriebenen Recursive-Descent-Parser mit Hilfe des LLM-Coding-Agenten Codex.
  • Das Ergebnis waren die Entfernung einer externen Abhängigkeit (PLY), geringerer Wartungsaufwand und eine Leistungssteigerung von 30 %. Damit wird der praktische Nutzen von LLMs beim Refactoring großer Legacy-Codebasen belegt.
  • Hervorgehoben wird die Bedeutung der wiederholten Prüfung durch menschliche Entwickler und des Prompt Engineerings, um Qualitätsprobleme im von LLMs erzeugten Code (Lesbarkeit, Komplexität usw.) zu beheben.

Ausführliche Zusammenfassung:

  1. Hintergrund und Motivation
    pycparser ist ein bedeutendes Open-Source-Projekt mit rund 20 Millionen Downloads pro Tag. Bisher verarbeitete es die C99-Grammatik mit der PLY-Bibliothek, doch dabei hatten sich folgende Probleme angesammelt:
  • Abhängigkeitsproblem: Die PLY-Bibliothek wird nicht mehr gepflegt (archiviert), wodurch Sicherheits- und Wartungsrisiken entstanden sind.
  • Grammatikkomplexität: Mit der Unterstützung neuerer Standards und erweiterter Grammatik wie C11 und C23 traten die für YACC typischen Reduce-Reduce-Konflikte immer häufiger auf, was Erweiterungen erschwerte.
  • Philosophischer Wandel: Der Autor kam mit der Zeit zu der Überzeugung, dass ein direkt geschriebener Recursive-Descent-Parser in Bezug auf Verständnis und Wartbarkeit einem Parser-Generator überlegen ist.
  1. Der Zusammenarbeitsprozess mit dem LLM (Codex)
    Der Autor entschied sich, diese Aufgabe dem LLM zu übertragen, obwohl er erwartete, dass sie ihn allein mehr als eine Woche kosten würde. Die mehr als 2.500 Zeilen umfassende, robuste Testsuite von pycparser diente dabei als „Leitplanke“ zur Validierung der Ergebnisse des LLM.
  • Erste Portierung: Auf den Prompt „Lass den Lexer unverändert und ersetze nur den Parser durch Recursive Descent“ arbeitete Codex über eine Stunde lang und erzeugte einen Prototypen, der die Tests bestand.
  • Iterative Verbesserung: Der erste Code war funktional nahezu perfekt, ließ aber bei der Lesbarkeit zu wünschen übrig und missbrauchte unter anderem Exceptions zur Steuerung des Kontrollflusses. Der Autor nutzte aktiv Git-Branches und verfeinerte den Code über Dutzende Commits hinweg.
  1. Ergebnisse und Erkenntnisse
  • Leistungssteigerung: Der manuell geschriebene Parser war etwa 30 % schneller als die bisherige YACC-basierte Variante.
  • Codequalität und Wartbarkeit: LLMs neigen dazu, nachlässigen oder unnötig komplexen Code zu schreiben. Wenn Entwickler jedoch klare Anweisungen geben (z. B. „ändere X in Y“ oder „füge Kommentare hinzu“), reagieren sie sehr effektiv.
  • Bedeutung statischer Typisierung: Als später Type Annotations in Python ergänzt wurden, erhöhte sich die Genauigkeit der Vorschläge des LLM weiter. Der Autor prognostiziert, dass Coding-Agenten künftig in stark typisierten Sprachen wie Rust oder TypeScript noch bessere Leistungen zeigen werden.
  1. Fazit
    Der Autor kam durch dieses Projekt zu dem Schluss, dass LLMs keine bloßen Spielzeuge sind, sondern Werkzeuge, die die tatsächliche Produktivität um mehr als das Zehnfache steigern können. Eine Aufgabe, die etwa 30 bis 40 Stunden gedauert hätte, wurde in 4 bis 5 Stunden abgeschlossen. Außerdem bewertet er LLMs sehr hoch als Katalysator dafür, dass Entwickler in einen produktiven Flow-Zustand kommen.

Noch keine Kommentare.

Noch keine Kommentare.