SLED: Trình thông dịch Lisp thuần biểu tượng chạy trên DOS
SLED (Schemy Lisp en DOS) là một trình thông dịch Lisp thuần biểu tượng, lấy cảm hứng từ Scheme, được thiết kế để chạy trên các hệ điều hành DOS như FreeDOS hoặc MS-DOS, cũng như trên các trình giả lập như DOSBox. Bài viết này khám phá các tính năng chính, cấu trúc dữ liệu, và khả năng của SLED — một dự án thú vị cho những ai đam mê lập trình hàm và công nghệ cổ điển.
SLED: Trình thông dịch Lisp thuần biểu tượng chạy trên DOS
SLED (Schemy Lisp en DOS) là một trình thông dịch Lisp thuần biểu tượng, lấy cảm hứng từ Scheme, được thiết kế để chạy trên các hệ điều hành DOS như FreeDOS hoặc MS-DOS, cũng như trên các trình giả lập DOSBox. Dự án này mang đến một trải nghiệm lập trình cổ điển, kết hợp sự tối giản của Lisp với môi trường dòng lệnh đặc trưng của DOS.
Tổng quan về SLED
SLED được phát triển dựa trên Kilo LISP, nhưng đã được tinh giản bằng cách loại bỏ một số tính năng (như macro) và bổ sung những cải tiến khác. Kết quả là một hệ thống được phân loại là Ur-Lisp — một phiên bản Lisp cơ bản, tập trung vào các khái niệm cốt lõi. Dự án hỗ trợ chạy trên cả DOS thật lẫn các trình giả lập phổ biến như DOSBox, DOSBox-X, và DOSBox-Staging.
Cấu trúc dữ liệu cốt lõi
SLED chỉ có hai kiểu dữ liệu cơ bản: Cặp (Pairs) và Nguyên tử (Atoms). Nguyên tử bao gồm các Biểu tượng (Symbols) — tên duy nhất tối đa 16 ký tự — cùng với Closures (hàm) và một số Biểu tượng đặc biệt như nil (danh sách rỗng).
Một điểm thú vị là SLED không hỗ trợ kiểu số. Thay vào đó, các số tự nhiên được mô phỏng bằng danh sách, ví dụ '() là số 0, '(nil) là số 1, '(nil nil) là số 2 — tương tự như số đếm von Neumann. Các hàm inc, dec, và zero? giúp thực hiện các phép đếm.
Cách viết mã trong SLED
Trong Lisp, dữ liệu chưa được quote sẽ được đánh giá như mã. Các biểu thức có thể được định nghĩa qua define, và hàm được tạo bằng lambda. Đệ quy là phương pháp chính thay cho vòng lặp, với sự hỗ trợ của trampoline evaluator và tối ưu hóa tail-call (TCO) để tránh tràn stack.
LISP dựa vào đệ quy thay vì lặp. Đệ quy đề cập đến việc một hàm gọi chính nó.
Chạy SLED trên DOS
SLED là một ứng dụng DOS thực thụ. Khi khởi động, nó sẽ tải thư viện chuẩn sled.scm — phải nằm cùng thư mục với tệp thực thi SLED.EXE. Người dùng có thể tương tác qua REPL với dấu nhắc sled>, hoặc chạy tệp kịch bản với các tùy chọn dòng lệnh:
sled /?— hiển thị trang trợ giúpsled code.scm— tải tệp trước khi vào REPLsled /B code.scm— chế độ batch, thoát sau khi thực thisled /I code.scm— chế độ bỏ qua lỗi
Tài nguyên và hạn chế
Là một chương trình DOS chạy ở chế độ thực (real-mode), SLED có các giới hạn cụ thể: heap có 12288 nút, bảng biểu tượng có 2048 ký tự. Thư viện chuẩn tiêu thụ khoảng 5% tài nguyên này. Người dùng cũng cần tuân thủ quy tắc tên tệp DOS 8.3 và tránh các ký tự mở rộng (như phím mũi tên trong REPL) vì chúng không được hỗ trợ.
Kết luận
SLED là một dự án thú vị cho những ai muốn khám phá lập trình Lisp trong môi trường DOS cổ điển, hoặc tìm hiểu cách một trình thông dịch đơn giản hoạt động. Dự án được cấp phép 0BSD (Zero-Clause BSD), cho phép sử dụng tự do. Bạn có thể tải xuống bản phát hành hoặc xem mã nguồn trên kho lưu trữ chính thức của dự án.