1 poin oleh GN⁺ 2024-09-14 | 1 komentar | Bagikan ke WhatsApp

Status saat ini

  • Saat ini porting telah selesai sehingga runtime dan compiler SBCL dapat dijalankan di Nintendo Switch
  • Antarmuka dengan shared library juga dimungkinkan, dan berbagai library portabilitas sistem operasi juga telah selesai di-porting
  • Namun, terjadi crash saat garbage collector SBCL bekerja
  • Output audio tidak tersedia, ada masalah pada mekanisme callback C
  • Masalah terkait performa juga diperkirakan akan muncul

Gambaran umum

  • Switch menggunakan chip ARM64 Cortex-A57 dan RAM 4GB, serta berjalan di sistem operasi mikrokernel proprietari
  • SBCL sudah memiliki port ARM64 Linux, sehingga masalah pembuatan kode telah teratasi
  • Switch adalah satu-satunya konsol yang mendukung library grafis OpenGL, sehingga memudahkan porting library grafis Trial
  • Untuk mulai pengembangan, development kit dibeli dari Nintendo of Europe dan SDK dipasang

Proses build SBCL

  1. build-config: mengumpulkan opsi konfigurasi build dan menampilkannya dalam format yang dapat dibaca
  2. make-host-1: membangun cross-compiler dengan compiler Lisp host
  3. make-target-1: membuat runtime C dengan compiler C target
  4. make-host-2: membangun sistem Lisp target
  5. make-target-2: memuat cold core di runtime target dan menyelesaikan bootstrap

Build untuk Switch

  • Switch bukan lingkungan PC dan tidak memiliki shell, command line, maupun compiler
  • Karena tidak dapat membuat halaman executable, kompilasi runtime tidak dimungkinkan
  • Sebagian besar kode bersifat independen terhadap platform dan dapat dikompilasi untuk ARM64
  • Menggunakan fasteval untuk menggantikan kompilasi runtime

Garbage collector

  • GC standar SBCL adalah "gencgc", yaitu garbage collector generasional
  • Dalam lingkungan multithreading, muncul masalah perpindahan objek
  • Di sistem Unix, thread diparkir menggunakan mekanisme sinyal, tetapi hal ini tidak memungkinkan di Switch
  • Menggunakan strategi "safepoints" agar thread memarkir dirinya sendiri

Pekerjaan selanjutnya

  • Membekukan CLOS sebanyak mungkin dan mengeksplorasi prekompilasi
  • Diperlukan optimasi tambahan karena prosesor Switch memiliki performa rendah
  • Garbage collector perlu dibuat berfungsi sepenuhnya
  • Masalah callback C perlu diselesaikan

Kesimpulan

  • Karena NDA, detail pekerjaan tidak dapat dipublikasikan, tetapi bagian yang memungkinkan sedang dipublikasikan
  • Meminta dukungan melalui Patreon, GitHub, dan Ko-Fi

Ringkasan GN⁺

  • Artikel ini membahas proses dan tantangan dalam mem-porting runtime Common Lisp ke Nintendo Switch
  • Banyak kesulitan teknis muncul akibat sistem operasi proprietari dan keterbatasan hardware Switch
  • Masalah utama mencakup garbage collector dan multithreading, serta kompilasi runtime
  • Proyek ini memberikan informasi yang berguna bagi pengembang Common Lisp dan pengembang game

1 komentar

 
GN⁺ 2024-09-14
Komentar Hacker News
  • Selama beberapa minggu saya menguji pengembangan game dengan Common Lisp menggunakan Trial, dan itu adalah pengalaman yang sangat menyenangkan

    • Keunggulan besarnya adalah hampir semua bagian bisa diubah saat game sedang berjalan
    • Semoga port ini berhasil
  • SBCL adalah implementasi bahasa yang luar biasa, dan saya memang ingin mencoba pengembangan CL untuk konsol game "sungguhan"

    • Saya terkejut mengetahui bahwa Shinmera sedang mengerjakan ini
    • Saat sempat melihat sedikit ke bagian internal SBCL, saya merasa ciut, jadi salut untuknya
    • Saya penasaran apakah SBCL (+threading/SDL2) berjalan di Raspberry Pi
  • Terima kasih kepada penulis karena telah menulis artikel yang menarik dan terperinci

    • Detail sedalam ini biasanya baru dipublikasikan setelah masa hidup konsol berakhir
    • Setiap kali membaca pekerjaan sedalam ini, saya jadi iri pada perangkat lunak membosankan yang saya pakai sepanjang hari
  • Saya penasaran kenapa menggunakan SDK resmi

    • Mungkin Nintendo tidak mengizinkan game yang dibuat dengan SDK pihak ketiga untuk diterbitkan secara resmi
  • Saya membeli Kandria

    • Saya tidak terlalu sering bermain game, tetapi upaya Shinmera memperluas batas dunia Lisp layak didukung
  • SBCL - "Steel Bank Common Lisp"

    • SBCL adalah compiler Common Lisp berperforma tinggi, serta open source/perangkat lunak bebas
    • Selain compiler dan sistem runtime untuk ANSI Common Lisp, SBCL juga menyediakan berbagai ekstensi seperti debugger, profiler statistik, alat code coverage, dan lain-lain
  • Pekerjaannya sungguh mengagumkan

    • Ini memberi saya kegembiraan besar sebagai seseorang yang suka memakai CL di mana-mana
  • Saya berharap Nintendo dan Sony mendukung upaya seperti ini

    • Memulai program seperti Github Accelerator adalah cara lain untuk menciptakan game (IP) bagi konsol
  • Sedikit di luar topik, tetapi akan luar biasa jika Yuzu di-port ke Nintendo Switch

  • Inilah tepatnya alasan saya datang ke HN

    • Salut untuk OP dan rekan-rekannya
    • Akan menjadi berkah besar jika Nintendo bisa sedikit lebih terbuka terhadap sistemnya