Một lập trình viên kỳ cựu với 30 năm kinh nghiệm viết C và C++ vừa đưa ra cảnh báo gây chấn động cộng đồng AI và phát triển phần mềm: hầu như mọi dòng code C/C++ đều chứa undefined behavior (hành vi không xác định). Điều này có nghĩa là phần mềm chạy ổn định hôm nay có thể sập bất ngờ vào ngày mai chỉ vì compiler thay đổi cách tối ưu.
Tại sao người dùng thông thường cũng bị ảnh hưởng?
Hãy tưởng tượng bạn dùng một app ngân hàng viết bằng C++, mọi giao dịch đều thành công. Nhưng sau bản cập nhật driver, một lỗi UB tiềm ẩn làm sai lệch số dư tài khoản của bạn. Đó không phải lỗi hacker, mà là lỗi do compiler "hiểu nhầm" ý đồ lập trình viên. Theo blog của Habets, lỗi UB không chỉ đến từ double-free hay use-after-free quen thuộc, mà còn từ những điều tưởng chừng vô hại như truyền con trỏ không căn chỉnh bộ nhớ.
Ngay cả code đơn giản cũng không an toàn
Một hàm chỉ gồm 3 dòng như int foo(const int* p) { return *p; } cũng có thể gây UB nếu con trỏ p không được căn chỉnh theo đúng địa chỉ bội số của sizeof(int). Trên kiến trúc Alpha của Linux, điều này từng gây ra trap vào kernel để giả lập bằng phần mềm, nhưng trên các nền tảng hiện đại, hậu quả có thể nghiêm trọng hơn nhiều.
Bài viết gốc nhấn mạnh rằng ngay cả khi tắt tối ưu hóa trình biên dịch, UB vẫn tồn tại bởi vì nó nằm trong chính định nghĩa của ngôn ngữ. Điều này đặt ra câu hỏi lớn cho ngành công nghệ: liệu đã đến lúc từ bỏ C/C++ cho các ứng dụng quan trọng hay chưa? Các công ty như Microsoft (MSFT) và Google (GOOGL) đã bắt đầu chuyển sang Rust để giảm thiểu rủi ro.






