24/10/2026 · VietTechies · Biên tập

Trong giai đoạn 1990–1991, nhà khoa học máy tính Xavier Leroy thiết kế Caml Light, một bản triển khai mới của ngôn ngữ lập trình Caml, để chạy trên máy tính để bàn thông thường. Phiên bản tiền nhiệm, mang biệt danh “Heavy Caml”, dùng môi trường Lisp và đòi hỏi nhiều bộ nhớ lẫn năng lực xử lý, khiến ít người có điều kiện sử dụng.
Leroy xây dựng Caml Light xoay quanh một trình thông dịch nhỏ gọn viết bằng ngôn ngữ lập trình C. Trình thông dịch thực thi bytecode — các lệnh dành cho một máy trừu tượng — thay vì phụ thuộc vào môi trường Lisp có sẵn hoặc cần một bộ sinh mã máy riêng cho từng kiến trúc bộ xử lý. Kết hợp với hệ thống quản lý bộ nhớ hiệu quả do Damien Doligez đóng góp, thiết kế mới biến Caml thành một hệ thống dễ chuyển sang nhiều nền tảng, chạy tốt trên máy Mac và PC để bàn.
Gánh nặng của Heavy Caml
Caml bắt nguồn từ các công trình về họ ngôn ngữ lập trình ML (Meta Language). Đầu những năm 1980, nhóm Formel tại viện nghiên cứu Inria của Pháp, do Gérard Huet và Guy Cousineau dẫn dắt, bắt đầu xây dựng bản triển khai ML để phục vụ các công cụ hỗ trợ chứng minh. Trong giai đoạn 1984–1987, Pierre-Louis Curien, Ascánder Suárez và Guy Cousineau phát triển Caml V3.1. Hệ thống biên dịch Caml thành bytecode để Categorical Abstract Machine (CAM) thông dịch. Đây là một mô hình thực thi dựa trên logic tổ hợp phạm trù. Ascánder Suárez xây dựng bản triển khai bằng LeLisp, và Inria phát hành hệ thống ra công chúng năm 1987.
Dù thu hút sự quan tâm đáng kể trong giới học thuật, Caml V3.1 vẫn khó được đưa vào sử dụng thực tế. Chạy trên cả một hệ thống Lisp khiến Caml tốn nhiều tài nguyên xử lý và đòi hỏi lượng bộ nhớ lớn. Bản triển khai ban đầu cũng chưa tích hợp khả năng biên dịch riêng từng phần, dù Pierre Weis và Michel Mauny đã bổ sung khả năng này sau khi Suárez rời đi năm 1988. Trong báo cáo về bản triển khai năm 1990, Leroy nhận định rằng việc chưa có bản triển khai ML cho máy vi tính là một rào cản chính đối với việc sử dụng ML rộng rãi hơn trong giáo dục.
Chọn bytecode và C
Khi bắt đầu thiết kế phiên bản thay thế vào năm 1990, Xavier Leroy đứng trước một lựa chọn căn bản về kiến trúc. Sinh mã hợp ngữ cho bộ xử lý đích mang lại hiệu năng cao, nhưng viết phần sinh mã máy của trình biên dịch cho từng kiến trúc bộ xử lý đầu những năm 1990 sẽ đòi hỏi công sức rất lớn. Thông dịch bytecode giúp hệ thống dễ chuyển sang nhiều nền tảng, đổi lại là chi phí xử lý khi thực thi.
Leroy dung hòa hai yêu cầu này bằng cách chia quá trình thực thi thành hai giai đoạn rõ ràng. Trình biên dịch (compiler) của Caml Light chuyển mã nguồn thành các lệnh bytecode. Để thực thi những lệnh đó trên máy đích, Leroy viết một trình thông dịch bằng C chuẩn. Dùng C chuẩn giúp môi trường chạy (runtime) dễ chuyển sang nhiều kiến trúc mà không phải viết bộ sinh mã máy mới cho từng bộ xử lý.
Quản lý bộ nhớ và bộ máy thực thi
Ngôn ngữ lập trình hàm tạo ra rất nhiều cấu trúc dữ liệu tồn tại trong thời gian ngắn, nên quản lý bộ nhớ tự động có vai trò quan trọng đối với hiệu năng. Trong Caml Light, Damien Doligez đóng góp một hệ thống cấp phát bộ nhớ và thu gom rác hiệu quả. Bộ quản lý bộ nhớ hoạt động trực tiếp trong runtime viết bằng C, giữ mức sử dụng bộ nhớ thấp và tránh được chi phí xử lý nặng nề của hệ thống dựa trên Lisp trước đây.
Lệnh chạy chương trình mang tên camlrun trở thành thành phần cốt lõi của nền tảng. Lệnh này bao gồm ba thành phần chính: trình thông dịch thực thi các lệnh bytecode đã biên dịch, bộ cấp phát bộ nhớ và thu gom rác, cùng một tập hợp hàm cơ sở viết bằng C cho các thao tác hệ thống cấp thấp như nhập và xuất. Các tệp thực thi bytecode do compiler tạo ra có thể tự khởi chạy camlrun, nhờ đó lập trình viên có thể chạy chúng như các chương trình thông thường.
Caml Light vẫn tương thích ngược gần như hoàn toàn với Caml trước đó, trong khi chỉ dùng một phần nhỏ tài nguyên tính toán. Nhờ giảm yêu cầu phần cứng, bản triển khai mới cho phép Caml chạy trực tiếp trên máy tính để bàn, trong đó có các hệ thống Macintosh và PC thời ấy.
Từ lớp học đến các hệ thống hiện đại
Kiến trúc gọn nhẹ đã góp phần đưa Caml trở thành công cụ giáo dục được sử dụng rộng rãi. Caml Light tiếp tục được dùng trong giảng dạy suốt nhiều năm, đặc biệt ở các lớp dự bị khoa học tại Pháp (classes préparatoires scientifiques).
Hệ thống tiếp tục phát triển trong suốt những năm 1990. Năm 1995, Leroy giới thiệu Caml Special Light, kết hợp ngữ nghĩa rõ ràng của ngôn ngữ với một compiler sinh mã máy có khả năng tối ưu hóa. Năm 1996, việc tích hợp hệ thống kiểu hướng đối tượng tạo nên Objective Caml, được chính thức đổi tên thành OCaml vào năm 2011. OCaml về sau thay thế Caml Light và hỗ trợ cả biên dịch thành bytecode dễ chuyển giữa các nền tảng lẫn biên dịch thành mã máy.
Bài học về kiến trúc
Caml Light gợi ra một câu hỏi thực tế cho mọi runtime cần chạy trên nhiều nền tảng: phần nào phải hiểu bộ xử lý đích, và phần nào có thể giữ nguyên giữa các máy?
Leroy giao việc thực thi bytecode cho một trình thông dịch viết bằng C, còn Doligez cung cấp bộ quản lý bộ nhớ. Khi đó, một compiler C trên máy đích có thể biên dịch runtime. Bằng cách kết hợp bytecode với một runtime C nhỏ gọn, họ đưa Caml đến những máy tính để bàn có cấu hình khiêm tốn hơn và góp phần mở rộng việc sử dụng ngôn ngữ này trong giáo dục và nghiên cứu.
Bài liên quan
Đọc bằng ngôn ngữ khác: English
Nguồn
- A History of OCaml
- Caml Light, INRIA
- Các phần mềm của Xavier Leroy
- The Runtime System (camlrun), Caml Light Manual
- Các công trình chọn lọc của Xavier Leroy
- Ảnh đại diện: David Van Horn; Wikimedia Commons; CC BY 2.0 (đã chỉnh sửa từ ảnh gốc)
