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
build-config: mengumpulkan opsi konfigurasi build dan menampilkannya dalam format yang dapat dibaca
make-host-1: membangun cross-compiler dengan compiler Lisp host
make-target-1: membuat runtime C dengan compiler C target
make-host-2: membangun sistem Lisp target
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
Komentar Hacker News
Selama beberapa minggu saya menguji pengembangan game dengan Common Lisp menggunakan Trial, dan itu adalah pengalaman yang sangat menyenangkan
SBCL adalah implementasi bahasa yang luar biasa, dan saya memang ingin mencoba pengembangan CL untuk konsol game "sungguhan"
Terima kasih kepada penulis karena telah menulis artikel yang menarik dan terperinci
Saya penasaran kenapa menggunakan SDK resmi
Saya membeli Kandria
SBCL - "Steel Bank Common Lisp"
Pekerjaannya sungguh mengagumkan
Saya berharap Nintendo dan Sony mendukung upaya seperti ini
Sedikit di luar topik, tetapi akan luar biasa jika Yuzu di-port ke Nintendo Switch
Inilah tepatnya alasan saya datang ke HN