Menetrend szerint érkezik a C++20
Az idei Craft konferencia erős előadói gárdát sorakoztatott fel, közülük is kiemelkedett azonban Bjarne Stroustrup - a sztárfejlesztőt valószínűleg nem sokaknak kell bemutatni, hiszen a C++ megalkotójáról van szó, akivel a rendezvényen nekünk is alkalmunk nyílt néhány szót váltani, és akit nyelv múltjáról-jövőjéről faggattuk.
Bjarne Stroustrup a Morgan Stanley technológiai divíziójánál dolgozik New Yorkban, ahol elosztott rendszerek tervezésével foglalkozik - ami komoly kihívást jelentő feladat, miután egy Morgan Stanley méretű bank hatalmas mennyiségű adatot mozgat rengeteg gép, ország között. Lényegében egy világméretű elosztott rendszerről van szó, amelyre ráadásul nagyon szigorú megbízhatósági elvárások vonatkoznak, akár egyetlen tranzakció elvesztése is nagyon komoly következményekkel járhat. A fejlesztő mindennapjait a hasonló, méretes elosztott rendszerek kihívásai mellett az egyetemi oktatás tölti ki, a Columbia Egyetemen tart előadásokat, emellett pedig a C++ szabványért felelős bizottság munkáját is felügyeli - miután a programnyelv megalkotójáról beszélünk, ez utóbbi nem különösebben meglepő szerepkör.
Négy évtizede tartó munka
Magát a C++-t egy egészen konkrét probléma hívta életre 1979-ben: ahogy Dr. Stroustrup felidézte, egy UNIX klaszter építésén dolgozott, aminek során komoly nehézséget jelentett számára, hogy nem állt rendelkezésére egy olyan nyelv, amely a képes lett volna kezelni a memória- és folyamatkezelőkhöz, illetve az illesztőprogramokhoz hasonló alacsony szintű komponenseket, miközben a magas szintű feladatokkal is megbirkózik, mint például az absztrakció. Noha már akkor rendelkezésre álltak a hardverközeli feladatokra használható nyelvek és az absztrakcióra alkalmas programnyelvek is, mindkettővel egyszerre nem volt amelyik meg tudott volna küzdeni. Ennek a problémának az orvoslására született meg a C++, amely a GitHub tavalyi évre vonatkozó statisztikái szerint 2018-ra már globálisan az ötödik legnépszerűbb programozási nyelvvé nőtte ki magát.
A nyelv fejlődése persze azóta is folyamatos, és már a következő, C++20 néven emlegetett nagy kiadása is a csőben van, amely a jelenlegi C++17-et követi majd. Ahogy a nevezéktanból sejthető, a jelenleg használt főverzió 2017-ben látott napvilágot, a C++20 rajtja pedig 2020 végére várható. Dr. Stroustrup kérdésünkre elmondta, az új kiadás legfontosabb újdonságai a modulok, a conceptek, vagy "koncepciók" bevezetése, a contractok, azaz szerződések megjelenése, valamint a korutinok lesznek - de több hasznos új library érkezése is várható.
Ahogy fogalmaz, a modulok egyrészt sokkal jobb "kódhigiéniát" biztosítanak majd, miközben sokkal gyorsabb fordítást tesznek majd lehetővé, a korutinok pedig sokkal hatékonyabb pipeline-ok előtt nyitnak majd kaput, továbbá az aszinkron munkát is sokkal egyszerűbbé teszik. A nyelv atyjának személyes kedvencei ugyanakkor a koncepciók (concepts), amelyekkel a generikus programozás sokkal egyszerűbb és fenntarthatóbb lesz - azokkal ugyanis kiküszöbölhetővé válik a template-ek sokszor összetett szintaxisa. A megoldás további előnyei lehetnek az egyértelműbb hibaüzenetek is, a részletesebb típusellenőrzésnek hála.
A koncepciókat egyébként egyes újonnan érkező libraryk is használják, mint a range library. A date library is hasznos frissítés, utóbbi nevéből sejthető módon a dátumok és naptárak kezelését segíti - miután ez a feladat szinte minden vállalatnál, üzletnél előkerül valamilyen formában, sok fejlesztő veszi majd hasznát az egyszerűbb, elegánsabb dátumkezelésnek.
Késés nélkül jön az új kiadás
Dr. Stroustrup kiemelte, hogy a C++20 nagyon komoly előrelépés lesz a jelenleg is használt C++17-hez képest - a szabvány leghamarabb 2020 végén érkezhet meg. Az új verzióval kapcsolatos technikai munka már jövő év tavaszán lezárulhat, ezután ugyanakkor a frissített szabványnak még hosszas jóváhagyási folyamatokon kell átesnie, egyebek mellett Genfben az ISO testülettől is zöld utat kell kapnia - a bizottság itt jellemzően kérvényez néhány formai változtatást, műszaki módosításokra azonban általában nincs már szükség. A vonatkozó dokumentumoknak tehát az élesedésig hosszú, bürokratikus utat kell bejárnia - ez ugyanakkor érthető, miután egy nemzetközi, számos iparágat érintő szabványról van szó, megvan a helye tehát a hasonló formalitásoknak.
Ünnepi mix a bértranszparenciától a kódoló vezetőkig Négy IT karrierrel kapcsolatos, érdekes témát csomagoltunk a karácsonyfa alá.
A végleges szabvány közzétételére kitűzött, 2020 végi dátum egyébként korántsem elrugaszkodott terv, a C++17 és az azt megelőző C++14 is időben, menetrend szerint látott napvilágot. Persze a határidők betartása nem egyszerű feladat, annak érdekében sokszor egy-egy funkciót a következő kiadásra kell csúsztatni - a dolgot pedig tovább nehezíti, hogy a nyelv gondozásáért és fejlesztéséért felelős, nagyjából 350 tagot számláló bizottság a különböző vitás kérdéseket nem igazán szereti úgy eldönteni, hogy azokban ne lenne legalább 90 százalékos egyetértés. Ahogy Dr. Stroustrup elmondta, még a 80 százalék is marginálisnak számít. Az átfogó egyetértés ráadásul iparágakon, és nemzeteken is át kell hogy íveljen - ennek fényében nem meglepő, hogy egy-egy új nyelvverzió kiadása három évet vesz igénybe. Dr. Stroustrup egyébként már a koncepciókat is a C++17-ben akarta elérhetővé tenni, miután azonban akkor nem tudott elég embert meggyőzni az ügyről, a bevezetés végül a 2020-as kiadásra csúszott - ahogy fogalmaz, könnyű így három évet elveszíteni. A határidőket ugyanakkor kőkeményen tartani kell, hiszen ha egy elcsúszik, jó eséllyel a következő is el fog, ami hosszú távon komoly problémákhoz vezetne. Ezért egyszerűbb inkább az egyes funkciókat elhalasztani, ha az adott C++ kiadás vonata elment, meg kell várni a következőt.
A C++20 tehát sok fontos változást hoz majd, magában a nyelvben, illetve ebből adódóan az azzal kapcsolatos munkában, a fejlesztési folyamatokban is. Annak kapcsán, hogy pontosan hogyan fognak változni a C++ fejlesztők mindennapjai az új kiadás megjelenésével, Dr. Stroustrup szerint korai lenne találgatni, mindenesetre sok feladat könnyebbé válik majd. A modulokkal a fordítási-debugging ciklusok sokkal gyorsabbak lesznek, a fordítási idők lecsökkenésével pedig jó eséllyel a fejlesztők is bátrabban próbálhatják ki új funkciók beépítését az adott szoftverbe, illetve a debuggolási szokások is megváltozhatnak. A koncepciók bevezetése átrajzolja majd, hogy az emberek általában hogyan gondolkoznak a dizájnról a generikus programozásban.
Már a 2023-as tervek is körvonalazódnak
De természetesen már a későbbi verziókra vonatkozóan is vannak tervek, Dr.Stroustrup a potenciálisan a C++23-ra vagy akár 2026-os kiadásra csúszó funkciók között említette az executorokat, amelyek lényegében általános concurrency modulokként működnek, egyebek mellett a networking funkciók támogatására. Ha minden gördülékenyen halad, a statikus reflexiók (static reflection) is bekerülhetnek a C++23-ba - ugyanakkor a nyelv fejlődését rengeteg tényező befolyásolja, így egyelőre nehéz lenne megmondani, mi kerül be biztosan a következő kiadásba.
A C++20 újdonságai mellett a nyelv megalkotóját, akárcsak nemrég Kevlin Henney-t, megkérdeztük arról is, mit gondol a fejlesztői pálya népszerűsödéséről, illetve mit javasol azoknak a felnőtteknek, akik akár valamilyen egészen más iparágból érkeznek a területre, valamely manapság népszerű felnőttképző szolgáltatáson keresztül, vagy akár autodidakta módszerekkel. Noha Dr. Stroutstrup saját tapasztalatokkal nem rendelkezik a hasonló váltásról, ahogy fogalmazott, az alapok megfelelő elsajátítása nélkülözhetetlen, sokan beleesnek abba a hibába, hogy túl gyorsan akarnak fejlesztők lenni, és úgy vágnak bele a gyakorlatba, hogy nem látják át a megcélzott rendszerek működését. Amennyi időt csak lehet rá kell tehát szánni az alapok bevésésére, persze sokaknak nehéz lehet megfogadni ezt a tanácsot, akik sietnek az új, vonzó területre váltani - de mindenképp jó tanácsról van szó, amelyet nem kevés tapasztalat nyomatékosít.