Một công cụ dòng lệnh mới có tên run đã xuất hiện từ cộng đồng nhà phát triển, hứa hẹn thống nhất trải nghiệm làm việc với hơn 25 ngôn ngữ lập trình thông qua một giao diện duy nhất. Được xây dựng bằng Rust bởi nhà phát triển Esubaalew , công cụ này nhằm loại bỏ nhu cầu sử dụng các REPL riêng biệt và cung cấp khả năng thực thi nhất quán trên các ngôn ngữ lập trình khác nhau.
Dự án đã tạo ra cuộc thảo luận sôi nổi trong cộng đồng nhà phát triển, đặc biệt xung quanh giá trị cốt lõi và việc triển khai kỹ thuật. Run cho phép các nhà phát triển thực thi các đoạn mã, biên dịch chương trình và truy cập các REPL tương tác cho các ngôn ngữ từ Python và JavaScript đến Rust và Go , tất cả thông qua một giao diện dòng lệnh thống nhất.
Ngôn ngữ được hỗ trợ theo danh mục
Danh mục | Ngôn ngữ & Bí danh | Yêu cầu Toolchain |
---|---|---|
Scripting & shells | Bash, Python (py, python), Ruby (rb, ruby), PHP, Perl, Lua, R, Elixir (ex, elixir) | Trình thông dịch tương ứng trên PATH |
Web & typed scripting | JavaScript (js, node), TypeScript (ts, deno), Dart, Swift, Kotlin (kt, kotlin) | node, deno, dart, swift, kotlinc + JRE |
Systems & compiled | C, C++ (cpp, cxx), Rust (rs, rust), Go, Zig, Nim, Haskell (hs, haskell), Crystal (cr, crystal), C (cs, csharp), Java, Julia (jl, julia) | Trình biên dịch/toolchain tương ứng |
Cộng đồng đặt câu hỏi về nhu cầu của một lớp trừu tượng khác
Cộng đồng nhà phát triển đã đặt ra những câu hỏi quan trọng về việc liệu công cụ này có giải quyết được vấn đề thực sự hay chỉ đơn giản là thêm một lớp phức tạp nữa. Một số nhà phát triển chỉ ra rằng các giải pháp hiện có như dòng shebang và /usr/bin/env
đã cung cấp khả năng phát hiện và thực thi ngôn ngữ hoạt động đáng tin cậy trong nhiều thập kỷ.
Cuộc thảo luận tiết lộ sự căng thẳng cơ bản giữa đổi mới và các thực hành đã được thiết lập. Trong khi một số người thấy giá trị trong việc có một giao diện thống nhất cho nhiều ngôn ngữ, những người khác đặt câu hỏi liệu việc tiết kiệm thời gian có biện minh cho việc học một công cụ khác khi các giải pháp hiện có hoạt động hiệu quả.
Tranh cãi về phân loại ngôn ngữ nổi lên
Một phần đáng kể trong cuộc thảo luận của cộng đồng đã tập trung vào cách công cụ phân loại các ngôn ngữ lập trình khác nhau. Ví dụ, Swift hiện được liệt kê trong danh mục Web & typed scripting mặc dù là một ngôn ngữ biên dịch sử dụng LLVM làm backend, tương tự như Rust và C++ . Việc phân loại sai này đã khơi mào các cuộc trò chuyện rộng hơn về cách chúng ta định nghĩa và phân loại các ngôn ngữ lập trình.
Cuộc tranh luận mở rộng ra ngoài các lỗi phân loại đơn giản đến những câu hỏi cơ bản về thuộc tính ngôn ngữ. Kotlin đưa ra một trường hợp thú vị khác, vì nó có thể biên dịch thành cả mã gốc cho phát triển Android và JavaScript cho các ứng dụng web, làm cho việc phân loại của nó phụ thuộc vào ngữ cảnh.
Mối quan tâm về triển khai kỹ thuật và khả năng mở rộng
Từ góc độ kỹ thuật, công cụ hoạt động bằng cách gọi ra các toolchain ngôn ngữ hiện có thay vì triển khai các trình thông dịch riêng. Mỗi engine ngôn ngữ triển khai một trait nhỏ xử lý việc phát hiện toolchain, chuẩn bị workspace, thực thi mã và quản lý trạng thái REPL . Cách tiếp cận này giữ cho lõi nhẹ nhàng trong khi duy trì khả năng tương thích với các môi trường phát triển hiện có.
Các nhà phát triển đã thể hiện sự quan tâm đến khả năng mở rộng của hệ thống, với các cuộc thảo luận tiết lộ rằng việc thêm ngôn ngữ mới đòi hỏi triển khai trait LanguageEngine và thêm ngôn ngữ vào cấu hình chính. Quy trình tương đối đơn giản đã được khen ngợi là dễ tiếp cận, ngay cả đối với các nhà phát triển mới với Rust .
Các lệnh REPL có sẵn
Lệnh | Mục đích |
---|---|
:help |
Liệt kê các lệnh meta có sẵn |
:languages |
Hiển thị các engine được phát hiện và trạng thái |
:lang <id> |
Chuyển đổi ngôn ngữ đang hoạt động (py, go, v.v.) |
:detect on/off/toggle |
Điều khiển tính năng tự động phát hiện ngôn ngữ của đoạn code |
:load path/to/file |
Thực thi file trong phiên làm việc hiện tại |
:reset |
Xóa trạng thái phiên làm việc đã tích lũy |
:exit / :quit |
Thoát khỏi REPL |
Tầm nhìn tương lai và tích hợp đa ngôn ngữ
Có lẽ khía cạnh hấp dẫn nhất của dự án là tiềm năng chia sẻ biến và tích hợp đa ngôn ngữ. Nhà phát triển đã chỉ ra kế hoạch cho phép chia sẻ biến giữa các ngôn ngữ khác nhau trong cùng một phiên, điều này có thể mở ra những khả năng thú vị cho quy trình làm việc lập trình đa ngôn ngữ.
Tính năng này, nếu được triển khai thành công, có thể phân biệt công cụ với các giải pháp hiện có và cung cấp giá trị thực sự cho các nhà phát triển làm việc trên nhiều hệ sinh thái ngôn ngữ. Tuy nhiên, những thách thức kỹ thuật trong việc duy trì tính an toàn kiểu và tính nhất quán dữ liệu trên các môi trường runtime khác nhau vẫn là những rào cản đáng kể.
Dự án đại diện cho một thí nghiệm thú vị trong công cụ nhà phát triển, ngay cả khi tính hữu ích cuối cùng của nó vẫn chưa được chứng minh. Việc liệu nó có được chấp nhận trong cộng đồng phát triển rộng lớn hơn hay không có thể sẽ phụ thuộc vào mức độ giải quyết tốt các điểm đau thực tế trong quy trình làm việc so với việc thêm sự phức tạp không cần thiết vào các thực hành đã được thiết lập.
Tham khảo: run