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
build-config: recopila las opciones de compilación y las muestra en un formato legible
make-host-1: construye un compilador cruzado con el compilador Lisp del host
make-target-1: genera el runtime en C con el compilador C del objetivo
make-host-2: construye el sistema Lisp del objetivo
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
Comentarios de Hacker News
Durante unas semanas probé el desarrollo de juegos en Common Lisp usando Trial, y fue una experiencia muy disfrutable
SBCL es una implementación de lenguaje excelente, y quería probar el desarrollo en CL para una consola de videojuegos "de verdad"
Gracias al autor por escribir un artículo tan interesante y detallado
Me pregunto por qué usó el SDK oficial
Compré Kandria
SBCL - "Steel Bank Common Lisp"
Su trabajo es sorprendente
Ojalá Nintendo y Sony apoyaran esfuerzos como este
Un poco fuera de tema, pero portar Yuzu a Nintendo Switch sería impresionante
Justo por cosas como esta vengo a HN