5 Punkte von GN⁺ 2026-02-24 | Noch keine Kommentare. | Auf WhatsApp teilen
  • Das Browserprojekt Ladybird führt Rust als speichersichere Sprache ein, um C++ zu ersetzen, und nutzt KI-Tools im Migrationsprozess
  • Zuvor wurde Swift geprüft, wegen eingeschränkter C++-Interoperabilität und Plattformbeschränkungen fiel die Wahl schließlich jedoch auf Rust
  • Das erste Portierungsziel ist die JavaScript-Engine LibJS; mit Claude Code und Codex wurde per hunderten manuell gesteuerten Prompts übersetzt
  • In rund zwei Wochen wurden 25.000 Zeilen Rust-Code fertiggestellt; verifiziert wurde, dass Ausgabe und Performance vollständig mit der C++-Version übereinstimmen
  • Das Projekt will vorerst ein paralleles Entwicklungsmodell mit C++ und Rust beibehalten und langfristig Sicherheit sowie Wartbarkeit verbessern

Hintergrund zur Einführung von Rust

  • Ladybird prüfte mehrere Sprachen, um eine speichersichere Alternative zu C++ zu finden
    • Swift wurde ausgeschlossen, da die Interoperabilität mit C++ unzureichend war und die Plattformunterstützung außerhalb des Apple-Ökosystems begrenzt ist
  • Rust wurde als Sprache mit einem reifen Ökosystem für Systemprogrammierung bewertet, mit der viele Mitwirkende bereits vertraut sind
  • 2024 wurde eine Einführung noch wegen der ungeeigneten Passung von Rust zu C++-artigem OOP zurückgestellt; später fiel die Entscheidung zur erneuten Einführung aufgrund von Sicherheit und gereiftem Ökosystem
  • Mit Blick auf die bereits erfolgte Einführung von Rust in Firefox und Chromium kam das Team zu dem Schluss, dass Rust auch für Ladybird geeignet ist

Der Portierungsprozess von LibJS

  • Das erste Ziel der Umstellung ist LibJS, Ladybirds JavaScript-Engine
    • Lexer, Parser, AST, Bytecode-Generator und andere unabhängige Komponenten sowie die auf test262 basierende Testabdeckung machten sie zu einem geeigneten Ausgangspunkt
  • Für die Portierung wurden Claude Code und OpenAI Codex verwendet
    • Es handelte sich nicht um automatische Generierung, sondern um eine vom Menschen gesteuerte Übersetzung; Reihenfolge der Portierung und Codestruktur wurden direkt festgelegt
    • Mit hunderten Prompts wurden präzise Anweisungen gegeben; anschließend erfolgten Codeprüfung und Fehlersuche mit verschiedenen Modellen

Ergebnisse und Verifizierung

  • Das Ziel war, dass die C++- und Rust-Pipelines bytegenau identische Ausgaben erzeugen
  • Rund 25.000 Zeilen Rust-Code wurden in zwei Wochen fertiggestellt, wodurch eine Arbeit verkürzt wurde, die sonst mehrere Monate gedauert hätte
  • AST und Bytecode sind vollständig identisch, und in Tests sowie JS-Benchmarks gab es keinen Performanceverlust
  • Mit Lockstep-Tests, bei denen C++- und Rust-Pipeline gleichzeitig ausgeführt werden, wurde beim Surfen im Web verifiziert, ob die Ergebnisse übereinstimmen
  • Der aktuelle Code behält die aus C++ übersetzte Form bei und imitiert sogar Registerzuweisungsmuster identisch
    • Der wichtigste Grund dafür ist die Sicherstellung der Kompatibilität mit der C++-Pipeline
    • Zu einem späteren Zeitpunkt, wenn die C++-Pipeline aufgegeben wird, ist eine Vereinfachung und Bereinigung des Rust-Codes geplant

Weitere Pläne

  • Die Umstellung auf Rust wird nicht als Hauptrichtung der Projektentwicklung, sondern als parallele Arbeit vorangetrieben
  • C++- und Rust-Code werden koexistieren, bei klar definierten Interoperabilitätsgrenzen
  • Reihenfolge und Umfang der Portierung werden vom Kernteam gesteuert; externe Mitwirkende müssen sich im Voraus abstimmen
  • Langfristig wird eine schrittweise Umstellung mit dem Ziel verfolgt, Sicherheit und Wartbarkeit zu verbessern
  • Obwohl anerkannt wird, dass die Entscheidung umstritten sein kann, wird sie als richtige Wahl für Ladybirds Zukunft bewertet

Noch keine Kommentare.

Noch keine Kommentare.