- Giấc mơ về một C++ thống nhất không có phương ngữ dường như đã tan biến từ lâu
- Có rất nhiều tranh luận về tương lai của C++ trên Reddit, trang web màu cam đó (HN), và trong các cuộc họp chính thức của ủy ban tiêu chuẩn C++
Tình trạng hiện tại của C++
- Nhóm làm việc tiến hóa của C++ (EWG) đã đồng ý thông qua P3466 R0.
- Duy trì khả năng tương thích liên kết với C và C++ cũ mà không phá vỡ ABI (giao diện nhị phân ứng dụng).
- Không sử dụng “chú thích lan truyền”.
- Vẫn bám vào các mục tiêu xung đột nhau là không phá vỡ ABI và nguyên tắc zero-overhead.
- Chính phủ Mỹ khuyến cáo ngừng sử dụng C++.
- Nhiều cơ quan như CISA, NSA và Nhà Trắng đã công bố cảnh báo về việc sử dụng các ngôn ngữ không an toàn bộ nhớ.
- Các công ty công nghệ lớn đang áp dụng Rust.
- Microsoft, Google, AWS và các công ty khác đang sử dụng Rust.
- Google thậm chí còn phát triển công cụ tương tác C++/Rust
- Xung đột nội bộ trong cộng đồng C++
- Có thông tin Herb Sutter rời Microsoft và MSVC triển khai chậm các tính năng C++23.
- Google đang giảm mức độ tham gia vào quy trình phát triển C++ và phát triển ngôn ngữ kế nhiệm C++ của riêng mình.
- Thiếu niềm tin vào quy trình hiện tại của ủy ban tiêu chuẩn C++
- Tính năng module vẫn còn chưa hoàn thiện
- “Hồ sơ an toàn (‘Safety Profiles’)” đang ở trong trạng thái khá kỳ lạ
Hai nền văn hóa của C++
- Nhóm sử dụng công cụ hiện đại và tự động hóa
- Các công ty công nghệ lớn như Google là ví dụ tiêu biểu
- Sử dụng các tiêu chuẩn C++ mới nhất (C++17 trở lên), với sự hỗ trợ của các công cụ build và kiểm thử tự động
- Đầu tư để duy trì chất lượng mã và liên tục hiện đại hóa codebase
- Nhóm C++ legacy
- Các codebase vận hành trong môi trường và công cụ cũ
- Hoạt động mà không có mã nguồn hoặc có hệ thống build đã lỗi thời
- Chi phí bảo trì cao và rào cản hiện đại hóa lớn
- Khác biệt chính là công cụ và quy trình
- Nhóm C++ hiện đại dựa vào hệ thống build tích hợp và các công cụ như static analyzer, formatter, linter
- Nhóm legacy vận hành kém hiệu quả do thiếu các công cụ và quy trình này
Kết quả và tác động
- Hồ sơ an toàn
- Mục tiêu là tăng cường độ an toàn mà không cần thay đổi code legacy hiện có
- Tập trung vào việc duy trì mã hiện có hơn là đáp ứng các yêu cầu của C++ hiện đại
- Module
- Được thiết kế để có thể nhập các tệp header dưới dạng module một cách đơn giản
- Được thiết kế có tính đến khả năng tương thích với code legacy
- Sự chia rẽ trong cộng đồng C++
- Xung đột trong cộng đồng ngày càng sâu sắc do yêu cầu không khớp giữa nhóm hiện đại và nhóm legacy
- Cách tiếp cận bảo thủ của ủy ban tiêu chuẩn C++ có vẻ là một nỗ lực nhằm xoa dịu những xung đột này
Góc nhìn thay thế
- Các ý tưởng thay thế như Safe C++ không được chào đón trong cộng đồng
- Có ý kiến chỉ trích rằng một số thành viên của ủy ban tiêu chuẩn bám vào các tiêu chuẩn thẩm mỹ cá nhân và kháng cự thay đổi
3 bình luận
Rust vẫn chưa thể được áp dụng vì hệ sinh thái phát triển GUI vẫn chưa có nhiều.
Mong là sẽ sớm có một framework GUI ổn để dùng với Rust...
Tôi không rõ liệu Rust có thể thay thế C++ hay không, nhưng
đúng là gần như không còn thấy các dự án C++ mới nữa...
Có vẻ như ủy ban C++ đã quyết định rằng hướng đi đúng là coi trọng những giá trị vốn có hơn là sự lột xác.
Ý kiến Hacker News
Mã C++ của Google thường không chạy được trên các phiên bản mới nhất, và trong nhiều trường hợp các lập trình viên cũng không có ý định sửa điều đó. Điều này là vì mã của Google đang mắc kẹt ở điểm trung gian giữa cũ và hiện đại
Khuyên những người làm tiêu chuẩn C++ hãy ủng hộ định hướng hiện tại của C++ và bỏ qua những tiếng ồn trên mạng về tương lai của C++
Lập luận rằng nhóm duy nhất còn dùng C++ sẽ là những nhóm có codebase legacy quá lớn để refactor
Đánh giá hệ thống edition của Rust hoạt động rất tốt
Lo ngại tin Herb Sutter rời Microsoft sẽ gây ảnh hưởng không tốt cho Microsoft
std::span, vốn là đề xuất từ Microsoft, đã được chấp nhận nhưng không có kiểm tra phạm vi, và cho rằng rất cần những nỗ lực như của HerbNhấn mạnh rằng kiểm thử tự động là yếu tố chính phân biệt hai phe
Lập luận rằng yếu tố chính làm giảm sức hấp dẫn của C++ là sự thiếu vắng module
So sánh rằng Herb Sutter rất giỏi trong việc dẫn dắt thỏa hiệp, còn Google thì lại thúc đẩy chương trình nghị sự của riêng mình
Nhắc rằng các khách hàng có codebase quy mô lớn không muốn thay đổi dù chỉ 1% mã để đáp ứng các quy tắc nghiêm ngặt
Giải thích rằng Python và Javascript/Node/Typescript cũng tồn tại nhiều phe khác nhau