1 điểm bởi GN⁺ 2024-09-14 | 1 bình luận | Chia sẻ qua WhatsApp

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

  1. 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
  2. make-host-1: build cross-compiler bằng Lisp compiler của host
  3. make-target-1: tạo runtime C bằng C compiler của target
  4. make-host-2: build hệ thống Lisp của target
  5. 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

 
GN⁺ 2024-09-14
Ý 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ị

    • Một ưu điểm lớn là có thể sửa gần như mọi thứ khi game đang chạy
    • Hy vọng bản port này sẽ thành công
  • 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ụ"

    • Tôi ngạc nhiên khi biết Shinmera đang làm việc này
    • Khi lướt qua phần nội bộ của SBCL, tôi đã thấy hơi sợ, nên xin gửi lời ngưỡng mộ đến anh ấy
    • Tôi tự hỏi liệu SBCL (+threading/SDL2) có chạy được trên Raspberry Pi không
  • Cảm ơn tác giả vì đã viết một bài thú vị và chi tiết

    • Mức độ chi tiết như thế này thường chỉ được công bố sau khi vòng đời của console kết thúc
    • Mỗi lần đọc những công việc chuyên sâu như thế này, tôi lại thấy ghen tị với thứ phần mềm đơn điệu mà mình dùng cả ngày
  • Tôi tò mò vì sao lại dùng SDK chính thức

    • Có thể Nintendo không cho phép xuất bản chính thức các game được làm bằng SDK của bên thứ ba
  • Tôi đã mua Kandria

    • Tôi không chơi game nhiều, nhưng việc Shinmera đang mở rộng ranh giới của thế giới Lisp là điều đáng để ủng hộ
  • SBCL - "Steel Bank Common Lisp"

    • SBCL là một trình biên dịch Common Lisp hiệu năng cao, đồng thời là phần mềm mã nguồn mở/phần mềm tự do
    • Ngoài trình biên dịch và hệ thống runtime cho ANSI Common Lisp, nó còn cung cấp nhiều phần mở rộng như debugger, statistical profiler, công cụ code coverage, v.v.
  • Công việc của cô ấy thật đáng kinh ngạc

    • Với một người thích dùng CL khắp nơi như tôi, điều này mang lại niềm vui lớn
  • Tôi ước Nintendo và Sony sẽ hỗ trợ những nỗ lực như thế này

    • Khởi động một chương trình giống Github Accelerator cũng là một cách khác để tạo ra game (IP) cho console
  • 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

    • Xin gửi lời ngưỡng mộ đến OP và cộng sự của anh ấy
    • Sẽ là một phước lành lớn nếu Nintendo có thể cởi mở hơn một chút với hệ thống của họ