Trạng thái hiện tại
- Đã hoàn tất việc port runtime và compiler của SBCL để có thể chạy trên Nintendo Switch
- Cũng đã có thể giao tiếp với thư viện dùng chung, và nhiều thư viện chuyển đổi tính tương thích hệ điều hành cũng đã được port xong
- Tuy nhiên, xảy ra crash khi bộ gom rác của SBCL hoạt động
- Không thể xuất âm thanh, có vấn đề với cơ chế callback C
- Cũng dự kiến sẽ có các vấn đề liên quan đến hiệu năng
Tổng quan
- Switch sử dụng chip ARM64 Cortex-A57 và RAM 4GB, chạy trên một hệ điều hành microkernel độc quyền
- SBCL đã có bản port ARM64 Linux nên vấn đề sinh mã đã được giải quyết
- Switch là console duy nhất hỗ trợ thư viện đồ họa OpenGL, nên việc port thư viện đồ họa của Trial trở nên dễ dàng
- Để bắt đầu phát triển, tác giả đã mua bộ dev kit từ Nintendo of Europe và cài đặt SDK
Quy trình build SBCL
build-config: thu thập các tùy chọn cấu hình build và xuất chúng dưới dạng dễ đọc
make-host-1: build cross-compiler bằng Lisp compiler của host
make-target-1: tạo runtime C bằng C compiler của target
make-host-2: build hệ thống Lisp của target
make-target-2: nạp cold core trong runtime của target và hoàn tất bootstrap
Build cho Switch
- Switch không phải môi trường PC, không có shell, command line hay compiler
- Không thể tạo các trang thực thi nên không thể biên dịch lúc chạy
- Phần lớn mã là độc lập nền tảng và có thể biên dịch cho ARM64
- Dùng
fasteval để thay thế cho biên dịch lúc chạy
Bộ gom rác
- GC tiêu chuẩn của SBCL là "gencgc", một bộ gom rác theo thế hệ
- Phát sinh vấn đề di chuyển đối tượng trong môi trường đa luồng
- Trên các hệ thống Unix, cơ chế tín hiệu được dùng để tạm dừng các luồng, nhưng điều đó không khả thi trên Switch
- Sử dụng chiến lược "safepoints" để các luồng tự tạm dừng
Công việc tiếp theo
- Cố định CLOS nhiều nhất có thể và tìm hướng tiền biên dịch
- Cần tối ưu thêm do bộ xử lý hiệu năng thấp của Switch
- Cần làm cho bộ gom rác hoạt động hoàn chỉnh
- Cần giải quyết vấn đề callback C
Kết luận
- Do NDA, không thể công khai toàn bộ nội dung công việc, nhưng những phần có thể thì đang được công bố
- Kêu gọi hỗ trợ qua Patreon, GitHub, Ko-Fi
Tóm tắt của GN⁺
- Bài viết này nói về quá trình port runtime Common Lisp sang Nintendo Switch và những thách thức gặp phải
- Nhiều khó khăn kỹ thuật phát sinh do hệ điều hành độc quyền và các giới hạn phần cứng của Switch
- Các vấn đề về bộ gom rác, đa luồng và biên dịch lúc chạy là những thách thức chính
- Dự án này cung cấp thông tin hữu ích cho các nhà phát triển Common Lisp và nhà phát triển game
1 bình luận
Ý kiến trên Hacker News
Trong vài tuần, tôi đã dùng Trial để thử phát triển game bằng Common Lisp, và đó là một trải nghiệm rất thú vị
SBCL là một triển khai ngôn ngữ tuyệt vời, và tôi đã muốn thử phát triển CL cho một máy chơi game console "thực thụ"
Cảm ơn tác giả vì đã viết một bài thú vị và chi tiết
Tôi tò mò vì sao lại dùng SDK chính thức
Tôi đã mua Kandria
SBCL - "Steel Bank Common Lisp"
Công việc của cô ấy thật đáng kinh ngạc
Tôi ước Nintendo và Sony sẽ hỗ trợ những nỗ lực như thế này
Hơi lạc đề một chút, nhưng việc port Yuzu sang Nintendo Switch sẽ rất đáng kinh ngạc
Đây chính là lý do tôi đến với HN