वर्तमान स्थिति
- फिलहाल SBCL runtime और compiler को Nintendo Switch पर चलाने लायक पोर्ट किया जा चुका है
- shared libraries के साथ interface भी संभव है, और विभिन्न operating system portability libraries भी पोर्ट की जा चुकी हैं
- लेकिन SBCL का garbage collector काम करते समय crash हो जाता है
- audio output उपलब्ध नहीं है, और C callback mechanism में समस्या है
- performance से जुड़ी समस्याएँ भी अपेक्षित हैं
अवलोकन
- Switch में ARM64 Cortex-A57 chip और 4GB RAM है, और यह एक proprietary microkernel operating system पर चलता है
- SBCL के पास पहले से ARM64 Linux port है, इसलिए code generation की समस्या हल हो चुकी है
- Switch OpenGL graphics library को support करने वाला एकमात्र console है, इसलिए Trial की graphics library को पोर्ट करना आसान है
- development शुरू करने के लिए Nintendo of Europe से development kit खरीदी गई और SDK install किया गया
SBCL build प्रक्रिया
build-config: build configuration options को इकट्ठा करके पढ़ने योग्य format में output करता है
make-host-1: host Lisp compiler से cross compiler build करता है
make-target-1: target C compiler से C runtime बनाता है
make-host-2: target Lisp system build करता है
make-target-2: target runtime में cold core load करके bootstrap पूरा करता है
Switch के लिए build
- Switch PC environment नहीं है, और इसमें shell, command line, या compiler नहीं है
- executable pages नहीं बनाए जा सकते, इसलिए runtime compilation संभव नहीं है
- अधिकांश code platform-independent है और ARM64 के लिए compile किया जा सकता है
- runtime compilation के विकल्प के रूप में
fasteval का उपयोग किया गया है
garbage collector
- SBCL का standard GC
gencgc है, जो एक generational garbage collector है
- multithreading environment में object movement की समस्या होती है
- Unix systems में threads को park करने के लिए signal mechanism का उपयोग किया जाता है, लेकिन Switch पर यह संभव नहीं है
safepoints strategy का उपयोग किया गया है ताकि threads खुद को park कर सकें
आगे का काम
- CLOS को जितना संभव हो fix करना और precompilation की खोज करना
- Switch के low-performance processor के कारण अतिरिक्त optimization की जरूरत है
- garbage collector का पूरी तरह काम करना जरूरी है
- C callback समस्या को हल करना जरूरी है
निष्कर्ष
- NDA के कारण काम का पूरा विवरण सार्वजनिक नहीं किया जा सकता, लेकिन जो संभव है वह साझा किया जा रहा है
- Patreon, GitHub, और Ko-Fi के माध्यम से समर्थन का अनुरोध किया गया है
GN⁺ का सार
- यह लेख Common Lisp runtime को Nintendo Switch पर पोर्ट करने की प्रक्रिया और चुनौतियों पर केंद्रित है
- Switch के proprietary operating system और hardware constraints के कारण कई तकनीकी कठिनाइयाँ सामने आती हैं
- garbage collector, multithreading, और runtime compilation से जुड़ी समस्याएँ मुख्य चुनौतियाँ हैं
- यह परियोजना Common Lisp developers और game developers के लिए उपयोगी जानकारी प्रदान करती है
1 टिप्पणियां
Hacker News टिप्पणियाँ
कुछ हफ्तों तक Trial का उपयोग करके Common Lisp में game development को टेस्ट किया, और यह बहुत ही आनंददायक अनुभव था
SBCL एक शानदार language implementation है, और मैं "असल" game console के लिए CL development आज़माना चाहता था
लेखक को इतना रोचक और विस्तृत लेख लिखने के लिए धन्यवाद
जिज्ञासा है कि official SDK का उपयोग क्यों किया गया
मैंने Kandria खरीद लिया
SBCL - "Steel Bank Common Lisp"
उनका काम हैरतअंगेज़ है
काश Nintendo और Sony ऐसे प्रयासों का समर्थन करते
थोड़ा विषय से हटकर, लेकिन Yuzu को Nintendo Switch पर port करना कमाल का होगा
मैं HN पर इसी तरह की चीज़ों के लिए आता हूँ