1 puntos por GN⁺ 2024-09-14 | 1 comentarios | Compartir por WhatsApp

Estado actual

  • Ya se completó el port para poder ejecutar el runtime y el compilador de SBCL en Nintendo Switch
  • También es posible la interfaz con bibliotecas compartidas, y ya se completó el port de varias bibliotecas de portabilidad de sistemas operativos
  • Sin embargo, se producen fallos cuando entra en funcionamiento el recolector de basura de SBCL
  • No hay salida de audio, y existen problemas con el mecanismo de callbacks en C
  • También se prevén problemas relacionados con el rendimiento

Resumen general

  • Switch usa un chip ARM64 Cortex-A57 y 4 GB de RAM, y se ejecuta sobre un sistema operativo de microkernel propietario
  • SBCL ya cuenta con un port para ARM64 Linux, por lo que los problemas de generación de código ya estaban resueltos
  • Switch es la única consola compatible con la biblioteca gráfica OpenGL, lo que facilita portar la biblioteca gráfica de Trial
  • Para comenzar el desarrollo, se compró un kit de desarrollo a Nintendo of Europe y se instaló el SDK

Proceso de compilación de SBCL

  1. build-config: recopila las opciones de compilación y las muestra en un formato legible
  2. make-host-1: construye un compilador cruzado con el compilador Lisp del host
  3. make-target-1: genera el runtime en C con el compilador C del objetivo
  4. make-host-2: construye el sistema Lisp del objetivo
  5. make-target-2: carga el cold core en el runtime del objetivo y completa el bootstrap

Compilación para Switch

  • Switch no es un entorno tipo PC y no tiene shell, línea de comandos ni compilador
  • Como no puede crear páginas ejecutables, no es posible la compilación en tiempo de ejecución
  • La mayor parte del código es independiente de la plataforma y puede compilarse para ARM64
  • Se usa fasteval para sustituir la compilación en tiempo de ejecución

Recolector de basura

  • El GC estándar de SBCL es gencgc, un recolector de basura generacional
  • Se presentan problemas de movimiento de objetos en entornos multihilo
  • En sistemas Unix se usa un mecanismo de señales para pausar los hilos, pero eso no es posible en Switch
  • Se usa una estrategia de "safepoints" para que los hilos se pausen por sí mismos

Trabajo futuro

  • Fijar CLOS tanto como sea posible y explorar la precompilación
  • Se necesita optimización adicional debido al procesador de bajo rendimiento de Switch
  • Es necesario lograr que el recolector de basura funcione por completo
  • Hay que resolver el problema de los callbacks en C

Conclusión

  • Debido al NDA no se puede revelar todo el trabajo, pero se está publicando lo que sí es posible
  • Se solicita apoyo a través de Patreon, GitHub y Ko-Fi

Resumen de GN⁺

  • Este artículo aborda el proceso y los desafíos de portar el runtime de Common Lisp a Nintendo Switch
  • Debido al sistema operativo propietario de Switch y a las limitaciones de hardware, surgieron muchas dificultades técnicas
  • Los principales retos son el recolector de basura y los problemas de multihilo, así como la compilación en tiempo de ejecución
  • Este proyecto ofrece información útil para desarrolladores de Common Lisp y de videojuegos

1 comentarios

 
GN⁺ 2024-09-14
Comentarios de Hacker News
  • Durante unas semanas probé el desarrollo de juegos en Common Lisp usando Trial, y fue una experiencia muy disfrutable

    • Poder modificar casi cualquier parte mientras el juego está corriendo es una gran ventaja
    • Ojalá este port tenga éxito
  • SBCL es una implementación de lenguaje excelente, y quería probar el desarrollo en CL para una consola de videojuegos "de verdad"

    • Me sorprendió saber que Shinmera está haciendo este trabajo
    • Cuando eché un vistazo rápido al interior de SBCL, me dio miedo, así que mis respetos para él
    • Me pregunto si SBCL (+threading/SDL2) funciona en Raspberry Pi
  • Gracias al autor por escribir un artículo tan interesante y detallado

    • Este nivel de detalle normalmente no se publica hasta que termina la vida útil de una consola
    • Cada vez que leo trabajo tan profundo como este, me da envidia el software monótono que uso todo el día
  • Me pregunto por qué usó el SDK oficial

    • Puede que Nintendo no permita publicar oficialmente juegos hechos con un SDK de terceros
  • Compré Kandria

    • No juego mucho, pero apoyar que Shinmera esté expandiendo las fronteras del mundo Lisp vale la pena
  • SBCL - "Steel Bank Common Lisp"

    • SBCL es un compilador Common Lisp de alto rendimiento y es software libre/de código abierto
    • Además del compilador y el sistema de ejecución para ANSI Common Lisp, ofrece varias extensiones como depurador, perfilador estadístico, herramienta de cobertura de código y más
  • Su trabajo es sorprendente

    • Para alguien como yo, a quien le gusta usar CL en todos lados, esto me da muchísimo gusto
  • Ojalá Nintendo y Sony apoyaran esfuerzos como este

    • Iniciar programas como Github Accelerator también sería otra forma de crear juegos (IP) para consolas
  • Un poco fuera de tema, pero portar Yuzu a Nintendo Switch sería impresionante

  • Justo por cosas como esta vengo a HN

    • Mis respetos para el OP y su colega
    • Sería una gran bendición si Nintendo pudiera ser un poco más abierta con su sistema