1P by neo 2달전 | favorite | 댓글 1개

현재 상태

  • 현재 SBCL 런타임과 컴파일러를 Nintendo Switch에서 실행할 수 있도록 포팅 완료
  • 공유 라이브러리와의 인터페이스도 가능하며, 다양한 운영 체제 이식성 라이브러리도 포팅 완료
  • 그러나 SBCL의 가비지 컬렉터가 작동할 때 충돌 발생
  • 오디오 출력 불가, C 콜백 메커니즘 문제
  • 성능 관련 문제도 예상됨

개요

  • Switch는 ARM64 Cortex-A57 칩과 4GB RAM을 사용하며, 독점 마이크로커널 운영 체제에서 실행됨
  • SBCL은 이미 ARM64 Linux 포트를 가지고 있어 코드 생성 문제는 해결됨
  • Switch는 OpenGL 그래픽 라이브러리를 지원하는 유일한 콘솔로, Trial의 그래픽 라이브러리 포팅이 용이함
  • 개발을 시작하기 위해 Nintendo of Europe에서 개발 키트를 구입하고 SDK를 설치함

SBCL 빌드 과정

  1. build-config: 빌드 구성 옵션을 수집하여 읽을 수 있는 형식으로 출력
  2. make-host-1: 호스트 Lisp 컴파일러로 크로스 컴파일러 빌드
  3. make-target-1: 타겟 C 컴파일러로 C 런타임 생성
  4. make-host-2: 타겟 Lisp 시스템 빌드
  5. make-target-2: 타겟 런타임에서 콜드 코어를 로드하고 부트스트랩 완료

Switch용 빌드

  • Switch는 PC 환경이 아니며, 셸, 명령줄, 컴파일러가 없음
  • 실행 가능한 페이지를 생성할 수 없으므로 런타임 컴파일 불가
  • 대부분의 코드는 플랫폼 독립적이며 ARM64로 컴파일 가능
  • fasteval을 사용하여 런타임 컴파일을 대체

가비지 컬렉터

  • SBCL의 표준 GC는 "gencgc"로, 세대별 가비지 컬렉터임
  • 멀티스레딩 환경에서 객체 이동 문제 발생
  • Unix 시스템에서는 신호 메커니즘을 사용하여 스레드를 주차하지만, Switch에서는 불가능
  • "safepoints" 전략을 사용하여 스레드가 자체적으로 주차하도록 함

향후 작업

  • CLOS를 가능한 한 많이 고정하고 사전 컴파일 탐색
  • Switch의 저성능 프로세서로 인해 추가 최적화 필요
  • 가비지 컬렉터 완전 작동 필요
  • C 콜백 문제 해결 필요

결론

  • NDA로 인해 작업 내용을 공개할 수 없지만, 가능한 부분은 공개 중
  • Patreon, GitHub, Ko-Fi를 통해 지원 요청

GN⁺의 정리

  • 이 글은 Common Lisp 런타임을 Nintendo Switch에 포팅하는 과정과 도전 과제를 다룸
  • Switch의 독점 운영 체제와 하드웨어 제약으로 인해 많은 기술적 어려움이 발생함
  • 가비지 컬렉터와 멀티스레딩 문제, 런타임 컴파일 문제 등이 주요 도전 과제임
  • 이 프로젝트는 Common Lisp 개발자와 게임 개발자에게 유용한 정보를 제공함
Hacker News 의견
  • 몇 주 동안 Trial을 사용하여 Common Lisp로 게임 개발을 테스트해보았고, 매우 즐거운 경험이었음

    • 게임이 실행 중일 때 거의 모든 부분을 수정할 수 있는 점이 큰 장점임
    • 이 포트가 성공하기를 바람
  • SBCL은 훌륭한 언어 구현이며, "진짜" 게임 콘솔을 위해 CL 개발을 해보고 싶었음

    • Shinmera가 이 작업을 하고 있다는 사실에 놀랐음
    • SBCL의 내부를 잠깐 봤을 때 겁이 났었는데, 그에게 찬사를 보냄
    • SBCL(+스레딩/SDL2)이 Raspberry Pi에서 작동하는지 궁금함
  • 저자에게 흥미롭고 자세한 글을 써줘서 감사함

    • 이런 수준의 세부 사항은 보통 콘솔 수명이 끝난 후에야 공개됨
    • 이런 깊이 있는 작업을 읽을 때마다 내가 하루 종일 쓰는 단조로운 소프트웨어가 부러워짐
  • 공식 SDK를 사용한 이유가 궁금함

    • Nintendo가 3rd 파티 SDK로 만든 게임을 공식적으로 출판하지 못하게 하는 것일 수도 있음
  • Kandria를 구매했음

    • 게임을 많이 하지 않지만, Shinmera가 Lisp 세계의 경계를 넓히고 있는 것은 지지할 만한 일임
  • SBCL - "Steel Bank Common Lisp"

    • SBCL은 고성능 Common Lisp 컴파일러이며, 오픈 소스/무료 소프트웨어임
    • ANSI Common Lisp를 위한 컴파일러와 런타임 시스템 외에도 디버거, 통계 프로파일러, 코드 커버리지 도구 등 다양한 확장을 제공함
  • 그녀의 작업은 놀라움

    • CL을 여기저기 쓰는 것을 좋아하는 나에게 큰 기쁨을 줌
  • Nintendo와 Sony가 이런 노력을 지원했으면 좋겠음

    • Github Accelerator와 같은 프로그램을 시작하는 것이 콘솔을 위한 게임(IP)을 만드는 또 다른 방법임
  • 약간 주제에서 벗어나지만, Yuzu를 Nintendo Switch로 포팅하는 것이 놀라울 것임

  • HN에 오는 이유가 바로 이런 것임

    • OP와 그의 동료에게 찬사를 보냄
    • Nintendo가 시스템에 대해 조금 더 개방적일 수 있다면 큰 축복일 것임