Lập trình viên tạo ra Runtime lập trình cá nhân với Message Passing lấy cảm hứng từ Erlang và cú pháp Lisp

BigGo Editorial Team
Lập trình viên tạo ra Runtime lập trình cá nhân với Message Passing lấy cảm hứng từ Erlang và cú pháp Lisp

Một lập trình viên đã tạo ra VRS, một runtime lập trình cá nhân kết hợp các ý tưởng từ Erlang, Lisp và Unix thành một nền tảng thống nhất. Được xây dựng trong thời gian thực tập tại Recurse Center, hệ thống thử nghiệm này nhằm tạo ra trải nghiệm lập trình thú vị thông qua các tiến trình nhẹ và giao tiếp truyền thông điệp.

Kiến trúc dựa trên Daemon cho phép tính toán liên tục

VRS chạy như một daemon hệ thống, cho phép các lập trình viên kết nối từ nhiều client khác nhau, ngắt kết nối và quay lại sau đó để thấy các tiến trình của họ vẫn đang chạy. Cách tiếp cận này khác với các môi trường phát triển truyền thống, nơi việc dừng tiến trình chính sẽ kill tất cả code đang chạy.

Hệ thống sử dụng green threads để triển khai các tiến trình nhẹ có thể chạy hàng triệu trên một máy duy nhất. Mỗi tiến trình hoạt động độc lập với namespace riêng, chỉ giao tiếp thông qua truyền thông điệp thay vì chia sẻ bộ nhớ. Thiết kế này ngăn các tiến trình can thiệp lẫn nhau trong khi cho phép lập trình phức tạp theo kiểu phân tán trên một hệ thống duy nhất.

Các Thành Phần Hệ Thống VRS

Thành Phần Mô Tả
sync Embedded Urg Dialect và Virtual Machine
vasd Triển khai runtime dưới dạng system daemon
vim Binary được chia sẻ bởi vasd/vrs và các triển khai client
vurx Rich CLI client qua libei
vexpj GUI launch bar client

Phương ngữ Lisp tùy chỉnh cung cấp sức mạnh cho Runtime

Nền tảng này sử dụng một phương ngữ Lisp tùy chỉnh có tên lyric bao gồm hỗ trợ tích hợp cho các tiến trình, truyền thông điệp và đa luồng hợp tác thông qua fibers. Ngôn ngữ này cho phép các lập trình viên viết code tuần tự cho tương tác người dùng và các tác vụ chạy lâu dài mà không chặn luồng chính.

Ví dụ, các công việc được lên lịch hàng năm có thể được viết như các vòng lặp vô hạn đơn giản ngủ trong một năm, trong khi các luồng giao diện người dùng có thể được biểu thị như code tuần tự tự nhiên chặn trên đầu vào của người dùng mà không ảnh hưởng đến khả năng phản hồi của hệ thống.

Các Tính Năng Cốt Lõi của VRS

  • Lightweight Processes: Các green thread có thể chạy hàng triệu tiến trình trên một máy đơn
  • Message Passing: Các tiến trình được cô lập chỉ giao tiếp thông qua hộp thư
  • Service Registry: Hệ thống khám phá và liên kết dịch vụ có tên
  • Built-in PubSub: Cơ chế nhắn tin publish-subscribe toàn cục
  • Cooperative Multithreading: Các fiber cho coroutine và generator trong các tiến trình
  • Live Programming: Phát triển hướng REPL với khả năng nội quan thời gian thực

Cộng đồng thảo luận về các thách thức triển khai

Các lập trình viên trong cộng đồng đã xác định một số lĩnh vực mà VRS có thể được hưởng lợi từ các tính năng bổ sung. Một số đề xuất triển khai các mẫu supervisor và quản lý dịch vụ mạnh mẽ hơn tương tự như abstraction gen_server của Erlang, xử lý timeout, khôi phục lỗi và quản lý trạng thái cho các tương tác client-server.

Erlang gen_srv, các analog supervisor cần được tạo ra, cùng với logic messaging Erlang tiêu chuẩn xung quanh nó, để dự án này trở nên hữu ích.

Những người khác đã gặp phải các vấn đề kỹ thuật, bao gồm crash trên các hệ thống macOS mà lập trình viên đang điều tra. Mặc dù là một dự án cá nhân hiện không chấp nhận đóng góp, hệ thống đã tạo ra sự quan tâm từ các lập trình viên làm việc trên các môi trường lập trình thử nghiệm tương tự.

Dịch vụ tích hợp và công cụ phát triển

VRS bao gồm một hệ thống đăng ký dịch vụ nơi các tiến trình chạy lâu dài có thể đăng ký bản thân theo tên và expose các giao diện để các tiến trình khác khám phá và giao tiếp. Runtime cũng cung cấp một cơ chế publish-subscribe toàn cục để phát sóng dữ liệu trên toàn hệ thống.

Các công cụ phát triển bao gồm quy trình làm việc dựa trên REPL thông qua các client dòng lệnh và tích hợp với Emacs thông qua một major mode tùy chỉnh. Hệ thống hỗ trợ lập trình và debug trực tiếp, cho phép các lập trình viên introspect trạng thái runtime và tương tác với các dịch vụ đang chạy trong thời gian thực.

Dự án đại diện cho một thí nghiệm thú vị trong việc tạo ra các môi trường tính toán cá nhân ưu tiên trải nghiệm lập trình viên và niềm vui hơn là tính tương thích rộng rãi hoặc các tính năng doanh nghiệp.

Tham khảo: vrs