
C++26 đã hoàn thành đạt tiêu chuẩn ISO C++, Trip Report
C++26 is done ISO C++ standards meeting, Trip Report
Ban ISO C++ vừa chốt xong các công việc kỹ thuật cho C++26 và chuẩn này sắp sửa được công bố. Phiên bản này được đánh giá là quan trọng nhất kể từ C++11, mang đến những tính năng "khủng" như compile-time reflection, hứa hẹn thay đổi cách chúng ta xây dựng các abstraction hiệu quả. Bên cạnh đó, C++26 còn cải thiện mạnh mẽ memory safety bằng cách loại bỏ undefined behavior với biến local chưa khởi tạo. Thư viện chuẩn cũng được "siêu cường" thêm các đảm bảo bảo mật cross-platform cho các tác vụ phổ biến. Các dev nên chuẩn bị tinh thần đón nhận những thay đổi mang tính cách mạng này, đặc biệt là reflection, và tận dụng triệt để các cải tiến về memory safety có sẵn trong C++26.
Tin tức chớp nhoáng: C++26 đã hoàn tất! 🎉 Vào thứ Bảy, ủy ban ISO C++ đã hoàn thành công việc kỹ thuật về C++26 tại (một phần) London Croydon, Vương quốc Anh đầy nắng. Chúng tôi đã giải quyết các ý kiến quốc tế còn lại về dự thảo C++26 và hiện đang soạn thảo tài liệu cuối cùng để gửi đi lá phiếu phê duyệt quốc tế (Dự thảo Tiêu chuẩn Quốc tế, hay DIS) và…
Tin tức chớp nhoáng: C++26 đã hoàn tất! 🎉

Vào thứ Bảy, ủy ban ISO C++ đã hoàn thành công việc kỹ thuật về C++26 tại (một phần) London Croydon, Vương quốc Anh đầy nắng. Chúng tôi đã giải quyết các nhận xét quốc tế còn lại về dự thảo C++26 và hiện đang soạn thảo tài liệu cuối cùng để gửi đi bỏ phiếu phê duyệt quốc tế (Dự thảo Tiêu chuẩn Quốc tế hoặc DIS) và công việc biên tập cuối cùng sẽ được ISO xuất bản trong thời gian sắp tới.
Cuộc họp này được chủ trì bởi Phil Nash của Bò cạo râu và Nền tảng C++ tiêu chuẩn. Chủ nhà đã sắp xếp cơ sở vật chất chất lượng cao cho cuộc họp kéo dài sáu ngày của chúng tôi từ thứ Hai đến thứ Bảy. Chúng tôi có khoảng 210 người tham dự, khoảng 130 người trực tiếp và 80 người từ xa thông qua Zoom, chính thức đại diện cho 24 quốc gia. Tại mỗi cuộc họp, chúng tôi thường xuyên có những khách mời mới chưa từng tham dự trước đây và lần này có 24 khách mời mới, chủ yếu là trực tiếp, bên cạnh những người tham dự mới là đại diện chính thức của cơ quan quốc gia. Xin chào tất cả họ một lần nữa!
Ủy ban hiện có 23 nhóm nhỏ đang hoạt động, 9 nhóm trong số đó đã họp ở 6 nhóm song song trong suốt tuần. Một số nhóm chạy cả tuần, số khác chạy vài ngày hoặc một phần ngày, tùy thuộc vào khối lượng công việc của họ. Chúng tôi đã có ba buổi tối kỹ thuật về triển khai thư viện/trình biên dịch C++, an toàn bộ nhớ và số lượng/đơn vị. Bạn có thể tìm thấy bản tóm tắt ngắn gọn về các quy trình ISO tại đây.
C++26 đã hoàn tất: Phiên bản hấp dẫn nhất kể từ C++11
Theo lịch trình C++26 đã xuất bản của chúng tôi, đây là cuộc họp cuối cùng của chúng tôi để hoàn thành công việc kỹ thuật về C++26. Không có tính năng nào được thêm vào hoặc xóa bỏ; chúng tôi chỉ xử lý các vấn đề phù hợp và chủ yếu tập trung vào việc hoàn thiện việc giải quyết 411 ý kiến của cơ quan quốc gia mà chúng tôi nhận được trong cuộc bỏ phiếu bình luận quốc tế vào mùa hè (Dự thảo của Ủy ban hoặc CD).
Nếu bạn đang thắc mắc “Lý do chính khiến tôi nên quan tâm đến C++26 là gì?” thì nơi tốt nhất để bắt đầu là với Tính năng Fab Four của C++26…
(1) Phản xạ, phản xạ, phản xạ
Cho đến nay, Reflection là bản nâng cấp lớn nhất dành cho quá trình phát triển C++ mà chúng tôi đã triển khai kể từ khi phát minh ra các mẫu. Để biết thông tin chi tiết, hãy xem báo cáo chuyến đi tháng 6 năm 2025 của tôi và CppCon tháng 9 năm 2025 của tôi bài phát biểu quan trọng: “Suy ngẫm: Động cơ tên lửa định hình thập kỷ của C++.” Từ bản tóm tắt cuộc nói chuyện:
“Vào tháng 6 năm 2025, C++ đã vượt qua Rubicon: nó trao cho chúng ta chìa khóa của bộ máy của chính nó. Lần đầu tiên, C++ có thể tự mô tả—và tạo ra nhiều hơn nữa. Các tính năng phản chiếu thời gian biên dịch đầu tiên trong bản nháp C++26 đánh dấu bước ngoặt mang tính biến đổi nhất trong lịch sử ngôn ngữ của chúng ta bằng cách cung cấp cho chúng ta công cụ mới mạnh mẽ nhất để thể hiện sự trừu tượng hiệu quả mà C++ từng có và chúng ta sẽ cần thập kỷ tiếp theo để khám phá xem tên lửa này có thể làm gì.”
(2) Ít UB hơn để an toàn hơn cho bộ nhớ: Mã C++ an toàn hơn cho bộ nhớ chỉ bằng cách biên dịch lại thành C++26
C++26 có những cải tiến quan trọng về an toàn bộ nhớ mà bạn có được chỉ bằng cách biên dịch lại mã C++ hiện có mà không cần thay đổi gì. Những cải tiến này diễn ra theo hai cách chính.
Không còn hành vi không xác định (UB) để đọc các biến cục bộ chưa được khởi tạo. Toàn bộ danh mục lỗ hổng tiềm ẩn này sẽ biến mất trong C++26, chỉ bằng cách biên dịch lại mã của bạn thành C++26. Để biết thêm chi tiết, hãy xem báo cáo chuyến đi tháng 3 năm 2025 của tôi.
Thư viện tiêu chuẩn cứng nhắc cung cấp các đảm bảo bảo mật thư viện đa nền tảng ban đầu, bao gồm cả giới hạn an toàn cho hàng chục hoạt động giới hạn được sử dụng rộng rãi nhất trên các loại tiêu chuẩn phổ biến, bao gồm vector, span, string, string_view, v.v. Để biết thông tin chi tiết, hãy xem báo cáo chuyến đi tháng 2 năm 2025 của tôi và chạy (không đi bộ) để đọc bài viết về Hàng đợi ACM tháng 11 năm 2025 “Bảo mật thực tế trong sản xuất: Tăng cường thư viện chuẩn C++ ở quy mô lớn” để tìm hiểu cách triển khai tính năng này trên các nền tảng của Apple và các dịch vụ của Google, hàng trăm triệu dòng mã, với chi phí hoạt động trung bình là 0,3% (một phần của 1%). Từ bài báo:
“Kết quả cuối cùng sau khi triển khai thật đáng chú ý. Trên hàng trăm triệu dòng C++ tại Google, chỉ có 5 dịch vụ chọn không tham gia hoàn toàn vì lo ngại về độ tin cậy hoặc hiệu suất. Công việc đang được tiến hành để loại bỏ sự cần thiết của một số trường hợp ngoại lệ còn lại này, với mục tiêu đạt được sự áp dụng toàn cầu.
Điều đáng chú ý hơn nữa là API chi tiết [để chọn không tham gia] dành cho quyền truy cập không an toàn chỉ được sử dụng ở bảy vị trí riêng biệt, tất cả đều là những thay đổi mang tính phẫu thuật do nhóm bảo mật thực hiện để lấy lại hiệu suất ở mã đúng nhưng trình biên dịch khó phân tích. Việc áp dụng rộng rãi này là bằng chứng mạnh mẽ nhất có thể cho thấy tính thực tế của việc kiểm tra chặt chẽ trong môi trường sản xuất thực tế.”
Đây không phải là thiết kế chỉ trên giấy. Chỉ riêng tại Google, họ đã sửa hơn 1.000 lỗi, dự kiến sẽ ngăn chặn được 1.000 đến 2.000 lỗi mỗi năm và đã giảm 30% tỷ lệ lỗi phân tách trong toàn bộ nhóm sản xuất.
Và hiện tại, nó đã được chuẩn hóa cho mọi người trong C++26. Cảm ơn Apple, Google và tất cả những người triển khai thư viện tiêu chuẩn!
(3) Hợp đồng an toàn chức năng: trước, sau, hợp đồng_assert
Trong C++26, chúng tôi cũng có các hợp đồng ngôn ngữ: điều kiện tiên quyết và hậu điều kiện trên khai báo hàm và câu lệnh xác nhận được ngôn ngữ hỗ trợ, tất cả đều tốt hơn rất nhiều so với macro khẳng định của C.
Lưu ý rằng một số chuyên gia thông minh và được kính trọng của ủy ban ISO C++ luôn có những lo ngại về mặt kỹ thuật về hợp đồng. Để biết bản tóm tắt của tôi về tính năng hợp đồng và tất cả các mối lo ngại chính thường gặp (với ý kiến của tôi về chúng, điều này có thể sai!), hãy xem cuộc trò chuyện về hợp đồng CppCon 2025 của tôi. Vào tháng 2 năm 2025, khi chúng tôi thực hiện cuộc thăm dò toàn thể để thông qua các hợp đồng trong bản dự thảo hoạt động của C++26 (“hợp nhất nó vào đường trục”), số phiếu bầu là:
100 phiếu ủng hộ, 14 phiếu phản đối và 12 phiếu trắng
Kể từ đó, các mối quan ngại đều đã được thảo luận lại sâu sắc trong ba cuộc họp vừa qua nhờ các tài liệu kỹ thuật chất lượng cao và chu đáo; tất cả những giấy tờ đó vẫn tiếp tục được lắng nghe đầy đủ, thường trong nhiều ngày và tại nhiều cuộc họp qua điện thoại giữa các cuộc họp. Tại cuộc họp trước đó vào tháng 11 năm 2025, chúng tôi đã sửa được một số lỗi về đặc tả hợp đồng nhờ phản hồi này! Hôm qua, khi chúng tôi tiến hành cuộc bỏ phiếu toàn thể để hoàn thiện và đưa ra tiêu chuẩn C++26, cuộc bỏ phiếu đã không đạt được sự nhất trí vì những lo ngại kéo dài về hợp đồng:
114 phiếu thuận, 12 phiếu phản đối và 3 phiếu trắng
Số phiếu trắng thấp bất thường cho thấy hầu như tất cả các chuyên gia của chúng tôi hiện cảm thấy chắc chắn về ý kiến kỹ thuật của họ, dù ủng hộ hay phản đối hợp đồng. Sau khi xem xét kỹ lưỡng, ý kiến của ủy ban rất rõ ràng: Ủy ban ISO C++ vẫn muốn có hợp đồng, và vì vậy các hợp đồng vẫn ở mức C++26.
(4) std::execution (còn gọi là “Người gửi/Người nhận”)
std::execution là cái mà tôi gọi là “Mô hình không đồng bộ của C++”: Nó cung cấp một khung thống nhất để thể hiện và kiểm soát tính đồng thời và song song. Để biết thông tin chi tiết, hãy xem báo cáo chuyến đi tháng 7 năm 2024 của tôi. Nó cũng tình cờ có một số đặc tính an toàn quan trọng vì nó giúp việc viết các chương trình sử dụng đồng thời và song song có cấu trúc (lồng nhau chặt chẽ suốt đời) để không bị chạy đua dữ liệu khi xây dựng dễ dàng hơn. Đó là một vấn đề lớn.
Tuy nhiên, tôi thực sự muốn viết một lời cảnh báo: Tính năng này rất tuyệt (công ty của tôi đã sử dụng nó trong sản xuất) nhưng hiện tại nó khó áp dụng hơn hầu hết các tính năng của C++ vì nó thiếu tài liệu hữu ích và thiếu một số thư viện “ngón tay và ngón chân”. Hiện tại, bạn có thể mong đợi kết quả tuyệt vời từ việc thực thi std::nhưng cũng mong dành chút thời gian ban đầu để tìm hiểu với sự trợ giúp của một người bạn đã biết rõ về việc đó và viết một số thư viện bộ điều hợp trợ giúp để tích hợp std::execution với mã async hiện có của bạn.
Việc áp dụng C++26 sẽ nhanh chóng
Có hai lý do khiến tôi kỳ vọng C++26 sẽ được áp dụng rất nhanh trong ngành so với C++17, C++20 và C++23.
Đầu tiên, nhu cầu của người dùng đối với bộ tính năng này cực kỳ cao. C++11 là bản phát hành “lớn và có tác động” cuối cùng của chúng tôi chứa đầy các tính năng mà đại đa số các nhà phát triển C++ sẽ sử dụng hàng ngày (tự động, phạm vi cho, lambdas, con trỏ thông minh, ngữ nghĩa di chuyển, luồng, mutexes,…). Kể từ đó, các tiêu chuẩn ba năm một lần tiếp theo của chúng tôi cũng đã có một số tính năng 'lớn' như STL song song, khái niệm, coroutine và mô-đun, nhưng thực tế là những tính năng đó không có tác động lớn đối với tất cả các nhà phát triển C++ như các tính năng của C++ 11, hoặc như các tính năng nổi bật của C++26 về phản ánh và tăng cường an toàn bây giờ. Vì vậy, ngay cả khi công ty của bạn kích hoạt chuyển đổi C++20 chậm, tôi nghĩ bạn sẽ thấy họ sẽ kích hoạt C++26 nhanh hơn nhiều. Có nhiều giá trị được yêu cầu cao hơn khiến nó trở thành một bản phát hành thú vị và đặc biệt hữu ích cho tất cả những ai sử dụng C++.
Thứ hai, việc triển khai thư viện tiêu chuẩn và trình biên dịch phù hợp đang diễn ra nhanh chóng. Trong suốt quá trình phát triển C++26, tại bất kỳ thời điểm nào, cả GCC và Clang đều đã triển khai 2/3 tính năng của C++26. Ngày nay, GCC đã có phản ánh và hợp đồng được hợp nhất trong hệ thống, đang chờ phát hành.
Hoạt động trên C++29, đặc biệt là về các cấu hình và an toàn bộ nhớ hơn
Tại cuộc họp này, chúng tôi cũng đã thông qua lịch trình cho C++29, đây sẽ là một chu kỳ phát hành kéo dài ba năm nữa. Không có gì ngạc nhiên khi trọng tâm chính của cuộc thảo luận về tài liệu khung thời gian C++29 là tăng cường hơn nữa độ an toàn của bộ nhớ.
Tuần này, nhóm phụ tiến hóa ngôn ngữ chính (EWG) đã xem xét các bản cập nhật về một số đề xuất đang diễn ra trong lĩnh vực cải tiến thêm về loại/an toàn bộ nhớ cho C++ 29, bao gồm: theo đuổi các đề xuất nhằm giảm hơn nữa hành vi không xác định sẽ xuất hiện lại trong EWG để có thể đưa vào C++ 29; và theo đuổi việc phát triển hơn nữa các tài liệu hồ sơ an toàn trong phân nhóm an toàn và bảo mật (SG23) để sau đó được đưa đến EWG nhắm mục tiêu C++29. SG23 đặc biệt nghiên cứu Hồ sơ an toàn loại P3984 của Bjarne Stroustrup bằng cách sử dụng khung hồ sơ chung do Gabriel Dos Reis đề xuất.
Bên cạnh những phiên họp đó, an toàn loại và bộ nhớ đã được thảo luận rộng rãi trong hai phiên bổ sung có đông người tham dự: phiên họp tối vào tối thứ Tư với sự tham dự của đa số ủy ban và trong phiên họp dành riêng cho an toàn bộ nhớ EWG suốt chiều thứ Sáu với sự tham dự của khoảng 90 chuyên gia. Đặc biệt, tôi muốn cảm ơn Oliver Hunt của Apple đã trình bày báo cáo trải nghiệm thực tế P4158R0, “Đặt lại và hạn chế C++ để đảm bảo an toàn bộ nhớ,” báo cáo cách WebKit tăng cường hơn 4 triệu dòng mã bằng cách sử dụng phương pháp tập hợp con siêu tập hợp (như Hồ sơ của Stroustrup) và cho thấy điều đó đã tạo ra sự khác biệt sâu sắc như thế nào về tính bảo mật của mã C++ trong WebKit trên quy mô lớn. Dưới đây là một số điểm nổi bật từ trang trình bày giới thiệu (đã thêm nhấn mạnh):
“Đã thông qua ~4MLoC mã (tức là không có nhận xét, bài kiểm tra, thư viện bên ngoài, v.v.)
Đóng nhiều loại lỗ hổng, các chính sách hiện tại lẽ ra đã ngăn chặn phần lớn các hoạt động khai thác lịch sử
Đã tìm thấy (và ngăn chặn khả năng khai thác) các lỗi mới và lỗi hiện có”
C++ 29 đã được thiết lập để xây dựng nhiều hơn nữa dựa trên các cải tiến an toàn đã có trong C++ 26 và tôi hoan nghênh kỷ nguyên mới của chúng ta về các lớp phủ C++ an toàn hơn theo mặc định và vẫn không-không-chi phí-hiệu quả. C++26 là bước đầu tiên bước vào một kỷ nguyên mới về cơ bản: Đây không còn là C++ hoang dã ở miền Tây hoang dã của ông bà chúng ta nữa. Nhưng ngay cả khi C++ chuyển sang chế độ an toàn bộ nhớ hơn theo mặc định, thì nó vẫn đúng với cốt lõi lâu dài của nguyên tắc không chi phí chung của C++… bạn không phải trả tiền cho những gì bạn không sử dụng và ngay cả khi một số biện pháp an toàn rẻ đến mức chúng tôi có thể bật tính năng này theo mặc định bằng ngôn ngữ, bạn sẽ luôn có cách chọn không tham gia khi cần đạt được hiệu suất cuối cùng trong đường dẫn nóng hoặc vòng lặp bên trong đó.
Chúng tôi đã thực hiện công việc khác, bao gồm những việc khác liên quan đến an toàn chức năng: EWG đã xem xét các kế hoạch bổ sung để áp dụng kiểm tra hợp đồng bằng ngôn ngữ và thư viện tiêu chuẩn. Nhóm con số học (SG6) và nhóm con ươm tạo thư viện (SG18) đã tiến triển P3045R7, “Thư viện số lượng và đơn vị” của Mateusz Pusz, Dominik Berner, Johel Ernesto Guerrero Peña, Chip Hogg, Nicolas Holthaus, Roth Michaels và Vincent Reverdy đến nhóm phụ phát triển thư viện chính (LEWG), và chúng tôi đã có một phiên họp buổi tối về chủ đề này cho toàn thể ủy ban vào tối thứ Năm. Tôi khuyến khích đọc phần 7.1 “Các mối quan ngại về an toàn” trong bài báo, bao gồm cả việc công nghệ như thế trong bài báo này có thể cải thiện chuyến tham quan năm 1983 của Black Sabbath như thế nào (tất nhiên đã được châm biếm một cách vui nhộn trong This Is Spinal Tap).
Tiếp theo là gì
Hai cuộc họp tiếp theo của chúng tôi sẽ diễn ra ở Brno, Czechia vào tháng 6 và ở Búzios, Rio de Janeiro, Brazil vào tháng 11. Tại hai cuộc họp đó, chúng tôi sẽ bắt đầu bổ sung các tính năng vào bản dự thảo làm việc C++29 mới.
Kết thúc
Một lần nữa xin cảm ơn khoảng 210 chuyên gia đã tham dự cuộc họp trực tuyến và trực tiếp tại cuộc họp tuần này cũng như nhiều người khác tham gia vào hoạt động tiêu chuẩn hóa thông qua các cơ quan quốc gia của họ!
Nhưng chúng tôi sẽ không chậm lại… chúng tôi sẽ tiếp tục tổ chức các cuộc họp Zoom của nhóm phụ và sau đó chưa đầy ba tháng nữa, chúng tôi sẽ gặp lại nhau ở Czechia và trực tuyến để bắt đầu thêm các tính năng vào C++ 29, với nhiều nhóm viễn thông nhóm phụ đã được lên lịch từ bây giờ đến lúc đó. Một lần nữa xin cảm ơn mọi người đã đọc bài viết này vì đã quan tâm và ủng hộ C++ cũng như việc tiêu chuẩn hóa nó.
Tác giả: pjmlp