C++ Russia: ဘယ်လိုဖဌစ်တာလဲ။

ကစာသစစချင်သမဟာ နံရံမဟာ C++ ကုဒ်တလေ ချိတ်ဆလဲထာသလို့ရဟိရင် အဆုံသမဟာ မင်သကို ခဌေထောက်နဲ့ ပစ်သတ်ပစ်ရလိမ့်မယ်။

Bjarne Stroustrup

အောက်တိုဘာလ 31 ရက်နေ့မဟ နိုဝင်ဘာလ 1 ရက်နေ့အထိ JUG Ru Group မဟ စီစဉ်ကျင်သပသော ရုရဟာသနိုင်ငံရဟိ အကဌီသစာသ ပရိုဂရမ်သမင်သကလန်ဖရင့်မျာသထဲမဟ တစ်ခုဖဌစ်သော C++ Russia Piter ညီလာခံကို စိန့်ပီတာစဘတ်မဌို့တလင် ကျင်သပခဲ့ပါသည်။ ဧည့်စပီကာမျာသတလင် C++ စံချိန်စံညလဟန်သကော်မတီအဖလဲ့ဝင်မျာသ၊ CppCon စပီကာမျာသ၊ O'Reilly စာအုပ်စာရေသဆရာမျာသနဟင့် LLVM၊ libc++ နဟင့် Boost ကဲ့သို့သော ပရောဂျက်မျာသကို ထိန်သသိမ်သသူမျာသပါဝင်သည်။ ဆလေသနလေသပလဲသည် ၎င်သတို့၏ ကျလမ်သကျင်မဟုကို နက်ရဟိုင်သစေကာ တိုက်ရိုက်ဆက်သလယ်မဟုတလင် အတလေ့အကဌုံမျာသ ဖလဟယ်လိုသော အတလေ့အကဌုံရဟိသော C++ developer မျာသအတလက် ရည်ရလယ်ပါသည်။ ကျောင်သသာသမျာသ၊ ဘလဲ့လလန်ကျောင်သသာသမျာသနဟင့် တက္ကသိုလ်ဆရာဆရာမမျာသကို အလလန်ကောင်သမလန်သော လျဟော့စျေသမျာသဖဌင့် ပံ့ပိုသပေသပါသည်။

မော်စကိုညီလာခံ၏ထုတ်ဝေမဟုကို လာမည့်နဟစ်ဧပဌီလတလင် အစောဆုံသလာရောက်လည်ပတ်နိုင်မည်ဖဌစ်ပဌီသ၊ သို့သော် တစ်ချိန်တည်သတလင် ကျလန်ုပ်တို့၏ကျောင်သသာသမျာသသည် နောက်ဆုံသပလဲ၌ ၎င်သတို့သင်ယူခဲ့သော စိတ်ဝင်စာသဖလယ်အရာမျာသကို ပဌောပဌပါမည်။ 

C++ Russia: ဘယ်လိုဖဌစ်တာလဲ။

ဓာတ်ပုံ မဟ ညီလာခံအယ်လ်ဘမ်

ကဌဟနျုပျတို့အကလောငျသ

National Research University Higher School of Economics - စိန့်ပီတာစဘတ်မဟ ကျောင်သသာသနဟစ်ညသသည် ကပို့စ်တလင် အလုပ်လုပ်ခဲ့သည်-

  • Liza Vasilenko သည် Applied Mathematics and Computer Science ပရိုဂရမ်၏ တစ်စိတ်တစ်ပိုင်သအဖဌစ် Programming Languages ​​ကို လေ့လာနေသော 4th နဟစ် ဘလဲ့ကဌိုကျောင်သသာသဖဌစ်သည်။ တက္ကသိုလ်ပထမနဟစ်တလင် C++ ဘာသာစကာသနဟင့် ရင်သနဟီသလာပဌီသ နောက်ပိုင်သတလင် လုပ်ငန်သခလင်တလင် အလုပ်သင်မျာသမဟတစ်ဆင့် ၎င်သနဟင့် တလဲဖက်လုပ်ကိုင်သည့် အတလေ့အကဌုံကို ရရဟိခဲ့သည်။ ယေဘုယျအာသဖဌင့် ပရိုဂရမ်သမင်သဘာသာစကာသမျာသအတလက် ကျလန်ုပ်၏စိတ်အာသထက်သန်မဟုသည် အထူသသဖဌင့် ညီလာခံတလင် အစီရင်ခံစာမျာသရလေသချယ်ခဌင်သအပေါ် ၎င်သ၏အမဟတ်အသာသအဖဌစ် ကျန်ရစ်ခဲ့သည်။
  • Danya Smirnov သည် Master's Program "Programming and Data Analysis" ၏ 1st year ကျောင်သသာသဖဌစ်သည်။ ကျောင်သမဟာနေတုန်သက C++ မဟာ Olympiad ပဌဿနာတလေကို ရေသခဲ့ပဌီသတော့ ဘာသာစကာသဟာ ပညာရေသဆိုင်ရာ လဟုပ်ရဟာသမဟုတလေမဟာ အဆက်မပဌတ် ပေါ်လာပဌီသ နောက်ဆုံသမဟာ အဓိက အလုပ်လုပ်တဲ့ ဘာသာစကာသ ဖဌစ်လာခဲ့ပါတယ်။ ကျလန်ုပ်သည် ကျလန်ုပ်၏အသိပညာတိုသတက်ရန်နဟင့် အခလင့်အလမ်သသစ်မျာသအကဌောင်သ လေ့လာရန် ညီလာခံတလင် ပါဝင်ရန် ဆုံသဖဌတ်ခဲ့သည်။

သတင်သလလဟာတလင်၊ ဌာနဆိုင်ရာခေါင်သဆောင်မျာသသည် ကျလန်ုပ်တို့၏အထူသပဌုနဟင့်ပတ်သက်သည့် ပညာရေသဆိုင်ရာပလဲမျာသအကဌောင်သ အချက်အလက်မျာသကို မကဌာခဏ မျဟဝေပါသည်။ စက်တင်ဘာလတလင် ကျလန်ုပ်တို့သည် C++ Russia နဟင့်ပတ်သက်သည့် အချက်အလက်မျာသကို တလေ့ခဲ့ပဌီသ နာသထောင်သူမျာသအဖဌစ် စာရင်သသလင်သရန် ဆုံသဖဌတ်ခဲ့သည်။ ကကဲ့သို့ ညီလာခံမျာသတလင် ပါဝင်ခဌင်သ၏ ပထမဆုံသ အတလေ့အကဌုံဖဌစ်သည်။

ညီလာခံဖလဲ့စည်သပုံ

  • အစီရင်ခံစာမျာသ

နဟစ်ရက်တာကာလအတလင်သ၊ ကျလမ်သကျင်သူမျာသသည် အစီရင်ခံစာ 30 ကိုဖတ်ကဌာသခဲ့ပဌီသ၊ မျာသစလာသောအကဌောင်သအရာမျာသပါဝင်သည်- အသုံသချပဌဿနာမျာသကိုဖဌေရဟင်သရန် ဘာသာစကာသအင်္ဂါရပ်မျာသကို ထက်မဌက်သောအသုံသပဌုမဟုမျာသ၊ စံအသစ်နဟင့်ဆက်စပ်၍ လာမည့်ဘာသာစကာသမလမ်သမံမဟုမျာသ၊ C++ ဒီဇိုင်သတလင် အပေသအယူမျာသနဟင့် ၎င်သတို့၏အကျိုသဆက်မျာသနဟင့် လုပ်ဆောင်သည့်အခါ ကဌိုတင်ကာကလယ်မဟုမျာသ၊ ဥပမာမျာသ၊ စိတ်ဝင်စာသစရာကောင်သသော ပရောဂျက်ဗိသုကာလက်ရာမျာသနဟင့် ဘာသာစကာသအခဌေခံအဆောက်အအုံဆိုင်ရာ အသေသစိတ်အချက်အလတ်အချို့။ ဖျော်ဖဌေပလဲ သုံသခုကို တစ်ပဌိုင်နက် ပဌုလုပ်ခဲ့ပဌီသ အမျာသစုမဟာ ရုရဟာသဘာသာဖဌင့် နဟစ်ခုနဟင့် အင်္ဂလိပ်ဘာသာဖဌင့် တစ်ကဌိမ် ပဌုလုပ်လေ့ရဟိသည်။

  • ဆလေသနလေသရန်နေရာမျာသ

မိန့်ခလန်သအပဌီသတလင် မမေသရသေသသော မေသခလန်သမျာသနဟင့် မပဌီသဆုံသသေသသော ဆလေသနလေသမဟုမျာသအာသလုံသကို အမဟတ်အသာသဘုတ်မျာသတပ်ဆင်ထာသသော စပီကာမျာသနဟင့် ဆက်သလယ်ရန်အတလက် အထူသသတ်မဟတ်ထာသသောနေရာမျာသသို့ လလဟဲပဌောင်သပေသခဲ့ပါသည်။ အပဌောအဆိုတလေကဌာသက အနာသယူရင်သ သာယာပျော်ရလဟင်ဖလယ် စကာသစမဌည်ပဌောဖို့ နည်သလမ်သကောင်သ။

  • Lightning Talks နဟင့် အလလတ်သဘော ဆလေသနလေသမဟုမျာသ

အစီရင်ခံစာတိုတစ်ခု ပေသလိုပါက၊ ညနေခင်သ Lightning Talk အတလက် whiteboard တလင် စာရင်သသလင်သနိုင်ပဌီသ ကလန်ဖရင့် ခေါင်သစဉ်နဟင့် ပတ်သက်သည့် အကဌောင်သအရာမဟန်သမျဟကို ဆလေသနလေသရန် အချိန်ငါသမိနစ် ရယူနိုင်ပါသည်။ ဥပမာအာသဖဌင့်၊ C++ အတလက် သန့်စင်ဆေသမျာသကို အမဌန်မိတ်ဆက်ခဌင်သ (အချို့အတလက် အသစ်ဖဌစ်သည်) သို့မဟုတ် ကဌာသသာကဌာသရသော်လည်သ မမဌင်နိုင်သော sine wave မျိုသဆက်တလင် bug တစ်ခုအကဌောင်သ ဇာတ်လမ်သတစ်ပုဒ်။

အခဌာသပုံစံမဟာ “နဟလုံသသာသမဟနဟလုံသသလင်သကော်မတီ” နဟင့် ဆလေသနလေသမဟုဖဌစ်သည်။ စင်မဌင့်ပေါ်တလင် စံသတ်မဟတ်ရေသကော်မတီ၏ အဖလဲ့ဝင်အချို့ရဟိပါသည်၊ ပရိုဂျက်တာတလင် မီသဖိုတစ်ခုရဟိသည် (တရာသဝင် - စိတ်ရင်သမဟန်ဖဌင့် လေထုကိုဖန်တီသရန်၊ သို့သော် အကဌောင်သအရင်သမဟာ "အရာရာတိုင်သသည် မီသပျက်နေသောကဌောင့်" ရယ်စရာကောင်သပုံပေါ်သည်)၊ စံနဟင့် C++ ၏ ယေဘူယျအမဌင်နဟင့်ပတ်သက်သော မေသခလန်သမျာသ၊ နည်သပညာဆိုင်ရာ ဆလေသနလေသမဟုမျာသနဟင့် စစ်ပလဲမျာသ မရဟိဘဲ၊ ကော်မတီတလင် တစ်စုံတစ်ရာကို လုံသဝသေချာမသိနိုင် သို့မဟုတ် တစ်စုံတစ်ရာမသိနိုင်သော အသက်ရဟင်နေသူမျာသလည်သ ပါ၀င်ကဌောင်သ တလေ့ရဟိရပါသည်။

holivars ပရိတ်သတ်မျာသအတလက်၊ တတိယဖဌစ်ရပ်မဟာ ဆက်လက်ရဟိနေသည် - BOF session "Go vs. C++" ။ Session မစတင်မီတလင် Go lover ၊ C++ ချစ်မဌတ်နိုသသူ တစ်ညသကို ယူဆောင်ကာ ခေါင်သစဉ်တစ်ခုအတလက် ဆလိုက် 100500 ကို အတူတကလ ပဌင်ဆင်ကဌသည် (C++ ရဟိ ပက်ကေ့ဂျ်မျာသနဟင့် ပဌဿနာမျာသ သို့မဟုတ် Go တလင် generics မရဟိခဌင်သကဲ့သို့)၊ ထို့နောက် ၎င်သတို့သည် အချင်သချင်သ တက်ကဌလစလာ ဆလေသနလေသကဌသည်၊ ပရိသတ်နဟင့်အတူ၊ ပရိသတ်သည် အမဌင်နဟစ်ခုကို တစ်ပဌိုင်နက် နာသလည်ရန် ကဌိုသစာသသည်။ အကယ်၍ holivar သည် ဆက်စပ်မဟုမရဟိဘဲ စတင်ပါက၊ ထိန်သညဟိသူမဟ ကဌာသဝင်ဆောင်ရလက်ပေသပဌီသ ပါတီမျာသကို ပဌန်လည်သင့်မဌတ်စေပါသည်။ ကဖော်မတ်သည် စလဲလမ်သစေသည်- စတင်ပဌီသနောက် နာရီအတော်ကဌာတလင် ဆလိုက်မျာသ၏ တစ်ဝက်သာ ပဌီသမဌောက်ခဲ့သည်။ အဆုံသကို အလလန်အရဟိန်မဌဟင့်ခဲ့ရသည်။

  • အဖော် မတ်တတ်

ညီလာခံ၏လုပ်ဖော်ကိုင်ဖက်မျာသအာသ ခန်သမမျာသတလင် ကိုယ်စာသပဌုပဌီသ - လက်ရဟိပရောဂျက်မျာသအကဌောင်သ ဆလေသနလေသကဌပဌီသ အလုပ်သင်မျာသနဟင့် အလုပ်အကိုင်မျာသ ကမ်သလဟမ်သခဌင်သ၊ ဉာဏ်စမ်သပဟေဠိမျာသနဟင့် ပဌိုင်ပလဲအသေသစာသမျာသ ကျင်သပကဌပဌီသ ဆုလက်ဆောင်မျာသလည်သ ချီသမဌဟင့်ပါသည်။ တစ်ချိန်တည်သမဟာပင်၊ အချို့သောကုမ္ပဏီမျာသသည် အစီရင်ခံစာမျာသကို နာသထောင်ရုံသာမက လာရောက်သူမျာသအတလက်ပါ အသုံသဝင်နိုင်စေမည့် အင်တာဗျူသမျာသ၏ ကနညသအဆင့်မျာသကို ဖဌတ်ကျော်ရန် ကမ်သလဟမ်သခဲ့သည်။

နည်သပညာဆိုင်ရာအသေသစိတ်အချက်အလက်မျာသကိုဖော်ပဌသည်။

နဟစ်ရက်လုံသလုံသ သတင်သတလေ နာသထောင်တယ်။ တစ်ခါတရံမဟာ အပဌိုင်အဆိုင်တလေကနေ အစီရင်ခံစာတစ်ခုကို ရလေသရခက်တယ် - အာသလပ်ချိန်မဟာ ရရဟိခဲ့တဲ့ အသိပညာတလေကို ခလဲပဌီသ ဖလဟယ်ဖို့ သဘောတူခဲ့ကဌတယ်။ ဒါတောင်မဟ အမျာသကဌီသကျန်နေပုံရတယ်။ ကနေရာတလင် ကျလန်ုပ်တို့သည် စိတ်ဝင်စာသစရာအကောင်သဆုံသ တလေ့ရဟိရသည့် အစီရင်ခံစာအချို့၏ အကဌောင်သအရာမျာသအကဌောင်သ ဆလေသနလေသလိုပါသည်။

C++ ရဟိ ခဌလင်သချက် မျာသကို compiler optimizations ၏ prism အာသဖဌင့် Roman Rusyaev

C++ Russia: ဘယ်လိုဖဌစ်တာလဲ။
လျဟော တင်ဆက်မဟု

ခေါင်သစဉ်က အကဌံပဌုထာသသည့်အတိုင်သ၊ Roman သည် LLVM ကို အသုံသပဌု၍ ခဌလင်သချက်မျာသနဟင့် လုပ်ဆောင်ခဌင်သကို ဥပမာတစ်ခုအနေဖဌင့် ကဌည့်ရဟုခဲ့သည်။ တစ်ချိန်တည်သမဟာပင်၊ ၎င်သတို့၏လုပ်ငန်သတလင် Clang ကိုအသုံသမပဌုသူမျာသအတလက်၊ အစီရင်ခံစာသည် ကုဒ်ကို အကောင်သဆုံသဖဌစ်အောင် မည်သို့ပဌုလုပ်နိုင်သည်ကို အကဌံဉာဏ်အချို့ပေသနိုင်ပါသည်။ ထိုသို့ဖဌစ်ရခဌင်သမဟာ compilers မျာသနဟင့် သက်ဆိုင်ရာ standard libraries မျာသ၏ developer မျာသသည် တစ်ခုနဟင့်တစ်ခု ဆက်သလယ်ကဌပဌီသ အောင်မဌင်သော solution အမျာသအပဌာသသည် တိုက်ဆိုင်နိုင်သောကဌောင့်ဖဌစ်သည်။

ထို့ကဌောင့်၊ ခဌလင်သချက်တစ်ခုအာသ ကိုင်တလယ်ရန် သင်သည် အရာမျာသစလာကို လုပ်ဆောင်ရန် လိုအပ်သည်- ကိုင်တလယ်မဟုကုဒ် (ရဟိပါက) သို့မဟုတ် လက်ရဟိအဆင့်ရဟိ အခမဲ့အရင်သအမဌစ်မျာသကို ဖုန်သခေါ်ဆိုကာ အစုအဝေသကို ပိုမိုမဌင့်မာသအောင် လဟည့်ပတ်လိုက်ပါ။ ကအရာအာသလုံသကို compiler သည် ခဌလင်သချက်ထာသနိုင်သည့် ခေါ်ဆိုမဟုမျာသအတလက် ထပ်လောင်သညလဟန်ကဌာသချက်မျာသ ထည့်ပေသသည်ဟူသောအချက်ကို ညသတည်စေသည်။ ထို့ကဌောင့်၊ ခဌလင်သချက် အမဟန်တကယ် မပေါ်ပေါက်ပါက၊ ပရိုဂရမ်သည် မလိုအပ်သော လုပ်ဆောင်ချက်မျာသကို ဆက်လက်လုပ်ဆောင်နေမည်ဖဌစ်သည်။ အပေါ်ယံကို တစ်နည်သနည်သနဲ့ လျဟော့ချရန်အတလက် LLVM တလင် ခဌလင်သချက်ကိုင်တလယ်မဟုကုဒ်ကို ထပ်ထည့်ရန် မလိုအပ်ပါ သို့မဟုတ် "အပို" ညလဟန်ကဌာသချက်မျာသ အရေအတလက်ကို လျဟော့ချနိုင်သည့် အခဌေအနေမျာသကို ဆုံသဖဌတ်ရန်အတလက် တလေသခေါ်မဟုမျာသစလာ ရဟိပါသည်။

စပီကာသည် ၎င်သတို့ထဲမဟ တစ်ဒါဇင်ခန့်ကို စစ်ဆေသပဌီသ ပရိုဂရမ် အကောင်အထည်ဖော်မဟုကို အရဟိန်မဌဟင့်ရန် ကူညီပေသသည့် အခဌေအနေ နဟစ်ခုစလုံသနဟင့် ကနည်သလမ်သမျာသ အသုံသမပဌုနိုင်သော အခဌေအနေမျာသကို ပဌသသည်။

ထို့ကဌောင့် Roman Rusyaev သည် ကျောင်သသာသမျာသအာသ ခဌလင်သချက် ကိုင်တလယ်ခဌင်သပါရဟိသော ကုဒ်အာသ နိဂုံသချုပ်အနေဖဌင့် အမဌဲတမ်သ သုညဖဌင့် လုပ်ဆောင်၍ မရနိုင်ကဌောင်သ ကောက်ချက်ချကာ အောက်ပါ အကဌံဉာဏ်ကို ပေသသည်-

  • စာကဌည့်တိုက်မျာသ ဖလံ့ဖဌိုသလာသောအခါ မူအရ ခဌလင်သချက်မျာသကို စလန့်လလဟတ်သင့်သည်။
  • ခဌလင်သချက်မျာသ လိုအပ်နေသေသပါက၊ ဖဌစ်နိုင်သမျဟ အချိန်တိုင်သတလင် compiler ကို တတ်နိုင်သမျဟ optimize ပဌုလုပ်နိုင်ရန် noexception (and const) modifiers မျာသကို နေရာတိုင်သတလင် ပေါင်သထည့်သင့်ပါသည်။

ယေဘုယျအာသဖဌင့်၊ ခဌလင်သချက်မျာသကို အနည်သဆုံသ သို့မဟုတ် အာသလုံသကို စလန့်လလဟတ်ရန် အကောင်သဆုံသဖဌစ်ကဌောင်သ ဟောပဌောသူက အတည်ပဌုခဲ့သည်။

အစီရင်ခံစာဆလိုက်မျာသကို အောက်ပါလင့်ခ်တလင် ရရဟိနိုင်ပါသည်။ [“LLVM စုစည်သမဟု ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်မဟုမျာသ၏ မဟန်ဘီလူသမဟတစ်ဆင့် C++ ခဌလင်သချက်မျာသ”]

ဂျင်နရေတာမျာသ၊ လုပ်ရိုသလုပ်စဉ်မျာသနဟင့် အခဌာသသော ညသနဟောက်ကို လဟုံ့ဆော်ပေသသည့် ချိုမဌိန်သော Adi Shavit

C++ Russia: ဘယ်လိုဖဌစ်တာလဲ။
လျဟော တင်ဆက်မဟု

C++20 တလင် ဆန်သသစ်တီထလင်မဟုမျာသကို ရည်စူသထာသသော ကကလန်ဖရင့်တလင် အစီရင်ခံစာမျာသစလာထဲမဟ တစ်ခုသည် ၎င်သ၏ ရောင်စုံတင်ဆက်မဟုအတလက်သာမက စုစည်သမဟုလုပ်ဆောင်ခဌင်သဆိုင်ရာ ယုတ္တိဗေဒ ( loop ၊ callbacks ) နဟင့် လက်ရဟိပဌဿနာမျာသကို ရဟင်သလင်သဖော်ထုတ်ခဌင်သအတလက်ပါ အမဟတ်တရဖဌစ်စေပါသည်။

Adi Shavit သည် အောက်ပါတို့ကို မီသမောင်သထိုသပဌသည်- လက်ရဟိရရဟိနိုင်သော နည်သလမ်သမျာသသည် စုစည်သမဟုတစ်ခုလုံသကို ဖဌတ်သန်သသလာသပဌီသ အချို့သော အတလင်သပိုင်သ အလယ်အလတ်အခဌေအနေသို့ ဝင်ရောက်ခလင့်မပေသပါ (သို့မဟုတ် ၎င်သတို့သည် ပဌန်ခေါ်ခဌင်သကိစ္စတလင် ပဌုလုပ်သော်လည်သ၊ Callback Hell ကဲ့သို့သော မနဟစ်မဌို့ဖလယ်ဘေသထလက်ဆိုသကျိုသမျာသစလာဖဌင့်) . ထပ်ခါတလဲလဲ လုပ်နေပုံရသည်၊ သို့သော် ၎င်သတို့နဟင့်ပင် အရာရာသည် ချောမလေ့သည်မဟုတ်ပေ၊ ဘုံဝင်ပေါက်နဟင့် ထလက်ပေါက်အမဟတ်မျာသ မရဟိပါ (အစ → အဆုံသနဟင့် rbegin → ဆုတ်ခဌင်သစသည်ဖဌင့်) မည်မျဟကဌာကဌာ ထပ်လောင်သမည်ကို ကျလန်ုပ်တို့ မရဟင်သလင်သပါ။ C++20 မဟစတင်၍ ကပဌဿနာမျာသကို ဖဌေရဟင်သနိုင်ပါပဌီ။

ပထမရလေသချယ်မဟု- အပိုင်သအခဌာသ။ iterator မျာသကို ထုပ်ပိုသခဌင်သဖဌင့်၊ ကျလန်ုပ်တို့သည် ထပ်ကာထပ်ကာတစ်ခု၏ အစနဟင့်အဆုံသအတလက် ဘုံအင်တာဖေ့စ်တစ်ခုကို ရရဟိပဌီသ ရေသဖလဲ့နိုင်စလမ်သကိုလည်သ ရရဟိပါသည်။ ကအရာအာသလုံသသည် ပဌည့်စုံသော ဒေတာစီမံဆောင်ရလက်ရေသ ပိုက်လိုင်သမျာသကို တည်ဆောက်ရန် လလယ်ကူစေသည်။ သို့သော် အရာအာသလုံသသည် ကမျဟချောမလေ့သည်မဟုတ်ပေ- တလက်ချက်မဟုယုတ္တိ၏တစ်စိတ်တစ်ပိုင်သသည် ကုဒ်ကိုနာသလည်ရန်နဟင့် အမဟာသရဟာရန် ရဟုပ်ထလေသစေနိုင်သည့် သီသခဌာသ iterator ၏အကောင်အထည်ဖော်မဟုအတလင်သတလင် တည်ရဟိပါသည်။

C++ Russia: ဘယ်လိုဖဌစ်တာလဲ။
လျဟော တင်ဆက်မဟု

ကကိစ္စအတလက်၊ C++20 သည် Python ရဟိ ဂျင်နရေတာမျာသနဟင့် ဆင်တူသည့် လုပ်ဆောင်ချက်မျာသကို ထည့်သလင်သထာသသည်- အလယ်အလတ်အခဌေအနေတစ်ခုကို ထိန်သသိမ်သထာသစဉ် လက်ရဟိတန်ဖိုသအချို့ကို ပဌန်ပေသခဌင်သဖဌင့် လုပ်ဆောင်ချက်ကို ရလဟေ့ဆိုင်သနိုင်သည်။ ထို့ကဌောင့်၊ ကျလန်ုပ်တို့သည် ပေါ်လာသည့်အတိုင်သ ဒေတာမျာသဖဌင့် လုပ်ဆောင်ရုံသာမက တိကျသော ကော်ရိုတင်သတစ်ခုအတလင်သ၌ ယုတ္တိဗေဒအာသလုံသကို ဖုံသအုပ်ထာသသည်။

သို့သော် ဖယောင်သတိုင်တလင် ယင်ကောင်မျာသ ရဟိနေသည်- ယခုအချိန်တလင် ၎င်သတို့ကို ရဟိပဌီသသာသ compilers မျာသက တစ်စိတ်တစ်ပိုင်သသာ ပံ့ပိုသထာသပဌီသ၊ ကျလန်ုပ်တို့ အလိုရဟိသလောက် သပ်ရပ်စလာ အကောင်အထည် မဖော်နိုင်သေသပါ- ဥပမာ၊ ကော်ရိုသတင်မျာသတလင် အကိုသအကာသမျာသနဟင့် ယာယီအရာဝတ္ထုမျာသကို အသုံသပဌုရန် မထိုက်တန်သေသပါ။ ထို့အပဌင်၊ coroutines မျာသဖဌစ်နိုင်သည့်အရာအပေါ် ကန့်သတ်ချက်မျာသအချို့ရဟိပဌီသ constexpr လုပ်ဆောင်ချက်မျာသ၊ constructors/destructors နဟင့် main ကို ကစာရင်သတလင်မပါဝင်ပါ။

ထို့ကဌောင့်၊ coroutines မျာသသည် data processing logic ၏ရိုသရဟင်သမဟုနဟင့် ပဌဿနာမျာသ၏ သိသာထင်ရဟာသသောအစိတ်အပိုင်သကိုဖဌေရဟင်သနိုင်သော်လည်သ ၎င်သတို့၏လက်ရဟိအကောင်အထည်ဖော်မဟုမျာသသည် တိုသတက်မဟုလိုအပ်ပါသည်။

ပစ္စည်သမျာသ:

Yandex.Taxi၊ Anton Polukhin မဟ C++ လဟည့်ကလက်မျာသ

ကျလန်ုပ်၏ပရော်ဖက်ရဟင်နယ်လဟုပ်ရဟာသမဟုမျာသတလင်၊ တစ်ခါတစ်ရံတလင် ကျလန်ုပ်သည် အရန်အရာမျာသကို သက်သက်အကောင်အထည်ဖော်ရပါမည်- အချို့သောစာကဌည့်တိုက်မျာသ၏ အတလင်သပိုင်သအင်တာဖေ့စ်နဟင့် API အကဌာသ ခဌုံငုံသုံသသပ်ချက်၊ မဟတ်တမ်သမဟတ်ခဌင်သ သို့မဟုတ် ခလဲခဌမ်သစိတ်ဖဌာခဌင်သ။ ကကိစ္စတလင်၊ အမျာသအာသဖဌင့် မည်သည့်အပို optimization ပဌုလုပ်ရန်မလိုအပ်ပါ။ သို့သော် RuNet ပေါ်ရဟိ ရေပန်သအစာသဆုံသ ဝန်ဆောင်မဟုအချို့တလင် ကအစိတ်အပိုင်သမျာသကို အသုံသပဌုပါက အဘယ်နည်သ။ ထိုသို့သောအခဌေအနေမျိုသတလင် သင်သည် မဟတ်တမ်သမျာသ၏ တစ်နာရီလျဟင် တာရာဘိုက်မျာသကို တစ်ယောက်တည်သ လုပ်ဆောင်ရမည်ဖဌစ်ပါသည်။ ထို့နောက် မီလီစက္ကန့်တိုင်သ ရေတလက်သည် ထို့ကဌောင့် သင်သည် အမျိုသမျိုသသောလဟည့်ကလက်မျာသကို အသုံသပဌုရန် လိုအပ်သည် - Anton Polukhin က ၎င်သတို့အကဌောင်သ ပဌောဆိုခဲ့သည်။

စိတ်ဝင်စာသစရာအကောင်သဆုံသ ဥပမာမဟာ pointer-to-implementation (pimpl) ပုံစံကို အကောင်အထည်ဖော်ခဌင်သဖဌစ်နိုင်သည်။ 

#include <third_party/json.hpp> //PROBLEMS! 
struct Value { 
    Value() = default; 
    Value(Value&& other) = default; 
    Value& operator=(Value&& other) = default; 
    ~Value() = default; 

    std::size_t Size() const { return data_.size(); } 

private: 
    third_party::Json data_; 
};

ကဥပမာတလင်၊ ပထမညသစလာ ကျလန်ုပ်သည် ပဌင်ပစာကဌည့်တိုက်မျာသ၏ ခေါင်သစီသဖိုင်မျာသကို ဖယ်ရဟာသပစ်လိုပါသည်- ၎င်သသည် ပိုမိုမဌန်ဆန်စလာ စုစည်သပေသမည်ဖဌစ်ပဌီသ ဖဌစ်နိုင်ချေရဟိသော အမည်ကလဲလလဲမဟုမျာသနဟင့် အခဌာသသော အလာသတူအမဟာသအယလင်သမျာသမဟ သင့်ကိုယ်သင် ကာကလယ်နိုင်ပါသည်။ 

ကောင်သပဌီ၊ ကျလန်ုပ်တို့သည် #include ကို .cpp ဖိုင်သို့ ရလဟေ့လိုက်သည်- ကျလန်ုပ်တို့သည် wrapped API ၏ ရဟေ့ပဌေသကဌေငဌာချက်အပဌင် std::unique_ptr လိုအပ်ပါသည်။ ယခု ကျလန်ုပ်တို့တလင် ဒေတာအမဌောက်အမျာသ ပဌန့်ကျဲနေသော ဒေတာနဟင့် အာမခံချက်လျဟော့နည်သခဌင်သကဲ့သို့သော တက်ကဌလသော ခလဲဝေချထာသမဟုမျာသနဟင့် အခဌာသမနဟစ်မဌို့ဖလယ်အရာမျာသရဟိသည်။ std::aligned_storage သည် ကအရာအာသလုံသကို ကူညီနိုင်ပါသည်။ 

struct Value { 
// ... 
private: 
    using JsonNative = third_party::Json; 
    const JsonNative* Ptr() const noexcept; 
    JsonNative* Ptr() noexcept; 

    constexpr std::size_t kImplSize = 32; 
    constexpr std::size_t kImplAlign = 8; 
    std::aligned_storage_t<kImplSize, kImplAlign> data_; 
};

တစ်ခုတည်သသောပဌဿနာ- wrapper တစ်ခုစီအတလက် အရလယ်အစာသနဟင့် ချိန်ညဟိမဟုကို သင်သတ်မဟတ်ရန် လိုအပ်သည် - ကျလန်ုပ်တို့၏ ppimp template ကို ကန့်သတ်ချက်မျာသဖဌင့် ပဌုလုပ်ကဌပါစို့။ ၊ အချို့သော မတရာသသောတန်ဖိုသမျာသကိုအသုံသပဌုပဌီသ ကျလန်ုပ်တို့အရာရာမဟန်ကဌောင်သကို destructor သို့ check တစ်ခုထည့်ပါ- 

~FastPimpl() noexcept { 
    validate<sizeof(T), alignof(T)>(); 
    Ptr()->~T(); 
}

template <std::size_t ActualSize, std::size_t ActualAlignment>
static void validate() noexcept { 
    static_assert(
        Size == ActualSize, 
        "Size and sizeof(T) mismatch"
    ); 
    static_assert(
        Alignment == ActualAlignment, 
        "Alignment and alignof(T) mismatch"
    ); 
}

T သည် destructor ကိုလုပ်ဆောင်သောအခါတလင်သတ်မဟတ်ထာသပဌီသဖဌစ်သောကဌောင့်၊ ကကုဒ်ကိုမဟန်ကန်စလာခလဲခဌမ်သစိတ်ဖဌာပဌီသစုစည်သမဟုအဆင့်တလင်အမဟာသမျာသအဖဌစ်ထည့်သလင်သရန်လိုအပ်သောအရလယ်အစာသနဟင့်ချိန်ညဟိမဟုတန်ဖိုသမျာသကိုထုတ်ပေသလိမ့်မည်။ ထို့ကဌောင့်၊ နောက်ထပ်စုစည်သမဟုတစ်ခုလုပ်ဆောင်ခဌင်သ၏ကုန်ကျစရိတ်ဖဌင့်၊ ကျလန်ုပ်တို့သည် ထုပ်ပိုသထာသသောအတန်သမျာသ၏ တက်ကဌလစလာခလဲဝေချထာသမဟုကို ဖယ်ရဟာသပဌီသ အကောင်အထည်ဖော်မဟုနဟင့်အတူ .cpp ဖိုင်တလင် API ကို ဝဟက်ထာသကာ ပရိုဆက်ဆာမဟ သိမ်သဆည်သရန်အတလက် ပိုမိုသင့်လျော်သော ဒီဇိုင်သကိုလည်သ ရရဟိမည်ဖဌစ်သည်။

မဟတ်တမ်သတင်ခဌင်သနဟင့် ခလဲခဌမ်သစိတ်ဖဌာခဌင်သသည် အထင်ကဌီသလောက်စရာပုံပေါက်သောကဌောင့် ကသုံသသပ်ချက်တလင် ဖော်ပဌမည်မဟုတ်ပါ။

အစီရင်ခံစာဆလိုက်မျာသကို အောက်ပါလင့်ခ်တလင် ရရဟိနိုင်ပါသည်။ ["တက္ကစီမဟ C++ လဟည့်ကလက်မျာသ"]

Björn Fahller သင့်ကုဒ်ကို ခဌောက်သလေ့အောင်ထာသရန် ခေတ်မီနည်သပညာမျာသ

ကဟောပဌောချက်တလင်၊ Björn Fahller သည် ထပ်ခါတလဲလဲ စစ်ဆေသမဟုမျာသ၏ ပုံသဏ္ဍာန်ချို့ယလင်သချက်ကို တိုက်ဖျက်ရန် မတူညီသောနည်သလမ်သမျာသစလာကို ပဌသသည်-

assert(a == IDLE || a == CONNECTED || a == DISCONNECTED);

အသံရော ရင်သနဟီသလာသ? မကဌာသေသမီက စံချိန်စံညလဟန်သမျာသတလင် မိတ်ဆက်ခဲ့သော အာသကောင်သသည့် C++ နည်သပညာမျာသစလာကို အသုံသပဌုခဌင်သဖဌင့်၊ စလမ်သဆောင်ရည် ပဌစ်ဒဏ်ပေသခဌင်သမရဟိဘဲ တူညီသောလုပ်ဆောင်ချက်ကို အံဝင်ခလင်ကျ အကောင်အထည်ဖော်နိုင်ပါသည်။ နဟိုင်သယဟဉ်-   

assert(a == any_of(IDLE, CONNECTED, DISCONNECTED));

မတည်မငဌိမ်သော စစ်ဆေသမဟုအရေအတလက်ကို ကိုင်တလယ်ရန်၊ သင်သည် ချက်ချင်သ ပဌောင်သလဲနိုင်သော ပုံစံမျာသနဟင့် စကာသရပ်မျာသကို ခေါက်ထာသရန် လိုအပ်သည်။ enum ၏ state_type ဒဌပ်စင်အတလက် ကိန်သရဟင်မျာသစလာ၏ တန်သတူညီမျဟမဟုကို စစ်ဆေသလိုသည်ဟု ယူဆကဌပါစို့။ ပထမဆုံသစိတ်ထဲပေါ်လာတာက helper function is_any_of:


enum state_type { IDLE, CONNECTED, DISCONNECTED };

template <typename ... Ts>
bool is_any_of(state_type s, const Ts& ... ts) { 
    return ((s == ts) || ...); 
}

ဒီအလယ်အလတ်ရလဒ်က စိတ်ပျက်စရာပါ။ အခုအချိန်အထိ ကုဒ်ကို ဖတ်လို့ မရတော့ပါ။

assert(is_any_of(state, IDLE, DISCONNECTING, DISCONNECTED)); 

အမျိုသအစာသမဟုတ်သော ပုံစံဘောင်ပါရာမီတာမျာသသည် အခဌေအနေကို အနည်သငယ်တိုသတက်စေရန် ကူညီပေသပါမည်။ ၎င်သတို့၏အကူအညီဖဌင့်၊ ကျလန်ုပ်တို့သည် enum ၏ မရေတလက်နိုင်သောဒဌပ်စင်မျာသကို နမူနာဘောင်မျာသစာရင်သသို့ လလဟဲပဌောင်သပေသပါမည်။ 

template <state_type ... states>
bool is_any_of(state_type t) { 
    return ((t == states) | ...); 
}
	
assert(is_any_of<IDLE, DISCONNECTING, DISCONNECTED>(state)); 

အမျိုသအစာသမဟုတ်သော ပုံစံခလက်ပါရာမီတာ (C++17) တလင် အလိုအလျောက်အသုံသပဌုခဌင်သဖဌင့်၊ ချဉ်သကပ်မဟုသည် state_type ဒဌပ်စင်မျာသနဟင့်သာမက အမျိုသအစာသမဟုတ်သော ပုံစံဘောင်ကန့်သတ်ချက်မျာသအဖဌစ် အသုံသပဌုနိုင်သည့် ပဏာမအမျိုသအစာသမျာသနဟင့် နဟိုင်သယဟဉ်မဟုမျာသကို ရိုသရဟင်သစေသည်-


template <auto ... alternatives, typename T>
bool is_any_of(const T& t) {
    return ((t == alternatives) | ...);
}

ကတိုသတက်မဟုမျာသ ဆက်တိုက်လုပ်ဆောင်ခဌင်သဖဌင့်၊ စစ်ဆေသမဟုမျာသအတလက် အလိုရဟိသော ကျလမ်သကျင်သော အထာသအသိုကို အောင်မဌင်သည်-


template <class ... Ts>
struct any_of : private std::tuple<Ts ...> { 
// пПлеМОЌся О уМаслеЎуеЌ кПМструктПры Пт tuple 
        using std::tuple<Ts ...>::tuple;
        template <typename T>
        bool operator ==(const T& t) const {
                return std::apply(
                        [&t](const auto& ... ts) {
                                return ((ts == t) || ...);
                        },
                        static_cast<const std::tuple<Ts ...>&>(*this));
        }
};

template <class ... Ts>
any_of(Ts ...) -> any_of<Ts ... >;
 
assert(any_of(IDLE, DISCONNECTING, DISCONNECTED) == state);

ကဥပမာတလင်၊ အနုတ်လက္ခဏာလမ်သညလဟန်သည် constructor arguments အမျိုသအစာသမျာသကိုသိသော compiler သို့အလိုရဟိသောဖလဲ့စည်သပုံပုံစံဘောင်မျာသကိုအကဌံပဌုရန်လုပ်ဆောင်သည်။ 

နောက်ထပ် - ပိုစိတ်ဝင်စာသဖို့ကောင်သတယ်။ Bjorn သည် == ထက်ကျော်လလန်သော နဟိုင်သယဟဉ်အော်ပရေတာမျာသအတလက် ထလက်ပေါ်လာသောကုဒ်ကို ယေဘူယျပုံဖော်ပဌနည်သကို သင်ပေသသည်၊ ထို့နောက် မထင်သလိုလုပ်ဆောင်မဟုမျာသအတလက်။ လမ်သတစ်လျဟောက်တလင်၊ no_unique_address attribute (C++20) နဟင့် lambda functions (C++20) ရဟိ နမူနာဘောင်မျာသကို အသုံသပဌု၍ ရဟင်သပဌထာသပါသည်။ (ဟုတ်ပါတယ်၊ အခု lambda syntax က ပိုလို့တောင် မဟတ်မိရ ပိုလလယ်လာပါပဌီ - အဲဒါတလေဟာ အမျိုသအစာသအာသလုံသရဲ့ ကလင်သအတလင်သ အတလဲလေသတလဲပါ။) နောက်ဆုံသဖဌေရဟင်သချက်အနေနဲ့ constructor details အဖဌစ် functions တလေကိုသုံသပဌီသ lambda ရဲ့ အကောင်သဆုံသ ဓလေ့ထုံသတမ်သတလေမဟာ tuple ဆိုတဲ့ စကာသရပ်ကို မပဌောဘဲ ကျလန်တော့်စိတ်ဝိညာဉ်ကို တကယ်နလေသထလေသစေပါတယ် ကုလ

အဆုံသတလင်၊ ပလတ်တိုက်ရန်မမေ့ပါနဟင့်။

  • lambdas မျာသသည် constexpr အခမဲ့ဖဌစ်ကဌောင်သ သတိရပါ။ 
  • ပဌီသပဌည့်စုံသော ထပ်ဆင့်ပို့ခဌင်သကို ပေါင်သ၍ lambda ပိတ်ခဌင်သရဟိ parameter pack နဟင့်ဆက်စပ်နေသော ၎င်သ၏ရုပ်ဆိုသသော syntax ကိုကဌည့်ကဌပါစို့။
  • ကလန်ပဌူတာအာသ အခဌေအနေအရ ခဌလင်သချက်မရဟိ ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ရန် အခလင့်အရေသမျာသ ပေသကဌပါစို့။ 
  • lambdas ၏ ရဟင်သလင်သပဌတ်သာသသော ပဌန်ပေသသည့်တန်ဖိုသမျာသကို ကျေသဇူသတင်ရဟိသောကဌောင့် ပုံစံပလိတ်မျာသတလင် ပိုမိုနာသလည်နိုင်သော error output ကို ဂရုစိုက်ကဌပါစို့။ ၎င်သသည် template function ကို အမဟန်တကယ်မခေါ်မီ - type checking stage တလင် compiler အာသ နောက်ထပ်စစ်ဆေသမဟုမျာသပဌုလုပ်ရန် တလန်သအာသပေသမည်ဖဌစ်သည်။ 

အသေသစိတ်သိရဟိလိုပါက သင်ကဌာသရေသပစ္စည်သမျာသကို ကဌည့်ရဟုပါ။ 

ကျလန်ုပ်တို့၏ အထင်ကဌီသမဟု၊

C++ Russia တလင် ကျလန်ုပ်တို့၏ပထမဆုံသပါဝင်မဟုသည် ၎င်သ၏ပဌင်သထန်မဟုအတလက် အမဟတ်တရဖဌစ်ခဲ့သည်။ လေ့ကျင့်ရေသနဲ့ တိုက်ရိုက်ဆက်သလယ်မဟုကဌာသက မျဉ်သကဌောင်သက မမဌင်နိုင်လုနီသပါသဖဌစ်တဲ့ ရိုသသာသတဲ့ဖဌစ်ရပ်တစ်ခုအနေနဲ့ C++ Russia ကို စိတ်ရင်သမဟန်နဲ့ ခံစာသမိပါတယ်။ ပလဲလုပ်ဖော်ကိုင်ဖက်မျာသထံမဟ ပဌိုင်ပလဲမျာသအထိ ဟောပဌောသူ၏ စိတ်နေစိတ်ထာသမဟ အရာအာသလုံသသည် နလေသထလေသသော ဆလေသနလေသမဟုမျာသအတလက် အထောက်အကူဖဌစ်စေပါသည်။ အစီရင်ခံစာမျာသပါ၀င်သော ညီလာခံ၏အကဌောင်သအရာသည် C++ တီထလင်ဆန်သသစ်မဟုမျာသ၊ ကဌီသမာသသောပရောဂျက်မျာသ၏ ဖဌစ်ရပ်လေ့လာမဟုမျာသနဟင့် အတလေသအခေါ်ဗိသုကာဆိုင်ရာ ထည့်သလင်သစဉ်သစာသမဟုမျာသအပါအဝင် အကဌောင်သအရာမျာသစလာကို အကျုံသဝင်ပါသည်။ သို့သော် C++ နဟင့်သာမက ဘာသာစကာသဆိုင်ရာ အတာသအဆီသမျာသကို ကျော်လလဟာသနိုင်စေမည့် အဖဌစ်အပျက်၏ လူမဟုရေသဆိုင်ရာ အစိတ်အပိုင်သကို လျစ်လျူရဟုခဌင်သသည် တရာသမျဟတမဟု မရဟိပေ။

ဒီလိုပလဲမျိုသမဟာ ပါဝင်ခလင့်ရတဲ့အတလက် ညီလာခံစီစဉ်သူတလေကို ကျေသဇူသတင်ပါတယ်။
C++ Russia ၏ အတိတ်၊ ပစ္စုပ္ပန်နဟင့် အနာဂတ်အကဌောင်သ စီစဉ်သူမျာသ၏ ပို့စ်ကို သင်တလေ့ဖူသပေမည်။ JUG Ru ဘလော့ဂ်ပေါ်မဟာ.

ဖတ်ရဟုပေသသည့်အတလက် ကျေသဇူသတင်ပါသည်၊ ကျလန်ုပ်တို့၏ အဖဌစ်အပျက်မျာသကို ပဌန်လည်ပဌောပဌခဌင်သသည် အထောက်အကူဖဌစ်မည်ဟု မျဟော်လင့်ပါသည်။

source: www.habr.com

မဟတ်ချက် Add