C++26 gặp trở ngại do tranh cãi về Contracts
"The C++26 standard is facing potential delays due to a dispute over the inclusion of 'Contracts', a security-enhancing feature. The feature has divided the C++ standardization committee, with concerns raised about complexity and hasty implementation, leading to a failed ISO ballot. Options being considered include removing Contracts from the standard, deferring it to a separate specification, or revising and revoting."
Việc thiếu Contracts có thể làm tăng nguy cơ lỗi bảo mật trong các ứng dụng C++, đặc biệt là những ứng dụng quan trọng về an ninh. Các kiểm tra thời gian chạy có thể giúp phát hiện các lỗi này.
Sự chậm trễ của C++26 có thể ảnh hưởng đến lịch trình phát triển của các dự án sử dụng ngôn ngữ này. Các doanh nghiệp cần cân nhắc chi phí chuyển đổi sang các ngôn ngữ khác hoặc chờ đợi phiên bản ổn định hơn.
C++26 có thể bị trì hoãn do bất đồng về tính năng Contracts, một công cụ tăng cường bảo mật. Bjarne Stroustrup, người sáng tạo C++, phản đối phiên bản hiện tại vì lo ngại về độ phức tạp và triển khai vội vàng. Tuy nhiên, nhiều người khác vẫn muốn tích hợp Contracts, thậm chí cho rằng những người phản đối đang làm tổn hại quá trình phát triển C++.
Tháng 10 vừa qua, bản dự thảo tiêu chuẩn quốc tế (DIS) của C++26 không vượt qua được vòng kiểm phiếu ISO – giai đoạn cuối cùng trước khi tiêu chuẩn được chính thức phê duyệt. Kết quả là 13 phiếu ủng hộ, 9 phiếu chống và 12 phiếu trắng, không đạt yêu cầu về số phiếu chống không vượt quá 25%. Tranh cãi về Contracts là nguyên nhân chính dẫn đến kết quả này.
Contracts cho phép lập trình viên thêm các điều kiện tiên quyết và hậu quyết vào mã, cũng như các khẳng định để kiểm tra điều kiện. Điều này giúp phát hiện lỗi lập trình có thể dẫn đến hành vi không xác định. Thiết kế theo hợp đồng (Design by Contract) đã là một tính năng của các ngôn ngữ như Ada và Eiffel.
Các nhà phát triển đã đề xuất thêm Contracts vào C++ ít nhất một thập kỷ trước. Tuy nhiên, nó đã bị loại khỏi C++20 do lo ngại về các thiết lập nguy hiểm. Stroustrup chỉ trích phiên bản sửa đổi (P2900) trong C++26, cho rằng nó làm tăng độ phức tạp và bloat của ngôn ngữ. Ông cũng lưu ý rằng việc triển khai còn lộn xộn, lỗi thời, chưa được kiểm tra kỹ lưỡng và có thể được triển khai hiệu quả hơn dưới dạng thư viện.
Andreas Fertig, thành viên ủy ban tiêu chuẩn hóa C++, cho rằng những chỉ trích này đã được xem xét kỹ lưỡng và việc phủ quyết đề xuất vào thời điểm này sẽ gây tổn hại cho C++. Harry Bott, CEO của C++ Alliance, không xem cuộc tranh luận về Contracts là gián đoạn đối với C++.
Với việc kiểm phiếu thất bại, C++26 có thể không kịp ra mắt trong năm nay và có thể được đổi tên thành C++27. Ủy ban WG21 của ISO sẽ họp tại Brazil vào tuần tới để quyết định có nên loại bỏ Contracts khỏi tiêu chuẩn, chuyển nó sang một thông số kỹ thuật riêng hoặc sửa đổi và bỏ phiếu lại hay không.
Câu hỏi thường gặp
Contracts là gì?
Contracts cho phép lập trình viên thêm các điều kiện tiên quyết và hậu quyết vào mã, cũng như các khẳng định để kiểm tra điều kiện. Điều này giúp phát hiện lỗi lập trình và tăng cường bảo mật.
Tại sao Contracts lại gây tranh cãi?
Bjarne Stroustrup, người sáng tạo C++, phản đối phiên bản hiện tại vì lo ngại về độ phức tạp và triển khai vội vàng. Một số người khác lại muốn tích hợp Contracts để tăng cường bảo mật.
Điều gì sẽ xảy ra nếu C++26 bị trì hoãn?
C++26 có thể được đổi tên thành C++27 và ra mắt vào năm sau. Ủy ban WG21 của ISO sẽ họp để quyết định hướng đi tiếp theo.
Góc nhìn của Orange Cloud
Theo chúng tôi, sự chậm trễ này có thể ảnh hưởng đến các dự án sử dụng C++ ở Việt Nam, đặc biệt là những dự án yêu cầu hiệu suất cao và bảo mật. Các doanh nghiệp có thể cân nhắc thử nghiệm các giải pháp thay thế như Rust, hoặc chờ đợi phiên bản C++27 ổn định hơn. Điều đáng chú ý là việc tranh luận về Contracts cho thấy sự quan tâm đến vấn đề bảo mật trong cộng đồng C++.