- Đây là dự án được thiết kế để chạy mã Scheme trên WebAssembly (trình duyệt hỗ trợ GC), bao gồm trình biên dịch Scheme→Wasm và bộ công cụ Wasm hoàn chỉnh
- Được xây dựng dựa trên GNU Guile, không có phụ thuộc bổ sung và có cấu trúc tự chứa (toolchain self-contained)
- Có thể kiểm thử nhị phân Hoot thông qua trình thông dịch Wasm trong môi trường Guile REPL
- Phiên bản mới nhất là v0.7.0, kèm các liên kết tới tệp phát hành, chữ ký, tài liệu và thông báo chính thức
- Đây là một nỗ lực mở rộng ngôn ngữ Scheme lên môi trường web, cho thấy tiềm năng mở rộng hệ sinh thái Lisp trên trình duyệt
Tổng quan về Hoot
- Hoot là dự án do Spritely Institute phát triển, cho phép chạy mã Scheme trên WebAssembly (Wasm)
- Hoạt động trên các trình duyệt web hỗ trợ tính năng GC (Garbage Collection)
- Bao gồm trình biên dịch chuyển mã Scheme sang Wasm và bộ công cụ hoàn chỉnh cho phát triển liên quan đến Wasm
- Được xây dựng trên Guile và không có thêm phụ thuộc bên ngoài
- Bộ công cụ tự hoàn chỉnh và tích hợp trình thông dịch Wasm, cho phép kiểm thử trực tiếp nhị phân Hoot trong Guile REPL
Phát hành và phát triển
- Bản phát hành mới nhất là phiên bản v0.7.0, cung cấp liên kết tới tệp tải xuống, chữ ký, tài liệu và thông báo chính thức
- Tệp phát hành:
guile-hoot-0.7.0.tar.gz
- Đồng thời cung cấp tệp tài liệu, tệp chữ ký và trang tin tức liên quan
- Phiên bản phát triển có thể truy cập tại kho Codeberg (
https://codeberg.org/spritely/hoot)
Tài liệu liên quan
- Có nhiều bài viết về các trường hợp sử dụng xây dựng trang web tương tác với Hoot và chạy Scheme trong trình duyệt
- “Building interactive web pages with Hoot”
- “Scheme in the browser: A Hoot of a tale”
- “Lisp Game Jam - ‘Wireworld’ - Hoot's low level Wasm tooling in action”
- Có thể xem thêm thông tin từ góc nhìn nhà phát triển qua blog của Andy Wingo và video phỏng vấn của System Crafters
1 bình luận
Ý kiến trên Hacker News
Thật thú vị khi thấy việc phát triển Guile gần đây trở nên sôi động hơn
Tuy vậy cũng có chút tiếc nuối vì có vẻ khá nhiều người từ cộng đồng Racket trước đây đang chuyển sang đây
Cộng đồng bị chia tách là điều đáng buồn, và Guile vẫn cho cảm giác còn thua Racket về hiệu năng lẫn độ đa dạng thư viện
Benchmark có thể cho ra kết quả khác, nhưng có lẽ vẫn nên tự kiểm chứng
Nhanh tới mức có thể chạy game ở 60fps, và GC cũng hiếm khi xảy ra
Hệ sinh thái thư viện cũng đã cải thiện rất nhiều so với trước đây
(wiki về Missing Stair)
Sau vụ đó, việc cộng đồng bị chia rẽ có vẻ là kết quả khó tránh khỏi
Ví dụ, có thể dùng Overeasy để viết test, và McFly để viết tài liệu inline
Tâm lý ngành gần đây trở nên khó khăn hơn sau AI code generation và sự sụp đổ của đầu tư VC cũng có tác động
Bản thân dự án thì rất hay, nhưng tôi vẫn nghĩ giá mà họ dùng một ngôn ngữ khác thay vì Guile
Có thể dễ dàng tạo reproducible build thông qua Guix
Tuy nhiên, các vấn đề liên quan đến debugger, macro expander, và thư viện chuẩn R6RS vẫn còn tồn tại
Hỗ trợ multicore của Racket trước đây khá nặng, nhưng giờ có vẻ đã cải thiện nếu so với fibers/futures của Guile
Thật mừng khi lại thấy những nỗ lực kiểu này để compile sang WASM
Trước đây tôi cứ tưởng nhiệt đã nguội rồi, nhưng nếu ngày càng có nhiều ngôn ngữ như vậy thì sẽ rất tốt vì có thể tránh JavaScript
Dự án này khiến tôi nghĩ về định hướng tương lai của ngôn ngữ lập trình
Nếu AI trở thành bên viết code chủ đạo, ngôn ngữ có lẽ sẽ chuyển sang ưu tiên tính rõ ràng và giảm lỗi
Sẽ bớt thú vị hơn với con người, nhưng là loại code dễ chỉnh sửa hơn
Trong bối cảnh đó, những ngôn ngữ như Rust có lẽ sẽ đứng đầu bảng
Tuy nhiên tôi vẫn tò mò liệu một ngôn ngữ như Hoot có thể giành được chỗ đứng trong các lĩnh vực chuyên môn hay sẽ chỉ dừng ở mức ngôn ngữ cho dân chơi/hobby
Thật sự rất ngầu! Không biết liệu nó có thể chạy trên Cloudflare Workers không
Mong Guile sẽ hỗ trợ Windows tốt hơn một chút
repl.wasmcó dung lượng 1.6MiB nên có vẻ hơi lớn. Không biết ví dụtodothì sẽ là bao nhiêuVẫn chưa áp dụng tối ưu hóa wasm-opt
Hoot là một AOT compiler, nên trong REPL có thêm mã cho macro expander, hệ thống module runtime, interpreter, v.v.
Ví dụ thực tế là todo.wasm có kích thước khoảng 566K (143K khi nén), và còn bao gồm cả thuật toán diff virtual DOM
Với các tối ưu hóa bổ sung như giảm số biến cục bộ hoặc áp dụng đề xuất stack switching, có lẽ kích thước sẽ còn giảm thêm
Vấn đề liên quan được tổng hợp tại đây
woot (cảm thán ngắn)
Đây mới đúng là hình hài mà JavaScript vốn hướng tới
Nếu Netscape không ép dùng cú pháp kiểu C/Java, thì có lẽ nó đã trở thành một ngôn ngữ như thế này