C++26
From Wikipedia, the free encyclopedia
Remove ads
C++26 je neformální označení připravované verze normy ISO/IEC-14882 programovacího jazyka C++, která bude následníkem C++23. Aktuální pracovní verze je N5014.[1] Pracovní verze již obsahuje všechny rysy[2] a byla rozeslána k mezinárodnímu hlasování o připomínkách.[3] Po vyřešení některých připomínek na zasedání standardizačního výboru v listopadu 2025 v Kona na Hawaji se očekává, že výbor pro standardy C++ dokončí řešení připomínek, technicky zfinalizuje pracovní verzi, kterou rozešle pro závěrečné hlasování při následujícím standardizačním zasedání[2] v Londýně v březnu 2026.[4] Některé z budoucích vlastností lze vyzkoušet na krátkých úryvcích kódu použitím experimentálních a standardních překladačů s použitím Compiler Explorer. Některé varianty překladačů se odlišují pouze krátkými identifikátory dokumentů navrhujících nové vlastnosti, které implementují, jako je „P3372“ pro constexpr containery a adaptéry.
Návrhy a vlastnosti, které C++ Standards Committee přijalo do standardu, stejně jako zápisy ze standardizačního zasedání v bulharské Sofii jsou veřejně dostupné.[5]
Remove ads
Vlastnosti
Do C++26 jsou připravované následující změny:
Jazyk
- Reflexe v době překladu.[6] (experimentální větev Clang, jejímž autorem je Dan Katz, která implementuje tyto vlastnosti. Tuto větev, větve GCC a jiné implementace z EDG je možné vyzkoušet pomocí Compiler Explorer.) Pro vyvolání reflexí se místo klíčového slova
reflexprpoužívá nový operátor^^. - Kontraktové programování[7] přidává klíčové slovo
contract_asserta identifikátorypreapostse speciálním významem[8] (podpora kontraktů je dostupná v experimentální větvi Clang, jejímž autorem je Eric W Fiselier, a v několika variantách GCC jako Compiler Explorer.) - Nevyhodnocované řetězce
- Přidání znaků
@,$a`do základní znakové sady = delete("reason");- Uživatelsky generované zprávy
static_assert[9] - Chybové chování při čtení neinicializovaných dat
- Smazání ukazatele na neúplný typ musí být označeno za chybnou konstrukci
- Odstranění nedoporučovaných porovnání polí
- Strukturované vazby (anglicky bindings) pro
constexpra reference na proměnné sconstexpr constexprumístěnínewconstexprzměna typu zvoid*constexprkontejnery a adaptéry- Variadické friend funkce
- Umožnění vyhazování výjimek při vyhodnocování konstant
- Zástupné proměnné bez jména
- Řazení omezení obsahujících fold výrazy
- Strukturované vazby mohou zavést balíček s proměnným počtem prvků (anglicky pack)[10]
- Pack indexování
- Atributy pro strukturované vazby
- Deklarace strukturovaných vazeb v roli podmínek
- Nová direktiva
#embed(poprvé představená v C23) pro přidání binárních prostředků a pro__has_embed, které umožňuje testování dostupnosti prostředků pomocí direktiv preprocesoru - Oxfordský způsob psaní variadických parametrů s čárkou, tj. „zákaz parametrů vyjádřených třemi tečkami bez předchozí čárky. Syntaxe
(int...)je nekompatibilní s jazykem C, škodlivá pro C++, a lze ji snadno nahradit(int, ...).“[11]
Knihovna
<meta>: podpora reflexí při překladu- Podpora anotací v reflexích, které se chovají jinak než existující systém atributů používaných překladačem
<contracts>: podpora kontraktového programování- Lepší kontrola mezí ve standardní knihovně[12]
- Paralelní plánovač poskytující standardní kontext asynchronního provádění, který zaručuje postup[13]
<simd>: podpora paralelního přístupu k datům (SIMD)- Asynchronní model odesilatele/příjemce pro strukturovaný paralelismus[14] (Libunifex je implementační prototyp, který lze přeložit na C++17 nebo novějších verzích)
<hazard_pointer>: hazardní ukazatele pro vláknastd::copyable_functionstd::is_within_lifetime<hive>: podpora datové struktury Hive, která znovuvyužívá paměť vymazaných prvků<rcu>: podpora mechanismu pro bezpečné zpětné získávání paměti read-copy-update<inplace_vector>: podpora datové struktury vektor na místě, což je velikostně přizpůsobitelné souvislé pole pevné kapacity bez změn umístěnístd::submdspan()- Nativní popisovače pro souborové proudy
std::formatter<std::filesystem::path>- Propojení sřetězcových proudů se
std::string_view - Propojení
std::bitsetsestd::string_view std::views::concat- Spojování řetězců se string views
<text_encoding>: podpora přístupu k registru znakových sad IANA- Tisk prázdných řádků pomocí
std::println() std::ranges::generate_random<linalg>: volné rozhraní pro funkce lineární algebry vycházející z BLAS- Podpora hašování pro hodnoty třídy
std::chrono - Přidání protokolu n-tic do
std::complex - Více
constexprpro<cmath>a<complex> - Přidání nových předpon z SI 2022 do ratios:
std::quecto,std::ronto,std::ronna, astd::quetta - Aritmetika se saturací, mimo jiné
std::add_satastd::div_sat <debugging>: podpora ladění a jazykové vlastnosti pro podporu debuggerů
Remove ads
Příjetí
Několik lidí okamžitě po skončení standardizačního zasedání v Sofii, které dokončilo seznam vlastností nové verze,[13][15] a po mezinárodní konferenci „C++ On See“ vydalo zprávy z jednání.[16]
Všichni upozorňovali zejména na velkou změnu, kterou představuje zavádění reflexí v době překladu. Konkrétně, Herb Sutter, předseda Standardizačního výboru ISO C++ a Hana Dusíková, asistentka předsedy pracovní skupiny „Vývoj jazyka“ Standardizačního výboru C++, popsali potenciální dopady začlenění reflexí do jazyka C++ jako „zcela nový jazyk“.[13]
Někteří členové C++ výboru z různých důvodů kritizovali kontrakty pro C++26.[17]
Vlastnost triviální relokatability, pro kterou byly navrženy nové identifikátory/specifikátory vlastností třídy trivially_relocatable_if_eligible a replaceable_if_eligible,[18] byla kvůli implementačním chybám z C++26 odstraněna a odložena do pozdějšího standardu.[19]
Remove ads
Odkazy
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads