Jekk fil-bidu tad-dramm tgħid li hemm kodiċi C++ imdendel mal-ħajt, allura sa l-aħħar huwa marbut li jisparak fis-sieq.
Bjarne Stroustrup
Mill-31 ta 'Ottubru sal-1 ta' Novembru, il-konferenza C++ Russia Piter saret f'San Pietruburgu - waħda mill-konferenzi ta 'programmazzjoni fuq skala kbira fir-Russja, organizzata minn JUG Ru Group. Kelliema mistiedna jinkludu membri tal-Kumitat tal-Istandards C++, kelliema CppCon, awturi tal-kotba O'Reilly, u manutenzjoni ta 'proġetti bħal LLVM, libc++, u Boost. Il-konferenza hija mmirata għal żviluppaturi C++ b'esperjenza li jixtiequ japprofondixxu l-kompetenza tagħhom u jiskambjaw esperjenzi fil-komunikazzjoni diretta. Studenti, studenti gradwati u għalliema universitarji huma pprovduti bi skontijiet sbieħ ħafna.
L-edizzjoni ta’ Moska tal-konferenza se tkun disponibbli biex iżuru minn April tas-sena d-dieħla, iżda sadanittant l-istudenti tagħna jgħidulek x’affarijiet interessanti tgħallmu fl-aħħar avveniment.
Żewġ studenti mill-Iskola Għolja tal-Ekonomija tal-Università Nazzjonali tar-Riċerka - San Pietruburgu ħadmu fuq din il-kariga:
Liza Vasilenko hija studenta tar-raba' sena li tistudja Lingwi ta' Programmazzjoni bħala parti mill-programm tal-Matematika Applikata u x-Xjenza tal-Kompjuter. Wara li sirt familjari mal-lingwa C++ fl-ewwel sena tiegħi fl-università, sussegwentement ksibt esperjenza ta' xogħol magħha permezz ta' apprendistati fl-industrija. Il-passjoni għal-lingwi tal-ipprogrammar b'mod ġenerali u l-ipprogrammar funzjonali b'mod partikolari ħalliet il-marka tagħha fuq l-għażla tar-rapporti fil-konferenza.
Danya Smirnov hija studenta tal-ewwel sena tal-programm tal-master "Programmazzjoni u Analiżi tad-Data". Waqt li kont għadni l-iskola, ktibt problemi tal-Olympiad f'C++, u mbagħad b'xi mod ġara li l-lingwa kontinwament ħarġet f'attivitajiet edukattivi u eventwalment saret il-lingwa ewlenija tax-xogħol. Iddeċidejt li nipparteċipa fil-konferenza biex intejjeb l-għarfien tiegħi u nitgħallem ukoll dwar opportunitajiet ġodda.
Fin-newsletter, it-tmexxija tal-fakultà spiss taqsam informazzjoni dwar avvenimenti edukattivi relatati mal-ispeċjalità tagħna. F'Settembru rajna informazzjoni dwar C++ Russja u ddeċidejna li nirreġistraw bħala semmiegħa. Din hija l-ewwel esperjenza tagħna ta’ parteċipazzjoni f’konferenzi bħal dawn.
Struttura tal-konferenza
Rapporti
Matul jumejn, l-esperti qraw 30 rapport, li jkopru ħafna suġġetti jaħarqu: użi inġenjużi tal-karatteristiċi tal-lingwa biex isolvu problemi applikati, aġġornamenti tal-lingwa li jmiss b'rabta mal-istandard il-ġdid, kompromessi fid-disinn C++ u prekawzjonijiet meta jaħdmu bil-konsegwenzi tagħhom, eżempji ta' arkitettura interessanti tal-proġett, kif ukoll xi dettalji ta' taħt il-kappa tal-infrastruttura tal-lingwa. Tliet wirjiet saru simultanjament, ħafna drabi tnejn bir-Russu u waħda bl-Ingliż.
Żoni ta' diskussjoni
Wara d-diskors, il-mistoqsijiet kollha mhux mitluba u d-diskussjonijiet mhux mitmuma ġew trasferiti f’żoni magħżula apposta għall-komunikazzjoni mal-kelliema, mgħammra b’marker boards. Mod tajjeb biex tieqaf il-waqfa bejn id-diskorsi b'konverżazzjoni pjaċevoli.
Taħditiet Lightning u diskussjonijiet informali
Jekk trid tagħti rapport qasir, tista’ tiffirma fuq il-whiteboard għat-Taħdita Lightning tal-lejla u tikseb ħames minuti ta’ ħin biex titkellem dwar xi ħaġa dwar is-suġġett tal-konferenza. Pereżempju, introduzzjoni ta 'malajr għal sanitizers għal C++ (għal xi wħud kienet ġdida) jew storja dwar bug fil-ġenerazzjoni tal-mewġ sine li tista' tinstema' biss, iżda ma tidhirx.
Format ieħor huwa l-panel ta’ diskussjoni “With a Heart to Heart Committee.” Fuq il-palk hemm xi membri tal-kumitat ta 'standardizzazzjoni, fuq il-proġekter hemm nar (uffiċjalment - biex tinħoloq atmosfera sinċiera, iżda r-raġuni "għax KOLLOX HUWA NAR" tidher aktar umoristiċi), mistoqsijiet dwar l-istandard u l-viżjoni ġenerali ta' C++ , mingħajr diskussjonijiet tekniċi msaħħan u holiwars. Irriżulta li l-kumitat fih ukoll nies ħajjin li jistgħu ma jkunux kompletament żguri minn xi ħaġa jew forsi ma jafux xi ħaġa.
Għal fannijiet ta 'holivars, it-tielet avveniment baqa' fuq il-każ - is-sessjoni BOF "Mur vs. C++". Nieħdu dilettant tal-Go, dilettant tas-C++, qabel il-bidu tas-sessjoni huma flimkien jippreparaw 100500 slide fuq suġġett (bħal problemi b’pakketti f’C++ jew in-nuqqas ta’ ġeneriċi f’Go), u mbagħad ikollhom diskussjoni vivaċi bejniethom u mal-udjenza, u l-udjenza tipprova tifhem żewġ opinjonijiet f'daqqa. Jekk holivar jibda barra mill-kuntest, il-moderatur jintervjeni u jirrikonċilja l-partijiet. Dan il-format huwa vizzju: diversi sigħat wara l-bidu, nofs il-pjastri biss tlestew. It-tmiem kellu jiġi aċċellerat ħafna.
Stands tal-imsieħba
L-imsieħba tal-konferenza kienu rappreżentati fis-swali - fl-istands tkellmu dwar proġetti attwali, offrew apprendistati u impjieg, għamlu kwizzijiet u kompetizzjonijiet żgħar, u ħarġu wkoll premjijiet sbieħ. Fl-istess ħin, xi kumpaniji saħansitra offrew li jgħaddu mill-istadji inizjali tal-intervisti, li jistgħu jkunu utli għal dawk li ġew mhux biss biex jisimgħu r-rapporti.
Dettalji tekniċi tar-rapporti
Smajna rapporti iż-żewġ jiem. Xi drabi kien diffiċli li nagħżlu rapport wieħed minn dawk paralleli – qbilna li naqsmu u niskambjaw l-għarfien miksub waqt il-waqfien. U anke hekk, jidher li ħafna jitħalla barra. Hawnhekk nixtiequ nitkellmu dwar il-kontenut ta’ wħud mir-rapporti li sibna l-aktar interessanti
Eċċezzjonijiet f'C++ permezz tal-priżma tal-ottimizzazzjonijiet tal-kompilatur, Roman Rusyaev
Kif jissuġġerixxi t-titlu, Roman ħares lejn ix-xogħol b'eċċezzjonijiet billi uża LLVM bħala eżempju. Fl-istess ħin, għal dawk li ma jużawx Clang fix-xogħol tagħhom, ir-rapport xorta jista 'jagħti xi idea ta' kif il-kodiċi jista 'potenzjalment jiġi ottimizzat. Dan huwa hekk minħabba li l-iżviluppaturi ta 'kompilaturi u libreriji standard korrispondenti jikkomunikaw ma' xulxin u ħafna soluzzjonijiet ta 'suċċess jistgħu jikkoinċidu.
Allura, biex timmaniġġja eċċezzjoni, trid tagħmel ħafna affarijiet: sejħa tal-kodiċi tal-immaniġġjar (jekk hemm) jew riżorsi b'xejn fil-livell attwali u dawwar il-munzell ogħla. Dan kollu jwassal għall-fatt li l-kompilatur iżid struzzjonijiet addizzjonali għal sejħiet li potenzjalment jarmu eċċezzjonijiet. Għalhekk, jekk l-eċċezzjoni ma titqajjem fil-fatt, il-programm xorta se jwettaq azzjonijiet mhux meħtieġa. Sabiex b'xi mod tnaqqas l-overhead, LLVM għandu diversi euristiċi għad-determinazzjoni ta 'sitwazzjonijiet fejn il-kodiċi tal-immaniġġjar tal-eċċezzjoni ma jkunx jeħtieġ li jiżdied jew in-numru ta' struzzjonijiet "extra" jista 'jitnaqqas.
Il-kelliem jeżamina madwar tużżana minnhom u juri kemm sitwazzjonijiet fejn jgħinu biex titħaffef l-eżekuzzjoni tal-programm, kif ukoll dawk fejn dawn il-metodi mhumiex applikabbli.
Għalhekk, Roman Rusyaev iwassal lill-istudenti għall-konklużjoni li l-kodiċi li fih l-immaniġġjar ta 'eċċezzjonijiet mhux dejjem jista' jiġi eżegwit b'overhead żero, u jagħti l-parir li ġej:
meta jiġu żviluppati l-libreriji, ta' min jabbandunaw l-eċċezzjonijiet fil-prinċipju;
jekk għad hemm bżonn eċċezzjonijiet, allura kull meta jkun possibbli ta 'min iżżid noexcept (u const) modifikaturi kullimkien sabiex il-kompilatur ikun jista' jottimizza kemm jista' jkun.
B'mod ġenerali, il-kelliem ikkonferma l-fehma li l-eċċezzjonijiet huma l-aħjar użati għall-minimu jew abbandunati għal kollox.
Wieħed mill-ħafna rapporti f'din il-konferenza ddedikati għall-innovazzjonijiet f'C++20 kien memorabbli mhux biss għall-preżentazzjoni ikkulurita tiegħu, iżda wkoll għall-identifikazzjoni ċara tiegħu ta 'problemi eżistenti bil-loġika tal-ipproċessar tal-ġbir (għal loop, callbacks).
Adi Shavit jenfasizza dan li ġej: il-metodi disponibbli bħalissa jgħaddu mill-ġbir kollu u ma jipprovdux aċċess għal xi stat intermedju intern (jew jagħmlu fil-każ ta 'callbacks, iżda b'numru kbir ta' effetti sekondarji spjaċevoli, bħal Callback Hell) . Jidher li hemm iteraturi, iżda anke magħhom kollox mhux daqshekk bla xkiel: m'hemmx punti ta' dħul u ħruġ komuni (begin → end versus rbegin → rend u l-bqija), mhux ċar kemm se ngħaddu? Nibdew b'C++20, dawn il-problemi huma solvuti!
L-ewwel għażla: firxiet. Billi tgeżwir iteraturi, aħna tikseb interface komuni għall-bidu u t-tmiem ta 'iterazzjoni, u aħna wkoll tikseb l-abbiltà li jikkomponu. Dan kollu jagħmilha faċli biex jinbnew pipelines tal-ipproċessar tad-dejta sħiħ. Iżda mhux kollox huwa daqshekk bla xkiel: parti mill-loġika tal-kalkolu tinsab ġewwa l-implimentazzjoni ta 'iteratur speċifiku, li jista' jikkumplika l-kodiċi biex tifhem u tiddibaggja.
Ukoll, għal dan il-każ, C ++ 20 żied coroutines (funzjonijiet li l-imġieba tagħhom hija simili għal ġeneraturi f'Python): l-eżekuzzjoni tista 'tiġi differita billi jirritorna xi valur kurrenti filwaqt li jiġi ppreservat stat intermedju. Għalhekk, aħna niksbu mhux biss naħdmu mad-dejta kif tidher, iżda wkoll li nkapsulaw il-loġika kollha ġewwa coroutine speċifiku.
Iżda hemm fly fl-ingwent: bħalissa huma parzjalment appoġġjati biss minn kompilaturi eżistenti, u wkoll mhumiex implimentati pulit kif nixtiequ: per eżempju, għadu mhux ta 'min juża referenzi u oġġetti temporanji f'coroutines. Barra minn hekk, hemm xi restrizzjonijiet fuq x'jistgħu jkunu coroutines, u l-funzjonijiet constexpr, il-kostrutturi/distrutturi, u l-main mhumiex inklużi f'din il-lista.
Għalhekk, coroutines isolvu parti sinifikanti tal-problemi bis-sempliċità tal-loġika tal-ipproċessar tad-dejta, iżda l-implimentazzjonijiet attwali tagħhom jeħtieġu titjib.
Fl-attivitajiet professjonali tiegħi, xi kultant ikolli nimplimenta affarijiet purament awżiljarji: tgeżwir bejn l-interface interna u l-API ta 'xi librerija, illoggjar jew parsing. F'dan il-każ, ġeneralment ma jkun hemm l-ebda ħtieġa għal xi ottimizzazzjoni addizzjonali. Imma x'jiġri jekk dawn il-komponenti jintużaw f'xi wħud mis-servizzi l-aktar popolari fuq ir-RuNet? F'sitwazzjoni bħal din, ser ikollok tipproċessa terabytes kull siegħa ta 'zkuk waħdu! Imbagħad kull millisekonda tgħodd u għalhekk trid tirrikorri għal diversi tricks - tkellem dwarhom Anton Polukhin.
Forsi l-aktar eżempju interessanti kien l-implimentazzjoni tal-mudell pointer-to-implementation (pimpl).
F'dan l-eżempju, l-ewwel irrid neħles mill-fajls header ta 'libreriji esterni - dan se jikkompila aktar malajr, u tista' tipproteġi lilek innifsek minn kunflitti ta 'isem possibbli u żbalji oħra simili.
Tajjeb, aħna mċaqalqa #include għall-fajl .cpp: neħtieġu dikjarazzjoni bil-quddiem tal-API mgeżwra, kif ukoll std::unique_ptr. Issa għandna allokazzjonijiet dinamiċi u affarijiet oħra spjaċevoli bħal dejta mifruxa fuq mazz ta 'dejta u garanziji mnaqqsa. std::aligned_storage jista' jgħin f'dan kollu.
L-unika problema: għandna bżonn nispeċifikaw id-daqs u l-allinjament għal kull tgeżwir - ejja nagħmlu l-mudell pimpl tagħna bil-parametri , uża xi valuri arbitrarji u żid verifika lid-destruttur li aħna bdejt kollox sew :
Peress li T hija diġà definita meta tipproċessa d-destruttur, dan il-kodiċi se jiġi analizzat b'mod korrett u fl-istadju tal-kumpilazzjoni se joħroġ id-daqs meħtieġ u l-valuri tal-allinjament li jeħtieġ li jiddaħħlu bħala żbalji. Għalhekk, għall-ispiża ta 'ġirja ta' kumpilazzjoni waħda addizzjonali, neħilsu mill-allokazzjoni dinamika ta 'klassijiet imgeżwer, naħbu l-API f'fajl .cpp bl-implimentazzjoni, u niksbu wkoll disinn li huwa aktar adattat għall-caching mill-proċessur.
Il-qtugħ u l-parsing dehru inqas impressjonanti u għalhekk mhux se jissemmew f'din ir-reviżjoni.
Tekniki moderni biex iżżomm il-kodiċi tiegħek DRY, Björn Fahller
F'din it-taħdita, Björn Fahller juri diversi modi differenti biex jiġġieled id-difett stilistiku ta' kontrolli ripetuti tal-kundizzjoni:
assert(a == IDLE || a == CONNECTED || a == DISCONNECTED);
Ħoss familjari? Billi tuża diversi tekniki C++ qawwija introdotti fl-istandards riċenti, tista 'timplimenta l-istess funzjonalità b'mod eleganti mingħajr ebda penali għall-prestazzjoni. Qabbel:
Biex timmaniġġja numru mhux fiss ta 'kontrolli, għandek bżonn immedjatament tuża mudelli variadic u espressjonijiet darbiet. Ejja nassumu li rridu niċċekkjaw l-ugwaljanza ta 'diversi varjabbli għall-element state_type tal-enum. L-ewwel ħaġa li tiġi f'moħħna hija li tikteb funzjoni helper is_any_of:
Parametri tal-mudell mhux tat-tip se jgħinu biex itejbu ftit is-sitwazzjoni. Bl-għajnuna tagħhom, se nittrasferixxu l-elementi enumerabbli tal-enum għal-lista tal-parametri tal-mudell:
Billi tuża auto f'parametru tal-mudell mhux tat-tip (C++17), l-approċċ sempliċement jiġġeneralizza għal paraguni mhux biss ma 'elementi state_type, iżda wkoll ma' tipi primittivi li jistgħu jintużaw bħala parametri tal-mudell mhux tat-tip:
F'dan l-eżempju, il-gwida tat-tnaqqis isservi biex tissuġġerixxi l-parametri tal-mudell tal-istruttura mixtieqa lill-kompilatur, li jaf it-tipi tal-argumenti tal-kostruttur.
Aktar - aktar interessanti. Bjorn jgħallem kif jiġġeneralizza l-kodiċi li jirriżulta għal operaturi ta 'tqabbil lil hinn minn ==, u mbagħad għal operazzjonijiet arbitrarji. Tul it-triq, karatteristiċi bħall-attribut no_unique_address (C++20) u l-parametri tal-mudell fil-funzjonijiet lambda (C++20) huma spjegati bl-użu ta 'eżempji ta' użu. (Iva, issa s-sintassi tal-lambda hija saħansitra aktar faċli biex tiftakar - dawn huma erba 'pari konsekuttivi ta' parentesi ta 'kull tip.) Is-soluzzjoni finali li tuża funzjonijiet bħala dettalji tal-kostruttur verament issaħħan ir-ruħ tiegħi, biex ma nsemmux l-espressjoni tuple fl-aħjar tradizzjonijiet ta' lambda kalkulu.
Fl-aħħar, tinsiex tillustraha:
Ftakar li lambdas huma constexpr b'xejn;
Ejja nżidu t-twassil perfett u nħarsu lejn is-sintassi ikrah tagħha fir-rigward tal-pakkett tal-parametri fl-għeluq tal-lambda;
Ejja nagħtu lill-kompilatur aktar opportunitajiet għal ottimizzazzjonijiet b'noexcept kondizzjonali;
Ejja nieħdu ħsieb output ta 'żbalji li jinftiehem aktar fil-mudelli grazzi għal valuri ta' ritorn espliċiti tal-lambdas. Dan se jġiegħel lill-kompilatur jagħmel aktar kontrolli qabel ma l-funzjoni tal-mudell fil-fatt tissejjaħ - fl-istadju tal-iċċekkjar tat-tip.
Għad-dettalji, jekk jogħġbok irreferi għall-materjali tal-lecture:
L-ewwel parteċipazzjoni tagħna f'C++ Russja kienet memorabbli għall-intensità tagħha. Sibt l-impressjoni ta 'C++ Russja bħala avveniment sinċier, fejn il-linja bejn it-taħriġ u l-komunikazzjoni diretta hija kważi imperċettibbli. Kollox, mill-burdata tal-kelliema sal-kompetizzjonijiet mill-imsieħba tal-avveniment, iwassal għal diskussjonijiet jaħarqu. Il-kontenut tal-konferenza, li jikkonsisti f'rapporti, ikopri firxa pjuttost wiesgħa ta' suġġetti inklużi innovazzjonijiet C++, studji ta' każijiet ta' proġetti kbar u konsiderazzjonijiet arkitettoniċi ideoloġiċi. Iżda jkun inġust li jiġi injorat il-komponent soċjali tal-avveniment, li jgħin biex jingħelbu l-ostakli tal-lingwa fir-rigward mhux biss tas-C++.
Nirringrazzjaw lill-organizzaturi tal-konferenzi għall-opportunità li jipparteċipaw f'avveniment bħal dan!
Jista' jkun li rajt il-post tal-organizzaturi dwar il-passat, il-preżent u l-futur ta' C++ Russja fuq il-blog tal-JUG Ru.
Grazzi tal-qari, u nittamaw li l-ġrajjiet mill-ġdid tagħna kien ta’ għajnuna!