Estado atual
- O runtime e o compilador do SBCL já foram portados para rodar no Nintendo Switch
- A interface com bibliotecas compartilhadas também é possível, e várias bibliotecas de portabilidade de sistemas operacionais também já foram portadas
- Porém, ocorrem falhas quando o coletor de lixo do SBCL entra em funcionamento
- Sem saída de áudio, problema no mecanismo de callback em C
- Também são esperados problemas relacionados a desempenho
Visão geral
- O Switch usa um chip ARM64 Cortex-A57 e 4 GB de RAM, rodando em um sistema operacional proprietário baseado em microkernel
- O SBCL já possui um port para ARM64 Linux, então os problemas de geração de código já estão resolvidos
- O Switch é o único console que oferece suporte à biblioteca gráfica OpenGL, o que facilita o port da biblioteca gráfica do Trial
- Para começar o desenvolvimento, foi adquirido um kit de desenvolvimento da Nintendo of Europe e instalado o SDK
Processo de build do SBCL
build-config: coleta as opções de configuração da build e as imprime em um formato legível
make-host-1: faz a build do compilador cruzado com o compilador Lisp do host
make-target-1: gera o runtime em C com o compilador C do alvo
make-host-2: faz a build do sistema Lisp do alvo
make-target-2: carrega o cold core no runtime do alvo e conclui o bootstrap
Build para o Switch
- O Switch não é um ambiente de PC e não possui shell, linha de comando nem compilador
- Não é possível criar páginas executáveis, então não há compilação em tempo de execução
- A maior parte do código é independente de plataforma e pode ser compilada para ARM64
fasteval é usado para substituir a compilação em tempo de execução
Coletor de lixo
- O GC padrão do SBCL é o "gencgc", um coletor de lixo geracional
- Surgem problemas de movimentação de objetos em ambiente multithread
- Em sistemas Unix, o mecanismo de sinais é usado para estacionar as threads, mas isso não é possível no Switch
- A estratégia de "safepoints" é usada para que as próprias threads se estacionem
Próximos trabalhos
- Congelar o máximo possível do CLOS e explorar pré-compilação
- São necessárias otimizações adicionais devido ao processador fraco do Switch
- É necessário fazer o coletor de lixo funcionar completamente
- É necessário resolver o problema dos callbacks em C
Conclusão
- Por causa do NDA, não é possível divulgar os detalhes do trabalho, mas o que é possível está sendo publicado
- Pedido de apoio via Patreon, GitHub e Ko-Fi
Resumo do GN⁺
- Este texto trata do processo e dos desafios de portar o runtime de Common Lisp para o Nintendo Switch
- Muitas dificuldades técnicas surgem por causa do sistema operacional proprietário e das restrições de hardware do Switch
- Problemas com coletor de lixo, multithreading e compilação em tempo de execução são os principais desafios
- Este projeto oferece informações úteis para desenvolvedores de Common Lisp e de jogos
1 comentários
Comentários do Hacker News
Testei desenvolvimento de jogos em Common Lisp usando Trial por algumas semanas, e foi uma experiência muito divertida
SBCL é uma implementação de linguagem excelente, e eu queria experimentar desenvolvimento em CL para um console de jogos "de verdade"
Obrigado ao autor por escrever um texto interessante e detalhado
Fico curioso sobre o motivo de usar o SDK oficial
Comprei Kandria
SBCL - "Steel Bank Common Lisp"
O trabalho dela é impressionante
Seria bom se Nintendo e Sony apoiassem esforços assim
Um pouco fora do assunto, mas portar o Yuzu para o Nintendo Switch seria impressionante
É exatamente por isso que venho ao HN