Ob tug menyuam kawm ntawv los ntawm National Research University Higher School of Economics - St. Petersburg tau ua haujlwm ntawm no ncej:
Liza Vasilenko yog 4 xyoo kawm tiav undergraduate menyuam kawm ntawv Programming Languages ib feem ntawm Applied Mathematics thiab Computer Science program. Tau paub txog C ++ lus hauv kuv thawj xyoo hauv tsev kawm ntawv, kuv tau txais kev paub ua haujlwm nrog nws los ntawm kev xyaum ua haujlwm hauv kev lag luam. Kuv mob siab rau cov lus programming feem ntau thiab kev ua haujlwm hauv kev ua haujlwm tshwj xeeb tseem tshuav nws cov cim ntawm kev xaiv cov lus ceeb toom ntawm lub rooj sib tham.
Danya Smirnov yog tus tub ntxhais kawm xyoo 1 ntawm tus tswv txoj haujlwm "Programming thiab Data Analysis". Thaum tseem nyob hauv tsev kawm ntawv, kuv tau sau cov teeb meem Olympiad hauv C ++, thiab tom qab ntawd nws tau tshwm sim tias cov lus tas li tuaj hauv kev kawm thiab nws thiaj li dhau los ua hom lus tseem ceeb. Kuv txiav txim siab los koom nrog lub rooj sab laj los txhim kho kuv txoj kev paub thiab kuj kawm txog cov cib fim tshiab.
Nyob rau ob hnub, cov kws tshaj lij tau nyeem 30 tsab ntawv ceeb toom, suav nrog ntau lub ntsiab lus kub: kev siv cov lus zoo los daws cov teeb meem siv, kev hloov kho lus yav tom ntej nrog rau tus qauv tshiab, kev cuam tshuam hauv C ++ tsim thiab ceev faj thaum ua haujlwm nrog lawv cov txiaj ntsig, piv txwv ntawm nthuav qhov project architecture, nrog rau qee cov ntsiab lus hauv qab ntawm cov lus infrastructure. Peb qhov kev ua yeeb yam tau tshwm sim ib txhij, feem ntau ob yog lus Lavxias thiab ib qho ua lus Askiv.
Cov cheeb tsam sib tham
Tom qab hais lus, tag nrho cov lus nug uas tsis tau nug thiab kev sib tham tsis tiav tau raug xa mus rau cov chaw tshwj xeeb rau kev sib txuas lus nrog cov neeg hais lus, nruab nrog cov cim kos npe. Ib txoj hauv kev zoo rau thaum nyob deb ntawm kev hais lus nrog kev sib tham zoo siab.
Lightning Talks thiab kev sib tham tsis raug cai
Yog tias koj xav muab ib daim ntawv qhia luv luv, koj tuaj yeem sau npe rau ntawm daim ntawv dawb rau yav tsaus ntuj Lightning Talk thiab tau txais tsib feeb sijhawm los tham txog txhua yam ntawm lub rooj sab laj. Piv txwv li, kev qhia ceev ceev rau cov tshuaj tua kab mob rau C ++ (rau qee qhov nws yog tshiab) lossis ib zaj dab neeg hais txog kab mob hauv sine yoj tiam uas tuaj yeem hnov, tab sis tsis pom.
Lwm hom ntawv yog pawg sib tham "Nrog Lub Plawv rau Lub Plawv Pab Pawg." Nyob rau theem yog qee cov tswv cuab ntawm pawg tswj hwm tus qauv, ntawm qhov projector yog qhov cub (ua haujlwm - los tsim kom muaj lub siab dawb paug, tab sis vim li cas "vim txhua yam yog ON FIRE" zoo li funny), cov lus nug txog tus qauv thiab kev pom dav dav ntawm C ++ , tsis muaj rhuab kev sib tham thiab holiwars. Nws muab tawm tias pawg neeg tseem muaj cov neeg nyob uas yuav tsis paub meej txog qee yam lossis tsis paub ib yam dab tsi.
Rau cov kiv cua ntawm holivars, qhov kev tshwm sim thib peb tseem nyob ntawm rooj plaub - BOF kev sib tham "Mus vs. C ++". Peb coj tus Go lover, C ++ tus hlub, ua ntej pib qhov kev sib tham lawv ua ke npaj 100500 slides ntawm ib lub ntsiab lus (xws li teeb meem nrog pob hauv C ++ lossis tsis muaj generics hauv Go), thiab tom qab ntawd lawv muaj kev sib tham nrog lawv tus kheej thiab. nrog cov neeg tuaj saib, thiab cov neeg tuaj saib sim nkag siab txog ob lub ntsiab lus ntawm ib zaug. Yog hais tias lub holivar pib tawm ntawm cov ntsiab lus, tus neeg saib xyuas cuam tshuam thiab rov sib haum xeeb rau ob tog. Cov hom ntawv no yog hom: ob peb teev tom qab pib, tsuas yog ib nrab ntawm cov swb tau ua tiav. Qhov kawg yuav tsum tau nrawm heev.
Tus khub sawv
Cov neeg koom tes ntawm lub rooj sib tham tau sawv cev hauv cov chav tsev - ntawm qhov chaw lawv tau tham txog cov haujlwm tam sim no, muaj kev xyaum ua haujlwm thiab kev ua haujlwm, tuav cov lus nug thiab kev sib tw me me, thiab tseem tau txais txiaj ntsig zoo. Nyob rau tib lub sijhawm, qee lub tuam txhab txawm tau hais kom dhau los ntawm thawj theem ntawm kev xam phaj, uas tuaj yeem muaj txiaj ntsig zoo rau cov neeg tuaj yeem tsis tsuas yog mloog cov lus ceeb toom.
Raws li lub npe qhia, Roman saib ua haujlwm nrog kev zam siv LLVM ua piv txwv. Nyob rau tib lub sijhawm, rau cov neeg uas tsis siv Clang hauv lawv txoj haujlwm, daim ntawv tshaj tawm tseem tuaj yeem muab qee lub tswv yim ntawm txoj cai yuav ua li cas thiaj li ua tau zoo. Qhov no yog li ntawd vim hais tias cov neeg tsim khoom ntawm compilers thiab cov qauv tsev qiv ntawv sib txuas lus nrog ib leeg thiab ntau txoj kev daws teeb meem zoo tuaj yeem sib koom ua ke.
Yog li, txhawm rau tswj qhov kev zam, koj yuav tsum ua ntau yam: hu rau tus lej tuav (yog tias muaj) lossis cov peev txheej pub dawb ntawm qib tam sim no thiab tig cov pawg siab dua. Tag nrho cov no ua rau lub fact tias lub compiler ntxiv cov lus qhia ntxiv rau kev hu uas muaj feem cuam tshuam. Yog li ntawd, yog tias qhov kev zam tsis tau tsa, qhov kev zov me nyuam tseem yuav ua qhov tsis tsim nyog. Txhawm rau kom txo qis nyiaj siv ua haujlwm, LLVM muaj ntau qhov kev txiav txim siab rau kev txiav txim siab qhov xwm txheej tshwj xeeb uas tsis tas yuav tsum tau ntxiv lossis cov lus qhia "ntxiv" tuaj yeem txo qis.
Tus neeg hais lus tshuaj xyuas txog kaum ob ntawm lawv thiab qhia ob qho xwm txheej uas lawv pab ua kom tiav cov haujlwm, thiab cov txheej txheem no tsis siv.
Yog li, Roman Rusyaev coj cov tub ntxhais kawm mus rau qhov xaus tias txoj cai muaj kev zam tsis tuaj yeem ua tiav nrog xoom nyiaj siv ua haujlwm, thiab muab cov lus qhia hauv qab no:
yog tias tseem xav tau kev zam, ces thaum twg ua tau nws tsim nyog ntxiv noexcept (thiab const) modifiers nyob txhua qhov chaw kom cov compiler tuaj yeem ua kom zoo dua li ntau li ntau tau.
Feem ntau, tus neeg hais lus tau lees paub qhov kev pom tias kev zam yog qhov zoo tshaj plaws siv rau qhov tsawg kawg nkaus lossis tso tseg tag nrho.
Zoo, rau qhov no, C ++ 20 ntxiv coroutines (kev ua haujlwm uas nws tus cwj pwm zoo ib yam li cov tshuab hluav taws xob hauv Python): kev tua tuaj yeem ncua los ntawm kev xa rov qab qee tus nqi tam sim no thaum khaws cia lub xeev nruab nrab. Yog li, peb ua tsis tau tsuas yog ua haujlwm nrog cov ntaub ntawv raws li nws tshwm sim, tab sis kuj encapsulating tag nrho cov logic nyob rau hauv ib tug tshwj xeeb coroutine.
Tab sis muaj yoov nyob rau hauv cov tshuaj pleev: tam sim no lawv tsuas yog ib feem ntawm kev txhawb nqa los ntawm cov compilers uas twb muaj lawm, thiab tseem tsis tau ua kom zoo zoo raws li peb xav tau: piv txwv li, nws tseem tsis tau tsim nyog siv cov ntaub ntawv thiab cov khoom ib ntus hauv coroutines. Ntxiv rau, muaj qee qhov kev txwv ntawm dab tsi tuaj yeem yog coroutines, thiab constexpr functions, constructors / destructors, thiab lub ntsiab tsis suav nrog hauv daim ntawv teev npe no.
Yog li, coroutines daws ib feem tseem ceeb ntawm cov teeb meem nrog qhov yooj yim ntawm cov ntaub ntawv ua cov logic, tab sis lawv cov kev siv tam sim no xav tau kev txhim kho.
Txij li thaum T tau txhais tau hais tias thaum ua cov destructor, cov cai no yuav raug parsed kom raug thiab nyob rau theem muab tso ua ke nws yuav tso tawm qhov yuav tsum tau muaj qhov loj me thiab qhov sib npaug uas yuav tsum tau nkag mus ua qhov yuam kev. Yog li, ntawm tus nqi ntawm ib qho kev sib sau ua ke ntxiv, peb tshem tawm qhov kev faib tawm ntawm cov chav kawm qhwv, nkaum API hauv cov ntaub ntawv .cpp nrog rau kev siv, thiab kuj tau txais cov qauv tsim uas tsim nyog rau caching los ntawm lub processor.
Cov txheej txheem niaj hnub los khaws koj cov cai DRY, Björn Fahller
Hauv kev hais lus no, Björn Fahller qhia ntau txoj hauv kev los tawm tsam qhov tsis txaus ntseeg ntawm kev kuaj mob rov qab:
assert(a == IDLE || a == CONNECTED || a == DISCONNECTED);
Suab paub? Los ntawm kev siv ntau lub zog C ++ cov tswv yim qhia nyob rau hauv cov qauv tsis ntev los no, koj tuaj yeem ua tau zoo ua haujlwm zoo ib yam yam tsis muaj kev nplua nuj. Sib piv:
Hauv qhov piv txwv no, phau ntawv qhia txiav tawm ua haujlwm los qhia txog cov qauv kev xav tau ntawm cov qauv rau cov compiler, uas paub txog hom kev sib cav ntawm tus tsim.
Ntxiv - nthuav ntxiv. Bjorn qhia yuav ua li cas rau generalize cov lej tshwm sim rau cov neeg ua haujlwm sib piv dhau ntawm ==, thiab tom qab ntawd rau kev ua haujlwm tsis txaus ntseeg. Raws li txoj kev, xws li nta xws li no_unique_address attribute (C ++ 20) thiab template tsis nyob rau hauv lambda zog (C ++ 20) yog piav qhia siv piv txwv ntawm kev siv. (Yog lawm, tam sim no lub lambda syntax tseem yooj yim dua rau nco - cov no yog plaub sib law liag ntawm txhua yam.) Cov kev daws teeb meem kawg uas siv cov dej num raws li tus tsim cov ntsiab lus yeej sov kuv tus ntsuj plig, tsis txhob hais txog cov lus tuple hauv cov kab ke zoo tshaj plaws ntawm lambda. suav.
Thaum kawg, tsis txhob hnov qab polish nws li:
Nco ntsoov tias lambdas yog constexpr dawb;
Cia peb ntxiv kev xa mus zoo meej thiab saib nws cov lus dab neeg dab tuag nyob rau hauv kev sib raug zoo rau cov khoom ntim hauv lambda kaw;
Cia peb muab lub compiler ntau lub cib fim rau optimizations nrog conditional noex;
Cia peb saib xyuas qhov kev nkag siab ntau dua qhov yuam kev tso tawm hauv cov qauv ua tsaug rau qhov tseeb rov qab qhov tseem ceeb ntawm lambdas. Qhov no yuav yuam kom lub compiler ua ntau yam kev kuaj ua ntej lub template muaj nuj nqi yog hu ua tiag tiag - nyob rau hauv hom tshuaj xyuas theem.
Peb ua tsaug rau cov koom haum lub rooj sab laj rau lub sijhawm los koom nrog cov xwm txheej zoo li no!
Tej zaum koj yuav tau pom cov neeg ua haujlwm tshaj tawm txog yav dhau los, tam sim no thiab yav tom ntej ntawm C ++ Russia ntawm JUG Ru blog.