Trong bối cảnh các ngôn ngữ lập trình không ngừng phát triển, Jaql xuất hiện như một đối thủ mới trong không gian lập trình hệ thống an toàn bộ nhớ. Tuy nhiên, các cuộc thảo luận cộng đồng cho thấy một trường hợp nhầm lẫn thú vị, khi hầu hết người bình luận dường như đang thảo luận về Jakt, một ngôn ngữ lập trình khác liên quan đến dự án SerenityOS, chứ không phải bản thân Jaql.
Sự nhầm lẫn giữa Jaql và Jakt
Cuộc thảo luận của cộng đồng chủ yếu xoay quanh Jakt, một ngôn ngữ lập trình hệ thống an toàn bộ nhớ được phát triển như một phần của dự án SerenityOS. Sự nhầm lẫn này dễ hiểu do sự tương đồng về tên gọi và mục tiêu giữa hai ngôn ngữ. Trong khi bài viết mô tả Jaql như một ngôn ngữ lập trình hệ thống an toàn bộ nhớ với các tính năng như đếm tham chiếu tự động và kiểu dữ liệu mạnh, thì người bình luận lại thảo luận về lịch sử phát triển của Jakt, mối quan hệ của nó với SerenityOS, và trạng thái hiện tại của nó.
Trạng thái hiện tại của việc phát triển Jakt
Dựa trên những hiểu biết từ cộng đồng, Jakt dường như đang trong trạng thái ngủ đông. Một số người bình luận lưu ý rằng hoạt động phát triển đã giảm đáng kể, với một người dùng chỉ ra lịch sử commit thưa thớt. Ngôn ngữ này ban đầu được ủng hộ bởi Andreas Kling, người sáng tạo ra SerenityOS, nhưng động lực phát triển dường như đã thay đổi.
Tôi đã xem một số video về Andreas làm việc trên Jakt cách đây vài năm nhưng hiện tại nó có vẻ như đã chết khi nhìn vào lịch sử commit.
Nhận xét này phù hợp với các bình luận khác cho rằng Andreas đã chuyển sang tập trung vào dự án trình duyệt Ladybird, dự án này được cho là đã chọn Swift làm ngôn ngữ lựa chọn cho việc phát triển trong tương lai thay vì Jakt.
Swift là con đường được chọn cho Ladybird
Một phần đáng kể của cuộc thảo luận xoay quanh quyết định của đội ngũ trình duyệt Ladybird (một dự án ban đầu được fork từ trình duyệt của SerenityOS) để áp dụng Swift thay vì Jakt hoặc các giải pháp thay thế khác. Quyết định này dường như đã được đưa ra thông qua một quá trình thực tế mà một người bình luận mô tả là các thành viên trong nhóm đã triển khai các tính năng trong nhiều ngôn ngữ ứng cử viên khác nhau và cuối cùng thấy Swift là ngôn ngữ thú vị nhất để làm việc cùng. Mô hình lập trình hướng đối tượng của Swift được cho là phù hợp với nhu cầu kiến trúc của một trình duyệt web.
Tuy nhiên, một số thành viên cộng đồng bày tỏ sự ngạc nhiên về lựa chọn này, đặc biệt là lưu ý những lo ngại về thách thức khả năng tương tác C++ của Swift. Một người bình luận chỉ ra rằng Swift yêu cầu phiên bản LLVM của Apple, có thể hạn chế khả năng tương thích với môi trường GNU hoặc Clang chính thống.
An toàn bộ nhớ và triết lý thiết kế ngôn ngữ
Quay trở lại chủ đề thực sự của bài viết, Jaql chia sẻ xu hướng rộng lớn hơn trong ngành hướng tới các ngôn ngữ lập trình hệ thống an toàn bộ nhớ. Theo bài viết, Jaql kết hợp các tính năng như kiểm tra thời điểm biên dịch, mượn, theo dõi vòng đời và ngăn chặn giải tham chiếu con trỏ null. Những tính năng này phù hợp với sự nhấn mạnh ngày càng tăng của ngành về an toàn bộ nhớ, cũng được thấy trong các ngôn ngữ như Rust.
Bài viết chi tiết về cách tiếp cận an toàn bộ nhớ của Jaql, bao gồm ngăn chặn tràn số nguyên, vòng lặp vô hạn, tràn ngăn xếp, đua dữ liệu và rò rỉ bộ nhớ trong chế độ Safe-Jaql. Sự tập trung vào an toàn trong khi vẫn duy trì khả năng lập trình hệ thống phản ánh sự chuyển dịch liên tục của ngành công nghiệp hướng tới các giải pháp thay thế an toàn hơn cho các ngôn ngữ truyền thống như C và C++.
Các tính năng chính của Jaql
-
Tính năng an toàn bộ nhớ:
- Kiểm tra tại thời điểm biên dịch
- Mượn (tracing)
- Theo dõi vòng đời
- Không có dereference con trỏ null
- Ngăn chặn tràn số nguyên
- Không có vòng lặp vô hạn trong Safe-Jaql
- Bảo vệ khỏi tràn ngăn xếp
- Không có xung đột dữ liệu
- Không rò rỉ bộ nhớ (trừ khi cố ý)
-
Thiết kế ngôn ngữ:
- Phân biệt giữa kiểu "class" có thể thay đổi và kiểu "data" không thay đổi
- Khuyến khích các hàm nhỏ (tối đa 2-3 dòng cho mỗi phương thức)
- Không có tác dụng phụ
- Hỗ trợ generics và hàm bậc cao
- Hệ thống traits kiểu
- Nạp chồng toán tử thông qua traits
-
Triển khai:
- Ban đầu được triển khai bằng Java để dễ tiếp cận
- Trình biên dịch tự xây dựng là một mục tiêu
- Khả năng tương tác với C/C++
Tính năng ngôn ngữ và lựa chọn thiết kế
Thiết kế của Jaql bao gồm các tính năng thú vị như sự phân biệt giữa các kiểu lớp có thể thay đổi và các kiểu dữ liệu không thể thay đổi, tương tự như sự phân biệt class/struct của Swift. Ngôn ngữ này khuyến khích các hàm nhỏ với tác dụng phụ tối thiểu và cung cấp các thư viện hàm chuẩn cho quản lý dữ liệu.
Bài viết cũng nhấn mạnh sự hỗ trợ của Jaql cho generics, hàm bậc cao và đặc điểm kiểu, cho phép các mẫu lập trình linh hoạt và an toàn về kiểu. Những tính năng này định vị Jaql như một ngôn ngữ hiện đại nhằm cân bằng giữa an toàn, khả năng biểu đạt và hiệu suất.
Tóm lại, trong khi cuộc thảo luận của cộng đồng phần lớn tập trung vào một ngôn ngữ khác (Jakt), bản thân bài viết giới thiệu Jaql như một dự án đầy tham vọng với sự tập trung mạnh mẽ vào an toàn bộ nhớ và các tính năng ngôn ngữ hiện đại. Như với nhiều ngôn ngữ lập trình mới, thành công của nó có thể phụ thuộc vào việc cộng đồng áp dụng, phát triển liên tục và tìm được vị trí của mình trong một không gian ngày càng đông đúc của các ngôn ngữ lập trình hệ thống an toàn bộ nhớ.
Tham khảo: Ngôn ngữ lập trình Jaql