1 Punkte von GN⁺ 2024-09-14 | 1 Kommentare | Auf WhatsApp teilen

Aktueller Stand

  • Derzeit wurden die SBCL-Laufzeitumgebung und der Compiler erfolgreich so portiert, dass sie auf der Nintendo Switch laufen können
  • Die Anbindung an Shared Libraries ist ebenfalls möglich, und verschiedene Portabilitätsbibliotheken für Betriebssysteme wurden ebenfalls portiert
  • Allerdings kommt es zu Abstürzen, wenn der Garbage Collector von SBCL arbeitet
  • Keine Audioausgabe möglich, Probleme mit dem C-Callback-Mechanismus
  • Auch Leistungsprobleme sind zu erwarten

Überblick

  • Die Switch verwendet einen ARM64-Cortex-A57-Chip mit 4 GB RAM und läuft auf einem proprietären Mikrokernel-Betriebssystem
  • SBCL verfügt bereits über einen ARM64-Linux-Port, sodass Probleme bei der Codegenerierung bereits gelöst sind
  • Die Switch ist die einzige Konsole mit Unterstützung für die OpenGL-Grafikbibliothek, was die Portierung der Grafikbibliothek von Trial erleichtert
  • Um mit der Entwicklung zu beginnen, wurde bei Nintendo of Europe ein Development Kit gekauft und das SDK installiert

SBCL-Build-Prozess

  1. build-config: Sammelt Build-Konfigurationsoptionen und gibt sie in einem lesbaren Format aus
  2. make-host-1: Baut mit einem Host-Lisp-Compiler einen Cross-Compiler
  3. make-target-1: Erzeugt mit dem Ziel-C-Compiler die C-Laufzeitumgebung
  4. make-host-2: Baut das Ziel-Lisp-System
  5. make-target-2: Lädt den Cold Core in der Ziel-Laufzeitumgebung und schließt das Bootstrap ab

Build für die Switch

  • Die Switch ist keine PC-Umgebung und hat weder Shell noch Kommandozeile oder Compiler
  • Es können keine ausführbaren Speicherseiten erzeugt werden, daher ist keine Laufzeitkompilierung möglich
  • Der Großteil des Codes ist plattformunabhängig und kann für ARM64 kompiliert werden
  • fasteval wird verwendet, um die Laufzeitkompilierung zu ersetzen

Garbage Collector

  • Der Standard-GC von SBCL ist gencgc, ein generationaler Garbage Collector
  • In Multithreading-Umgebungen treten Probleme beim Verschieben von Objekten auf
  • Auf Unix-Systemen werden Threads per Signalmechanismus angehalten, auf der Switch ist das jedoch nicht möglich
  • Stattdessen wird eine „Safepoints“-Strategie verwendet, damit Threads sich selbst anhalten

Weitere Arbeiten

  • CLOS so weit wie möglich fixieren und Precompilation weiter untersuchen
  • Aufgrund des leistungsschwachen Prozessors der Switch sind zusätzliche Optimierungen nötig
  • Der Garbage Collector muss vollständig funktionsfähig werden
  • Das C-Callback-Problem muss gelöst werden

Fazit

  • Aufgrund einer NDA können nicht alle Arbeiten offengelegt werden, aber die Teile, die möglich sind, werden veröffentlicht
  • Unterstützung wird über Patreon, GitHub und Ko-Fi erbeten

GN⁺-Zusammenfassung

  • Dieser Artikel behandelt den Prozess und die Herausforderungen bei der Portierung der Common-Lisp-Laufzeitumgebung auf die Nintendo Switch
  • Durch das proprietäre Betriebssystem und die Hardware-Beschränkungen der Switch ergeben sich viele technische Schwierigkeiten
  • Zu den wichtigsten Herausforderungen zählen der Garbage Collector und Multithreading-Probleme sowie Probleme mit der Laufzeitkompilierung
  • Das Projekt bietet nützliche Informationen für Common-Lisp-Entwickler und Spieleentwickler

1 Kommentare

 
GN⁺ 2024-09-14
Hacker-News-Kommentare
  • Ich habe einige Wochen lang mit Trial die Spieleentwicklung in Common Lisp getestet, und es war eine sehr erfreuliche Erfahrung.

    • Dass man fast alles ändern kann, während das Spiel läuft, ist ein großer Vorteil.
    • Ich hoffe, dass dieser Port erfolgreich sein wird.
  • SBCL ist eine hervorragende Sprachimplementierung, und ich wollte schon immer CL-Entwicklung für eine „echte“ Spielkonsole ausprobieren.

    • Ich war überrascht zu erfahren, dass Shinmera an dieser Arbeit sitzt.
    • Als ich mir kurz das Innere von SBCL angesehen habe, bekam ich Angst, daher großen Respekt an ihn.
    • Ich frage mich, ob SBCL (+ Threading/SDL2) auf dem Raspberry Pi läuft.
  • Vielen Dank an den Autor für diesen interessanten und detaillierten Artikel.

    • Details auf diesem Niveau werden normalerweise erst veröffentlicht, wenn der Lebenszyklus einer Konsole vorbei ist.
    • Jedes Mal, wenn ich solch tiefgehende Arbeit lese, werde ich neidisch auf die monotone Software, die ich den ganzen Tag benutze.
  • Ich frage mich, warum das offizielle SDK verwendet wurde.

    • Vielleicht liegt es daran, dass Nintendo Spiele, die mit einem SDK von Drittanbietern erstellt wurden, offiziell nicht veröffentlichen lässt.
  • Ich habe Kandria gekauft.

    • Ich spiele nicht viel, aber dass Shinmera die Grenzen der Lisp-Welt erweitert, ist etwas, das Unterstützung verdient.
  • SBCL – „Steel Bank Common Lisp“

    • SBCL ist ein High-Performance-Common-Lisp-Compiler und Open-Source-/freie Software.
    • Neben einem Compiler und einem Laufzeitsystem für ANSI Common Lisp bietet es verschiedene Erweiterungen wie einen Debugger, einen statistischen Profiler, Tools für Code Coverage und mehr.
  • Ihre Arbeit ist erstaunlich.

    • Für mich, der CL gern überall einsetzt, ist das eine große Freude.
  • Ich wünschte, Nintendo und Sony würden solche Bemühungen unterstützen.

    • Programme wie der Github Accelerator zu starten, wäre eine weitere Möglichkeit, Spiele (IP) für Konsolen zu schaffen.
  • Etwas off-topic, aber es wäre erstaunlich, Yuzu auf die Nintendo Switch zu portieren.

  • Genau deswegen komme ich zu HN.

    • Großen Respekt an den OP und seine Kollegen.
    • Es wäre ein großer Segen, wenn Nintendo gegenüber seinem System etwas offener sein könnte.