1 pontos por GN⁺ 2024-09-14 | 1 comentários | Compartilhar no WhatsApp

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

  1. build-config: coleta as opções de configuração da build e as imprime em um formato legível
  2. make-host-1: faz a build do compilador cruzado com o compilador Lisp do host
  3. make-target-1: gera o runtime em C com o compilador C do alvo
  4. make-host-2: faz a build do sistema Lisp do alvo
  5. 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

 
GN⁺ 2024-09-14
Comentários do Hacker News
  • Testei desenvolvimento de jogos em Common Lisp usando Trial por algumas semanas, e foi uma experiência muito divertida

    • A grande vantagem é poder modificar quase tudo enquanto o jogo está em execução
    • Espero que esse port seja bem-sucedido
  • SBCL é uma implementação de linguagem excelente, e eu queria experimentar desenvolvimento em CL para um console de jogos "de verdade"

    • Fiquei surpreso ao saber que a Shinmera está fazendo esse trabalho
    • Quando dei uma olhada rápida no interior do SBCL, fiquei assustado, então meus parabéns para ele
    • Fico curioso se o SBCL (+threading/SDL2) funciona no Raspberry Pi
  • Obrigado ao autor por escrever um texto interessante e detalhado

    • Esse nível de detalhe normalmente só é divulgado depois que a vida útil do console termina
    • Sempre que leio trabalhos tão profundos assim, fico com inveja do software monótono que uso o dia todo
  • Fico curioso sobre o motivo de usar o SDK oficial

    • Pode ser que a Nintendo não permita publicar oficialmente jogos feitos com SDKs de terceiros
  • Comprei Kandria

    • Não jogo muito, mas apoiar a Shinmera enquanto ela expande as fronteiras do mundo Lisp é algo que vale a pena
  • SBCL - "Steel Bank Common Lisp"

    • SBCL é um compilador Common Lisp de alto desempenho e software livre/de código aberto
    • Além do compilador e do sistema de runtime para ANSI Common Lisp, também oferece várias extensões, como depurador, profiler estatístico, ferramenta de cobertura de código e mais
  • O trabalho dela é impressionante

    • Como alguém que gosta de usar CL em todo tipo de lugar, isso me dá muita alegria
  • Seria bom se Nintendo e Sony apoiassem esforços assim

    • Iniciar programas como o GitHub Accelerator seria outra forma de criar jogos (IP) para consoles
  • Um pouco fora do assunto, mas portar o Yuzu para o Nintendo Switch seria impressionante

  • É exatamente por isso que venho ao HN

    • Parabéns ao OP e à equipe dele
    • Seria uma grande bênção se a Nintendo pudesse ser um pouco mais aberta em relação ao sistema