C++26
C++26 on C++-ohjelmointikielen ISO-standardiversio, joka kehitetään C++23-standardin seuraajaksi.[1] Standardin on suunniteltu valmistuvan vuonna 2026.[2]
Ominaisuudet
[muokkaa | muokkaa wikitekstiä]Mukaan äänestettyjä kohtia ovat:[3][4]
- hazardiosoittimet: rinnakkaiseen käsittelyyn tarkoitetut lukottomat osoittimet, joilla on yksi kirjoittaja ja useita lukijoita. Vain osoittimen omistaja voi asettaa sen arvon ja mikä tahansa määrä säikeitä voi lukea sen arvon.[5] Hazardiosoittimet ovat samankaltainen tekniikka kuin Read-Copy-Update (RCU); ensimmäinen on käytössä MongoDB:ssä ja jälkimmäinen on käytössä Linuxissa.[6][7] Myös Read-Copy-Update -mekanismin tukea on ehdotettu lisättäväksi C++26-standardiin.[8]
- nimen pois jättäminen tietyissä tilanteissa[9]
- määrittelemättömän käytöksen poistaminen tietyissä tilanteissa (P2621R3)[10]
- alustakohtaiset tiedostokahvat[11]
- contracts, funktioiden esi- ja jälkiehdot, ominaisuus on ollut kiistanalainen useista eri syistä johtuen[16][15][17]
- asynkroninen suoritus
std::execution[18]
- standardikirjaston vahvennukset[4][19]
Ehdotettuja kehityskohtia ovat:[20]
- lineaarialgebra (osa Fortranille kehitetystä BLAS-standardista)[21][22]
Neljäksi avainkohdaksi mainitaan asynkronisen suorittamisen std::execution parannukset, tyyppi- ja muistiturvallisuuden parannukset, reflektio ja contracts.[23] Eräs ehdotettu muutos on, että alustamaton muuttuja ei enää ole määrittelemätöntä (P2795R5). Muutoksen myötä alustamaton luku voidaan määritellä virheeksi.[24] Lisäksi muut määrittelemättömät käytökset voidaan poistaa (P3436R1).[25]
Contracts
[muokkaa | muokkaa wikitekstiä]Contracts on C++:n tuki sopimuspohjaiseen ohjelmointiin, johon kuuluvat avainsanat contract_assert, pre ja post. Avainsanoilla voidaan määrittää esi- ja jälkiehtoja, joita ohjelma ei voi rikkoa suorituksen aikana. Contracts mahdollistaa assert-määrityksien siirtämisen aliohjelmien määrittelyyn, jolloin ne ovat näkyviä aliohjelman kutsujille ja staattinen analyysin työkaluille. Menettely korvaa C-kielen assert-makron.[26][27]
Lähteet
[muokkaa | muokkaa wikitekstiä]- ↑ Current Status isocpp.org. Viitattu 5.7.2024. (englanniksi)
- ↑ C++ IS schedule (PDF) open-std.org. 14.5.2024. Viitattu 5.7.2024. (englanniksi)
- ↑ Five Awesome C++ Papers for the H1 2023 - C++26 cppstories.com. Viitattu 17.7.2024. (englanniksi)
- 1 2 Herb Sutter: C++26 is done! — Trip report: March 2026 ISO C++ standards meeting (London Croydon, UK) herbsutter.com. 29.3.2026. Viitattu 31.3.2026. (englanniksi)
- ↑ Hazard Pointers for C++26 (PDF) open-std.org. Viitattu 5.7.2024. (englanniksi)
- ↑ Proposed Wording for Concurrent Data Structures: Hazard Pointer and Read-Copy-Update (RCU) (PDF) open-std.org. Viitattu 5.7.2024. (englanniksi)
- ↑ Paul E. McKenney: Structured Deferral: Synchronization via Procrastination (PDF) dl.acm.org. 2013. doi:10.1145/2488364.2488549 Viitattu 5.7.2024. (englanniksi)
- ↑ Read-Copy Update (RCU) (PDF) open-std.org. 8.3.2023. Viitattu 17.7.2024. (englanniksi)
- ↑ A nice placeholder with no name (PDF) open-std.org. Viitattu 17.7.2024. (englanniksi)
- ↑ UB? In My Lexer? (PDF) open-std.org. Viitattu 17.7.2024. (englanniksi)
- ↑ Native handles and file streams open-std.org. Viitattu 17.7.2024. (englanniksi)
- ↑ Reflection for C++26 open-std.org. 15.10.2023. Viitattu 17.7.2024. (englanniksi)
- ↑ Reflection for C++26 open-std.org. 12.10.2024. Viitattu 15.11.2024. (englanniksi)
- ↑ Reflection for C++26 open-std.org. 20.6.2025. Viitattu 31.3.2026. (englanniksi)
- 1 2 Tim Anderson: Contracts are in C++26 despite disagreement over their value theregister.com. 31.3.2026. Viitattu 31.3.2026. (englanniksi)
- ↑ Contracts for C++ (PDF) open-std.org. 13.2.2025. Viitattu 31.3.2026. (englanniksi)
- ↑ C++26 Contract Assertions, Reasserted (PDF) open-std.org. 6.10.2025. Viitattu 31.3.2026. (englanniksi)
- ↑ P2300R10 std::execution open-std.org. 28.6.2024. Viitattu 14.8.2024. (englanniksi)
- ↑ Louis Dionne, Alex Rebert, Max Shavrick, Konstantin Varlamov: Practical Security in Production - Hardening the C++ Standard Library at massive scale queue.acm.org. 7.11.2025. Viitattu 31.3.2026. (englanniksi)
- ↑ Ville Voutilainen: To boldly suggest an overall plan for C++26 open-std.org. 20.9.2022. Viitattu 17.7.2024. (englanniksi)
- ↑ Basic linear algebra algorithms (since C++26) en.cppreference.com. Viitattu 14.8.2024. (englanniksi)
- ↑ Basic Linear Algebra Subprograms Technical (BLAST) Forum Standard (PDF) netlib.org. 21.8.2001. Viitattu 14.8.2024. (englanniksi)
- ↑ Tim Anderson: ISO C++ Chair Herb Sutter leaves Microsoft, declares forthcoming C++ 26 ‘most impactful release since C++11’ devclass.com. 12.11.2024. Viitattu 15.11.2024. (englanniksi)
- ↑ Thomas Köppe: Erroneous behaviour for uninitialized reads open-std.org. 22.3.2024. Viitattu 15.11.2024. (englanniksi)
- ↑ Herb Sutter: Strategy for removing safety-related UB by default (PDF) isocpp.org. 31.10.2024. Viitattu 15.11.2024. (englanniksi)
- ↑ Contract assertions en.cppreference.com. Viitattu 21.5.2026. (englanniksi)
- ↑ Sergio De Simone: C++26: Reflection, Memory Safety, Contracts, and a New Async Model infoq.com. 17.4.2026. Viitattu 21.5.2026. (englanniksi)
Aiheesta muualla
[muokkaa | muokkaa wikitekstiä]- C++26 ominaisuudet ja tuki kääntäjissä (englanniksi)