11 điểm bởi regentag 2024-10-20 | 2 bình luận | Chia sẻ qua WhatsApp

Đây là một bình luận so sánh Rust và Ada được tìm thấy trên r/ada của Reddit.

  • Cả hai ngôn ngữ đều có lợi thế ở chỗ không phải C: các "foot guns" về cú pháp của C (tức các tính năng khiến lập trình viên dễ tự bắn vào chân mình), hành vi không xác định, v.v.

  • Cả hai ngôn ngữ đều hỗ trợ memory safety. Biên mảng được kiểm tra khi chạy, có các quy tắc để xác nhận con trỏ hợp lệ, v.v. Ada có cơ chế kiểm tra đơn giản hơn, và có Unchecked_Access để vượt qua mọi thứ. Borrow checker của Rust tinh vi hơn, nhưng cũng khiến việc lách qua trở nên khó khăn ngay cả trong những tình huống cần lách.

  • Rust chấp nhận cấp phát động. Ada cũng có thể làm được, nhưng khá gượng gạo và bất tiện. Rõ ràng ngôn ngữ Ada không thực sự mong muốn điều này. Ada bắt nguồn từ thời kỳ mà cấp phát heap bị coi là vấn đề an toàn, người ta lo ngại phân mảnh bộ nhớ, và phải chứng minh rằng sẽ không cạn bộ nhớ. Rust khuyến khích sử dụng heap một cách tự do, và nếu cần cấp phát động thì Rust chắc chắn an toàn hơn. Trong Ada, giải phóng cấp phát là thao tác không an toàn vì có thể để lại dangling pointer.

  • Rust có ưu thế về thread safety. Borrow checker ngăn race condition ngay từ đầu.

  • Ada có ưu thế về value safety. Constrained subtype là công cụ tốt để viết mã đúng đắn, và là nền tảng cho các tính năng khác của Ada như kiểm tra mảng.

  • Ada có ưu thế trong lĩnh vực formal proof nhờ sử dụng SPARK. Tôi chưa thấy thứ tương đương như vậy trong Rust. Nếu mức độ an toàn cao là yêu cầu bắt buộc, SPARK là công cụ phù hợp nhất.

2 bình luận

 
regentag 2024-10-20

Vì viết bằng điện thoại nên có vài lỗi gõ nhầm rồi hu hu

memory sadety -> memory safety.

 
jwh926 2024-10-22

burrow checker -> borrow checker
thread safery -> thread safety
:D