Mevcut durum
- Şu anda SBCL çalışma zamanı ve derleyicisi Nintendo Switch üzerinde çalışacak şekilde port edildi
- Paylaşımlı kütüphanelerle arayüz de mümkün ve çeşitli işletim sistemi taşınabilirlik kütüphaneleri de port edildi
- Ancak SBCL’nin çöp toplayıcısı çalıştığında çökme meydana geliyor
- Ses çıkışı yok, C callback mekanizmasında sorun var
- Performansla ilgili sorunlar da bekleniyor
Genel bakış
- Switch, ARM64 Cortex-A57 çipi ve 4 GB RAM kullanıyor ve özel bir mikrokernel işletim sistemi üzerinde çalışıyor
- SBCL’nin zaten bir ARM64 Linux portu olduğundan kod üretimi sorunu çözülmüş durumda
- Switch, OpenGL grafik kütüphanesini destekleyen tek konsol olduğundan Trial’ın grafik kütüphanesini port etmek kolaylaşıyor
- Geliştirmeye başlamak için Nintendo of Europe’dan geliştirme kiti satın alınıp SDK kuruldu
SBCL derleme süreci
build-config: Derleme yapılandırma seçeneklerini toplayıp okunabilir bir biçimde çıktılar
make-host-1: Ana makine Lisp derleyicisiyle çapraz derleyiciyi derler
make-target-1: Hedef C derleyicisiyle C çalışma zamanını oluşturur
make-host-2: Hedef Lisp sistemini derler
make-target-2: Hedef çalışma zamanında cold core’u yükleyip bootstrap’i tamamlar
Switch için derleme
- Switch bir PC ortamı değil; kabuk, komut satırı ve derleyici yok
- Yürütülebilir sayfalar oluşturulamadığı için çalışma zamanında derleme yapılamıyor
- Kodun büyük kısmı platformdan bağımsız ve ARM64 için derlenebiliyor
- Çalışma zamanı derlemesinin yerine
fasteval kullanılıyor
Çöp toplayıcı
- SBCL’nin standart GC’si "gencgc" olup nesil tabanlı bir çöp toplayıcıdır
- Çok iş parçacıklı ortamda nesne taşıma sorunu ortaya çıkıyor
- Unix sistemlerinde iş parçacıklarını park etmek için sinyal mekanizması kullanılıyor, ancak Switch’te bu mümkün değil
- Bunun yerine iş parçacıklarının kendilerini park etmesini sağlayan "safepoints" stratejisi kullanılıyor
Gelecek çalışmalar
- CLOS’u mümkün olduğunca sabitlemek ve önceden derleme seçeneklerini araştırmak
- Switch’in düşük performanslı işlemcisi nedeniyle ek optimizasyon gerekli
- Çöp toplayıcının tamamen çalışır hale getirilmesi gerekiyor
- C callback sorununun çözülmesi gerekiyor
Sonuç
- NDA nedeniyle yapılan çalışmaların tamamı açıklanamıyor, ancak mümkün olan kısımlar paylaşılmaya devam ediliyor
- Patreon, GitHub ve Ko-Fi üzerinden destek isteniyor
GN⁺ özeti
- Bu yazı, Common Lisp çalışma zamanının Nintendo Switch’e port edilme sürecini ve karşılaşılan zorlukları ele alıyor
- Switch’in özel işletim sistemi ve donanım kısıtları nedeniyle çok sayıda teknik zorluk ortaya çıkıyor
- Çöp toplayıcı ve çok iş parçacıklılık sorunları ile çalışma zamanı derleme problemi başlıca zorluklar arasında yer alıyor
- Bu proje, Common Lisp geliştiricileri ve oyun geliştiricileri için faydalı bilgiler sunuyor
1 yorum
Hacker News yorumu
Birkaç haftadır Trial kullanarak Common Lisp ile oyun geliştirmeyi test ettim ve oldukça keyifli bir deneyimdi
SBCL harika bir dil implementasyonu ve "gerçek" bir oyun konsolu için CL geliştirmeyi denemek istiyordum
Yazara ilginç ve ayrıntılı bir yazı yazdığı için teşekkürler
Resmî SDK'nin neden kullanıldığını merak ediyorum
Kandria'yı satın aldım
SBCL - "Steel Bank Common Lisp"
Onun çalışması hayranlık verici
Nintendo ve Sony'nin bu tür çabaları desteklemesini isterdim
Konudan biraz sapıyor ama Yuzu'nun Nintendo Switch'e port edilmesi şaşırtıcı olurdu
HN'ye gelme nedenim tam da bu tür şeyler