Let-go: Ngôn ngữ lập trình giống Clojure viết bằng Go, khởi động siêu nhanh chỉ trong 7ms

Công nghệ09 tháng 5, 2026·3 phút đọc

Let-go là một ngôn ngữ lập trình tương tự Clojure được viết hoàn toàn bằng Go. Nó có kích thước tệp nhị phân nhỏ (~10MB), thời gian khởi động lạnh cực nhanh (~7ms) và hỗ trợ biên dịch sang WebAssembly cũng như nhúng vào các ứng dụng Go.

Let-go: Ngôn ngữ lập trình giống Clojure viết bằng Go, khởi động siêu nhanh chỉ trong 7ms

Gần đây, cộng đồng lập trình viên đã chú ý đến một dự án mã nguồn mở thú vị mang tên let-go. Đây là một ngôn ngữ lập trình có cú pháp và tính năng rất giống Clojure, nhưng được viết hoàn toàn bằng ngôn ngữ Go.

Dự án này bắt đầu như một "trò đùa" thực tế vào năm 2021, khi tác giả muốn tìm cớ để viết Clojure trong khi làm việc với Go. Tuy nhiên, sau quá trình phát triển, let-go đã trở thành một công cụ khá hoàn chỉnh và mạnh mẽ.

Hiệu suất ấn tượng

Điểm nổi bật nhất của let-go nằm ở hiệu suất tối ưu:

  • Khởi động siêu nhanh: Thời gian khởi động lạnh (cold start) chỉ khoảng 7ms. Con số này nhanh hơn gấp 50 lần so với JVM và nhanh hơn gấp 3 lần so với Babashka.
  • Kích thước nhỏ gọn: Toàn bộ runtime được đóng gói trong một tệp nhị phân tĩnh (static binary) chỉ khoảng 10MB.
  • Hiệu suất xử lý: Trên các khối lượng công việc thuật toán, let-go có hiệu suất ngang ngửa với sci (được hỗ trợ bởi GraalVM).

Tính năng chính

Let-go được thiết kế để mang lại cảm giác như đang làm việc với Clojure thực thụ, nhưng tận dụng sự đơn giản của Go. Một số tính năng nổi bật bao gồm:

  • Tương thích cao: Khoảng 90-95% tương thích với JVM Clojure. Nó hỗ trợ macros, destructuring, protocols, records, multimethods, transducers, lazy seqs và các cấu trúc dữ liệu bền vững.
  • Công cụ phát triển: Đi kèm máy chủ nREPL, hỗ trợ các trình soạn thảo phổ biến như Calva (VS Code), CIDER (Emacs) và Conjure (Neovim).
  • Khả năng nhúng (Embedding): Có thể nhúng dễ dàng vào các chương trình Go. Các hàm, cấu trúc (structs) và kênh (channels) của Go có thể giao tiếp xuyên biên giới ngôn ngữ mà không gặp rắc rối.
  • Hỗ trợ WebAssembly (WASM): Cho phép biên dịch chương trình let-go thành các ứng dụng web tự chứa (self-contained HTML page) chạy trực tiếp trên trình duyệt.

Các trường hợp sử dụng

Nhờ tốc độ khởi động nhanh và kích thước nhỏ, let-go rất phù hợp cho:

  • Viết các công cụ dòng lệnh (CLI).
  • Xây dựng máy chủ web.
  • Viết script xử lý dữ liệu.
  • Lập trình hệ thống (tác giả đã sử dụng nó để viết một container runtime không cần daemon).
  • Chạy trên các hệ thống đặc thù như Plan9.

Hạn chế

Tuy nhiên, tác giả cũng lưu ý rằng let-go không phải là sự thay thế hoàn toàn (drop-in replacement) cho Clojure nói chung. Hiện tại, nó không hỗ trợ tải các tệp JAR, không có các API của Java và nhiều khả năng sẽ không chạy các dự án Clojure hiện có của bạn mà không cần sửa đổi.

Dưới capo, let-go sử dụng một trình biên dịch và máy ảo stack (stack VM) được viết tay cụ thể để chạy mã kiểu Clojure. Trình biên dịch có thể hoạt động ở chế độ AOT (Ahead-of-Time) để tạo ra các tệp bytecode di động hoặc các binary độc lập.

Nếu bạn đang tìm kiếm một ngôn ngữ họ Lisp với cú pháp Clojure nhưng muốn sự nhanh nhẹn của Go, let-go là một dự án rất đáng để trải nghiệm.

Chia sẻ:FacebookX
Nội dung tổng hợp bằng AI, mang tính tham khảo. Xem bài gốc ↗