Standarti C++26 është miratuar

Komiteti ISO për standardizimin e gjuhës C++ përfundoi miratimin e versionit përfundimtar të specifikimeve që formojnë standardin ndërkombëtar "C++26". Mundësitë e paraqitura në specifikim pjesërisht janë mbështetur tashmë në kompilerët GCC, Clang dhe Microsoft Visual C++. Bibliotekat standarde që mbështesin C++26 janë implementuar në kuadër të projektit Boost.

Në dy muajt e ardhshëm, specifikimi i miratuar do të jetë në fazën e përgatitjes së dokumentit për publikim, ku do të kryhet punë për redaktimin e gabimeve ortografike dhe shtypore. Në fillim të nëntorit, varianti përfundimtar i dokumentit do të dërgohet në ISO për publikim me emrin e formalizuar ISO/IEC 14882:2026.

Karakteristikat kryesore të C++26:

  • JanĂ« implementuar elementet e programimit kontraktual (Contracts), qĂ« lejojnĂ« pĂ«rcaktimin e specifikimeve formale tĂ« ndĂ«rfaqeve me ndihmĂ«n e tre operatorĂ«ve tĂ« rinj: pre (kusht paraprak), post (kusht pas) dhe contract_assert (kontrolli i pretencĂ«s). OperatorĂ«t "pre" pĂ«rcakton kushtet paraprake qĂ« duhet tĂ« plotĂ«sohen para thirrjes (kontrolli i tĂ« dhĂ«nave hyrĂ«se); "post" — kushtet qĂ« duhet tĂ« respektohen pas ekzekutimit (kĂ«rkesat pĂ«r tĂ« dhĂ«nat dalĂ«se); contract_assert — kushtet pĂ«r ndodhitĂ« pĂ«rjashtuese. Kjo mundĂ«si do tĂ« jetĂ« e disponueshme nĂ« GCC 16. int f(const int x) pre (x != 1) // kĂ«rkesat pĂ«r tĂ« dhĂ«nat hyrĂ«se post (r : r == x && r != 2) // kĂ«rkesat pĂ«r rezultatin; r — vlera me rezultatin { contract_assert (x != 3); return x; }
  • ËshtĂ« shtuar mbĂ«shtetje pĂ«r refleksionin (Reflection), qĂ« lejon gjurmimin dhe modifikimin e elementeve tĂ« programit nĂ« fazĂ«n e pĂ«rpunimit. JanĂ« shtuar operatorĂ«t e rinj "^^" pĂ«r marrjen e meta-informacionit nĂ« lidhje me konstrukcionet gramatikore dhe "[:
:]" pĂ«r tĂ« kryer transformimin pĂ«r ndryshe. PĂ«r transformimin dhe pĂ«rpunimin e informacionit tĂ« marrĂ« gjatĂ« inspektimit, Ă«shtĂ« propozuar biblioteca std::meta dhe janĂ« tĂ« disponueshme mundĂ«si si llogaritjet me konstantet. MbĂ«shtetje pĂ«r refleksionin do tĂ« shtohet nĂ« GCC 16. constexpr int i = 42, j = 42; constexpr std::meta::info r = ^^i, s = ^^i; static_assert(r == r && r == s); static_assert(^^i != ^^j); // 'i' dhe 'j' kanĂ« vlera tĂ« ndryshme. static_assert(constant_of(^^i) == constant_of(^^j)); // 'i' dhe 'j' janĂ« tĂ« njĂ«jtĂ« static_assert(^^i != std::meta::reflect_constant(42)); // ndryshe nga vlera 42
  • ËshtĂ« shtuar operatori "template for" pĂ«r tĂ« iteruar elemente si paketat e parametrave, objekte tĂ« ngjashme me tuple dhe rezultatet e reflektimit (metaobjekte) nĂ« fazĂ«n e kompilimit nĂ« stilin e njĂ« cikli tĂ« zakonshĂ«m. Kur "template for" ekzekutohet, trupi i ciklit zgjerohet pĂ«r çdo element dhe çdo iterim pĂ«rpunoohet nĂ« njĂ« hapĂ«sirĂ« tĂ« veçantĂ«, ku variabla e ndryshueshme nĂ« cikĂ«l Ă«shtĂ« njĂ« konstantĂ«. NĂ« kontekstin e reflektimit, "template for" mund tĂ« pĂ«rdoret pĂ«r tĂ« lĂ«vizur nĂ«pĂ«r pronat e klasave ose enumeracioneve. MundĂ«sia do tĂ« shfaqet nĂ« GCC 16. void f() { template for (constexpr int I : std::array{1, 2, 3}) { static_assert(I < 4); } } do tĂ« zgjerohet nĂ«: void f() { { constexpr auto&& __range = std::array{1, 2, 3}; constexpr auto __begin = __range.begin(); constexpr auto __expansion-size = __range.end() — __begin; \/\/ 3 { constexpr int I = *(__begin + 0); static_assert(I < 4); } { constexpr int I = *(__begin + 1); static_assert(I < 4); } { constexpr int I = *(__begin + 2); static_assert(I < 4); } } }
  • ËshtĂ« shtuar framework-u std::execution pĂ«r ekzekutimin asinkron dhe paralel tĂ« kodit. Ofrohen objekte scheduler, qĂ« pĂ«rcakton planifikuesin e kryerjes (njĂ« thread, grup threads, GPU, event loop), sender, qĂ« pĂ«rcakton punĂ«n pĂ«r t'u kryer, dhe receiver - trajtuesin e rezultatit. using namespace std::execution; scheduler auto sch = thread_pool.scheduler(); sender auto begin = schedule(sch); sender auto hi = then(begin, []{ std::cout < "Hello world! Have an int."; return 13; }); sender auto add_42 = then(hi, [](int arg) { return arg + 42; }); auto [i] = this_thread::sync_wait(add_42).value();
  • ËshtĂ« shtuar biblioteka std::simd pĂ«r tĂ« paralelizuar ekzekutimin e operacioneve mbi tĂ« dhĂ«nat duke pĂ«rdorur grupe instrukcionesh SIMD, si AVX-512 dhe NEON, duke pĂ«rdorur sistemin standard tĂ« tipeve C++. std::simd a = {1.0f, 2.0f, 3.0f, 4.0f}; std::simd b = {5.0f, 6.0f, 7.0f, 8.0f}; std::simd result = a + b;
  • ËshtĂ« propozuar njĂ« implementim i vektorit (arrĂ«) me madhĂ«si tĂ« ndryshueshme std::inplace_vector, qĂ« vendoset nĂ« stack, madhĂ«sia e tĂ« cilit pĂ«rcaktohet nĂ« fazĂ«n e kompilimit. API Ă«shtĂ« e ngjashme me std::vector, por elementĂ«t e arrĂ«s ruhen jo nĂ« "heap", por brenda objektit. inplace_vector a(10); inplace_vector b(std::move(a)); assert(a.size() == 10);
  • ËshtĂ« shtuar direktyva "#embed", e destinuar pĂ«r tĂ« inkorporuar nĂ« kod burimet binarĂ«. const unsigned char icon_display_data[] = { #embed "art.png" };
  • ShtatĂ« pranuar mbĂ«shtetje pĂ«r gjenerimin dhe pĂ«rpunimin e pĂ«rjashtimeve nĂ« fazĂ«n e pĂ«rpunimit kur ka gabime nĂ« kontekstin constexpr. constexpr std::optional checked_divide(unsigned n, unsigned d) { provoni { ktheni ndarjen(n, d); } kapni (
) { ktheni std::nullopt; } } constexpr date parse_date(std::string_view input) { auto [correct, year, month, day] = ctre::match(input); se nuk Ă«shtĂ« e saktĂ«) { hedhni incorrect_date{input}; } ktheni build_date(year, month, day); }
  • Implementuar struktura tĂ« dhĂ«nash std::hive pĂ«r ruajtjen e pandodhur tĂ« tĂ« dhĂ«nave dhe pĂ«r tĂ« siguruar ripĂ«rdorimin e memories tĂ« lĂ«shuar nga elementĂ«t e fshirĂ«. StrukturĂ« e optimizuar pĂ«r ngarkesa me intensitet tĂ« lartĂ« nĂ« shtimin dhe fshirjen e elementĂ«ve nĂ« rend tĂ« rastĂ«sishĂ«m. Ndryshe nga tabelat, fshirja e njĂ« elementi nĂ« std::hive nuk pĂ«rfshin zhvendosjen e elementĂ«ve tĂ« tjerĂ«, por rezulton nĂ« shĂ«nimin e elementit tĂ« fshirĂ« si tĂ« zbrazĂ«t, me mbushjen e pozites tĂ« lĂ«shuar pas shtimit tĂ« njĂ« elementi tĂ« ri.
  • Shtuar biblioteka std::linalg me API pĂ«r algebra tĂ« linjare, e bazuar nĂ« BLAS.
  • Shtuar mbĂ«shtetje pĂ«r mekanizmin e sinkronizimit Hazard pointer, duke lejuar qĂ« pa vendosjen e bllokimeve tĂ« parandalojĂ« lĂ«shimin e memories sĂ« objekteve me tĂ« cilat vazhdohet puna nĂ« thjeshtĂ«si tĂ« tjera. Kur njĂ« objekt fshihet, ai thjesht shĂ«nohet si tĂ« fshirĂ«, por memoria e mbajtur nga objekti lĂ«shohet vetĂ«m kur tĂ« gjitha thjeshtĂ«sitĂ« largojnĂ« hazard-pointerin, i vendosur gjatĂ« punĂ«s me objektin.
  • Shtuar mbĂ«shtetje pĂ«r mekanizmin e sinkronizimit RCU (Read-Copy Update) - nĂ« operacionet e shkrimit krijohet njĂ« ekzemplar i ri i objektit, ndĂ«rsa operacionet e leximit nuk bllokohen, por vazhdojnĂ« tĂ« punojnĂ« me ekzemplarin e vjetĂ«r. Pas pĂ«rfundimit tĂ« ndryshimit, ekzemplari i ri bĂ«het aktiv dhe operacionet e reja tĂ« leximit kryhen tashmĂ« me tĂ«, ndĂ«rsa ekzemplari i vjetĂ«r fshihet pas pĂ«rfundimit tĂ« thjeshtĂ«sive qĂ« e lexojnĂ« atĂ«.
  • Kryer ndryshime pĂ«r tĂ« forcuar sigurinĂ« e bibliotekĂ«s standarde, tĂ« tilla si kontrollet e vlerave tĂ« pranueshme dhe daljes nga kufiri i tamponĂ«ve. PĂ«r shembull, kur qasje nĂ« elementin «constexpr reference operator[](size_type idx) const;» shtohet njĂ« kontroll i kushtit «idx < size()".
  • Siguruar mundĂ«sinĂ« e pĂ«rdorimit tĂ« fjalĂ«s kyçe «constexpr» me njĂ« lloj operatori «new» (placement new) pĂ«r vendosjen e objektit nĂ« memorie tĂ« caktuar mĂ« pĂ«rpara gjatĂ« pĂ«rpunimit.
  • Shtesa e mbĂ«shtetjes pĂ«r lidhjet e strukturuara (structured binding) nĂ« kontekstin e "constexpr", pra, referencat nĂ« shprehjet konstante tani mund tĂ« jenĂ« vetĂ« shprehje konstante. MbĂ«shtetja Ă«shtĂ« implementuar pĂ«r arrays dhe struktura tĂ« thjeshta. constexpr int arr[] = {1, 2}; constexpr auto [x, y] = arr;
  • NĂ« lidhjet e strukturuara Ă«shtĂ« shtuar mundĂ«sia e pĂ«rdorimit tĂ« sintaksĂ«s « » pĂ«r tĂ« pĂ«rmendur paketat (pack), duke kapur numrin e mbetur tĂ« elementeve nga sekuenca e caktuar. auto [x,y,z] = f(); // nĂ« variablat x, y, z do tĂ« ruajnĂ« tre elementĂ«t e kthyera nga f(). auto [
xs] = f(); // nĂ« paketĂ«n xs do tĂ« ruhen tĂ« gjithĂ« elementĂ«t e kthyera nga f(). auto [x, 
rest] = f(); // NĂ« x do tĂ« ruhet elementi i parĂ«, ndĂ«rsa nĂ« rest — elementĂ«t e tjerĂ«. auto [x, y, 
rest] = f(); // NĂ« x do tĂ« ruhet elementi i parĂ«, nĂ« y — i dyti, ndĂ«rsa nĂ« rest — i treti. auto [x, 
rest, z] = f(); // nĂ« x — i pari, nĂ« rest — i dyti, nĂ« z — i treti.
  • Shtesa e mbĂ«shtetjes pĂ«r "zhvendosjen triviale" tĂ« tipave (Trivial Relocatability), e cila lejon optimizimin e zhvendosjeve tĂ« objekteve tĂ« caktuar pĂ«rmes kopjimit tĂ« tyre nĂ« memorie pa thirrjen e konstruktorĂ«ve ose shkatĂ«rruesve. PĂ«r klasa janĂ« implementuar pronat memberwise_trivially_relocatable dhe memberwise_replaceable, dhe pĂ«r zhvendosjen e ulĂ«t tĂ« njĂ« ose mĂ« shumĂ« objekteve janĂ« shtuar funksionet trivially_relocate_at dhe trivially_relocate.
  • ËshtĂ« realizuar mbĂ«shtetje pĂ«r tĂ« lidhur funksionin main() me modul global dhe pĂ«r tĂ« pĂ«rkufizuar funksionin main() nĂ« modulet e emĂ«ruara.
  • Shtimi i operatorit variativ "friend" ("friend Ts
").
  • JanĂ« realizuar atributet pĂ«r lidhjet e strukturuara;
  • Shtimi i sintaksĂ«s ‘= delete(«arsye»)’.
  • NĂ« setin bazĂ« tĂ« simboleve janĂ« pĂ«rfshirĂ« "@", "$" dhe "`".
  • Sigurohet mundĂ«sia e aplikimit tĂ« lidhjeve tĂ« strukturuara (structured binding) si kusht nĂ« operatorĂ«t if dhe switch.
  • Shtogu i mundĂ«sinĂ« e pĂ«rdorimit tĂ« disa variablave mbushĂ«s me emrin «_» nĂ« njĂ« hapĂ«sirĂ« tĂ« vetme, pĂ«r shembull, tani janĂ« konstrukte tĂ« vlefshme: struct S { int _, _; }; void func() { int _, _; } void other() { int _; // mĂ« parĂ« shfaqej njĂ« paralajmĂ«rim nĂ« modin -Wunused }
  • Ësht e mundur pĂ«rdorimi i literalĂ«ve tĂ« vargjeve nĂ« njĂ« kontekst ku ato nuk pĂ«rdoren pĂ«r inicializimin e njĂ« array karakteresh dhe nuk bien nĂ« kodin rezultues, por pĂ«rdoren vetĂ«m gjatĂ« kompilimit pĂ«r mesazhe diagnostikuese dhe parapĂ«rpunim, pĂ«r shembull, si parametro tĂ« drejtpĂ«rdrejta dhe atributeve _Pragma, asm, extern, static_assert, [[deprecated]] dhe [[nodiscard]].
  • JanĂ« shtuar funksione tĂ« integruara: «__builtin_is_within_lifetime» pĂ«r tĂ« kontrolluar aktivitetin e alternativĂ«s nĂ« unione (union) dhe «__builtin_is_virtual_base_of» pĂ«r tĂ« kontrolluar nĂ«se klasa bazĂ« Ă«shtĂ« virtuale.
  • Kryerja e cikleve triviale infinite pa sjellje tĂ« paqartĂ«.
  • Siguruar dhĂ«nien e njĂ« gabimi gjatĂ« fshirjes sĂ« njĂ« treguesi nĂ« njĂ« tip tĂ« paplotĂ«.
  • Deklarimi i sintaksĂ«s pĂ«r pĂ«rcaktimin e parametrave variativĂ« me pikĂ« tĂ« shumĂ«fishta pa njĂ« presje paraprake Ă«shtĂ« shpallur i dhĂ«nĂ« pas. (pĂ«r shembull, kur shkruhet «void e(int...)» nĂ« vend tĂ« «void e(int, 
)»).
  • PĂ«rdorimi i makrove pĂ«r deklarimin e moduleve Ă«shtĂ« i ndaluar.
  • ËshtĂ« shpallur i dhĂ«nĂ« pas kryerja e transformimeve tĂ« ndĂ«rlidhura implicit tĂ« vlerave tĂ« enumeruara nĂ« llogaritjet aritmetike. int main() { enum E1 { e }; enum E2 { f }; bool b = e <= 3.7; // e dhĂ«nĂ« pas int k = f - e; // e dhĂ«nĂ« pas int x = +f - e; // OK }
  • MbĂ«shtetja pĂ«r krahasimin e drejtpĂ«rdrejtĂ« tĂ« array-ve Ă«shtĂ« ndĂ«rprerĂ«. int arr1[5]; int arr2[5]; bool same = arr1 == arr2;
  • Klasa template is_trivial Ă«shtĂ« shpallur e dhĂ«nĂ« pas.

    Burimi: opennet.ru
Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster