Clamiga: Một Bản Triển Khai Common Lisp Chạy Trên Amiga Của Bạn
Clamiga là một bản triển khai Common Lisp mới được xây dựng cho AmigaOS 3 cổ điển và MorphOS, với máy ảo bytecode di động, bộ thu gom rác nén, và JIT m68k. Nó khởi động với 0.5 MB heap và mang lại sự phát triển Lisp hiện đại cho phần cứng 68k.
Common Lisp nổi tiếng là cũ nhưng vẫn sống. Chuẩn ANSI có từ năm 1994, nhưng ngôn ngữ này vẫn có vẻ đi trước thời đại với CLOS, conditions, và macros. Nhưng nếu bạn là người đam mê Amiga, bạn đã gặp xui xẻo: không có bản triển khai lớn nào chạy trên 68k. Manfred Bergmann đã quyết định khắc phục điều đó với Clamiga, một bản triển khai Common Lisp được xây dựng cho gia đình Amiga.
Clamiga là một máy ảo bytecode tự chứa được viết bằng C di động. Nó chạy trên AmigaOS 3 cổ điển (m68k), MorphOS (PPC gốc), và cũng trên macOS và Linux để phát triển. Cái tên là sự kết hợp của CL (Common Lisp) và Amiga, và trong tiếng Tây Ban Nha/Bồ Đào Nha 'amiga' có nghĩa là bạn nữ—vì vậy nó là Lisp mà là bạn của bạn.
Tại Sao Lại Có Một Bản Triển Khai Khác?
Các bản triển khai Common Lisp hiện có hoặc gắn với kiến trúc hiện đại (SBCL, CCL) hoặc không được bảo trì (CLISP). Không có cái nào nhắm đến Amiga. Clamiga lấp đầy khoảng trống đó với thiết kế tôn trọng các ràng buộc của phần cứng 68k: giá trị gắn thẻ 32-bit, bộ thu gom rác nén, và bytecode không phụ thuộc kiến trúc.
Cách tiếp cận bytecode có nghĩa là cùng một Lisp biên dịch chạy trên cả 68k và PPC, và các tệp FASL tương thích byte giữa AmigaOS 3 và MorphOS. Lõi C di động cũng có nghĩa là cùng một hệ thống xây dựng và chạy trên macOS và Linux, làm cho việc phát triển trở nên thực tế.
Sống Với 4 MB
Bộ nhớ là mối quan tâm thường trực trên các Amiga cổ điển. Toàn bộ lõi của Clamiga—CLOS, conditions, numeric tower, format, loop—khởi động với khoảng 0.5 MB heap. Các chương trình đơn giản chạy với heap 1 MB; ASDF cần 11 MB; Quicklisp cộng với các thư viện cần 24 MB. Các vector byte đóng gói lưu trữ 1 byte mỗi phần tử thay vì giá trị gắn thẻ 4 byte, làm cho bộ đệm I/O và dữ liệu đồ họa nhỏ hơn 4 lần. I/O trình tự hàng loạt di chuyển toàn bộ khối mỗi lần gọi hệ điều hành, và các tệp FASL khởi động được biên dịch trước giảm thời gian khởi động nguội từ ~92 giây xuống ~9 giây trên 68020.
JIT m68k
Trên AmigaOS 68020+, Clamiga dịch các hàm bytecode sang mã m68k gốc tại thời điểm định nghĩa. JIT bao phủ số học số nguyên, rẽ nhánh, thao tác danh sách, truy cập struct, gọi hàm, closures, và hơn thế nữa. Các lệnh không được hỗ trợ sẽ quay lại trình thông dịch một cách minh bạch.
Các điểm chuẩn trên A4000/68040 mô phỏng cho thấy tăng tốc đáng kể cho mã tính toán nặng: vòng lặp fixnum nhanh hơn 20 lần, đọc struct-slot nhanh hơn 13 lần, số học chuỗi nhanh hơn 7.5 lần. Mã gọi hàm nhiều chỉ thấy 1.4 lần. Một bản demo đồ họa thực tế đạt 615 FPS với JIT so với 500 FPS bytecode—vẫn thấp hơn 1900 FPS của ACE BASIC, nhưng khoảng cách đó là cái giá của một ngôn ngữ động, có thu gom rác, giá trị gắn thẻ.
MorphOS và Quicklisp
Bản dựng MorphOS là một tệp nhị phân PPC gốc, không phải mô phỏng. Nó bỏ qua JIT (chỉ dành cho m68k) nhưng chạy VM di động đủ nhanh trên G4/G5 để làm cho Quicklisp trở nên thực tế. Clamiga đi kèm một lớp tương thích và các nhánh thư viện được bảo trì với các nhánh tính năng #+cl-amiga, nhằm mục đích đưa chúng lên thượng nguồn khi các khoảng trống API được đóng lại.
Clamiga là một nỗ lực nghiêm túc để mang một Lisp hiện đại đến một nền tảng retro. Nó không dành cho việc viết game nhanh, nhưng cho phát triển tương tác và học tập, nó là một lựa chọn hấp dẫn.
Khoảng cách còn lại là chi phí cấu trúc của một ngôn ngữ động, có thu gom rác, giá trị gắn thẻ, không phải codegen.
| Điểm chuẩn | Bytecode | JIT | Tăng tốc |
|---|---|---|---|
| sum-to | 400 ms | 20 ms | 20.0x |
| struct-loop | 260 ms | 20 ms | 13.0x |
| arith-chain | 300 ms | 40 ms | 7.5x |
| call-loop | 340 ms | 240 ms | 1.4x |
Thảo luận
0 bình luận
Hãy là người đầu tiên thảo luận.