10 điểm bởi ffdd270 2022-06-23 | 1 bình luận | Chia sẻ qua WhatsApp

Đánh giá ngôn ngữ lập trình V


  • Đây là bài viết đánh giá bằng cách trực tiếp kiểm thử các tính năng mà ngôn ngữ V từng quảng bá, vào năm 2022 sau vài năm kể từ khi V ra mắt.
  • Các tính năng được chia thành ba mức đánh giá: không hoạt động, cảnh báo và hoạt động. Dưới đây là kết quả đánh giá của danh sách đó. Mã ví dụ dùng để đánh giá và căn cứ cho từng đánh giá đều có trong phần nội dung chính.
  • Danh sách dưới đây được dịch trong lúc học tiếng Anh nên có thể có sai sót về mặt sự thật. Vui lòng chỉ dùng để tham khảo.

  • Một ngôn ngữ đơn giản, dễ bảo trì.
    • Đây là nhận định mang tính chủ quan.
    • N/A

An toàn

  • Không có null.
    • V có thể tạo null pointer (tham chiếu V) mà không có lỗi hoặc cảnh báo từ trình biên dịch.
    • Không hỗ trợ.
  • Không có undefined value.
    • Có thể đọc bộ nhớ chưa được khởi tạo mà không có lỗi hoặc cảnh báo từ trình biên dịch.
    • Không hỗ trợ.
  • Không có undefined behavior.
    • Trình biên dịch V không ngăn được việc viết ra 3 dạng UB khác nhau. UB vẫn xảy ra.
    • Không hỗ trợ.
  • Không có variable shadowing (hiện tượng tên bị che khuất khi tạo cùng một tên ở các không gian tên khác nhau).
    • Không thể che khuất biến cục bộ.
    • Không hỗ trợ.
  • Kiểm tra giới hạn.
    • Có một vài kiểm tra cơ bản, nhưng có thể bị vượt qua khá dễ dàng.
    • Cảnh báo.
  • Biến là hằng mặc định.
    • Các biến không thực sự là hằng theo nghĩa có ý nghĩa. Có thể dễ dàng thay đổi sao cho khi gán tham chiếu hằng cho một biến được khai báo mut, rồi thay đổi biến đó, thì biến hằng gốc cũng bị thay đổi theo.
    • Không hỗ trợ.
  • Hàm thuần là mặc định.
    • Tuyên bố này vô nghĩa vì nó định nghĩa lại tính thuần theo cách mà bất thuần lại trở thành có nghĩa là thuần.
    • (Tác giả chỉ ra rằng việc hỗ trợ các hàm I/O về bản chất không thể là thuần, và tài liệu nói rằng mọi hàm trừ hàm I/O đều là thuần. Nhưng tác giả cho rằng ngay từ khi có thể gọi hàm I/O thì những hàm đó không còn là thuần nữa. Có vẻ tác giả muốn nói ý nghĩa đã bị đánh tráo. Trong bài có ví dụ khá lố bịch về các hàm thuần lại tạo ra giá trị bất thuần.)
    • Không hỗ trợ.
  • Struct hằng là mặc định.
    • Ở trên đã chứng minh có thể lách các biến hằng.
    • Không hỗ trợ.
  • Option và bắt buộc kiểm tra lỗi cho kết quả của nó.
    • Hoạt động đúng như quảng cáo.
  • Sum types (cú pháp như type MyType = string | int).
    • Sum types nhìn chung có vẻ hoạt động, nhưng có vấn đề ở phần triển khai nội bộ. (Chỉ cần tạo thêm hai type là có thể biến tham chiếu vốn bị V cấm thành sum types.)
    • Cảnh báo.
  • Tổng quát hóa (generic)
    • Có triển khai cơ bản, nhưng cực kỳ nhiều lỗi và dường như hoàn toàn lệch khỏi những gì chính nó nhấn mạnh về độ an toàn và hiệu năng của trình biên dịch.
    • Không hỗ trợ.
  • Không có biến toàn cục.
    • V không ngăn cản việc tạo hoặc thay đổi trạng thái chia sẻ toàn cục theo bất kỳ cách nào có ý nghĩa.
    • Không hỗ trợ.

Hiệu năng

  • Nhanh như C (backend compiler chính của V là mã C mà con người có thể đọc được)
    • Có vẻ các tuyên bố về hiệu năng của V chưa được kiểm chứng.
    • Không hỗ trợ.
  • Tương tác với C không phát sinh chi phí bổ sung
    • Hoạt động đúng như quảng cáo.
  • Tối thiểu hóa việc cấp phát
    • Đây là nhận định mang tính chủ quan.
    • N/A. (Tác giả cho thấy khi mã V khai báo một int được dịch sang C, kết quả phía C lại là int được malloc.)
  • Tuần tự hóa tích hợp sẵn không cần runtime reflection
    • Hoạt động đúng như quảng cáo.
  • Biên dịch thành các binary native không có bất kỳ dependency nào.
    • Có vẻ V vẫn chưa đạt được tuyên bố đó, nhưng về mặt ý tưởng chung thì cũng có phần đúng rằng chương trình V tương đối tự đủ và nhỏ gọn.
    • Cảnh báo.

Biên dịch nhanh

  • V biên dịch 1 triệu dòng mỗi giây, và trên mỗi lõi CPU.
    • Trình biên dịch V còn chưa chạm gần tới mức hiệu năng đã tuyên bố. (Ngay cả trên trang benchmark của trình biên dịch V cũng chỉ ở mức biên dịch khoảng 200 nghìn dòng V.)
    • Không hỗ trợ.
  • V được viết bằng V và có thể tự biên dịch chính nó trong dưới 1 giây.
    • Hoạt động đúng như quảng cáo.
  • Quản lý bộ nhớ mang tính cách mạng
    • Các tuyên bố của V không được hậu thuẫn tốt, và phần triển khai hiện tại không thể được mô tả là mang tính cách mạng.
    • Không hỗ trợ

1 bình luận

 
ffdd270 2022-06-23

Thực tế việc V còn rất xa mới đạt kỳ vọng là điều đã được biết đến rộng rãi, nhưng bài viết này ghi lại rất rõ quá trình chứng minh sự “còn xa” đó. Hãy chọn một mục bạn quan tâm trong danh sách rồi thử kiểm tra phần chứng minh cho điều đó.