C++ روسیه: دا څنګه پیښ شوي

که د لوبې په پیل کې تاسو ووایاست چې په دیوال کې د C++ کوډ ځړول شوی، نو په پای کې به تاسو په پښو کې ډزې وکړي.

Bjarne Stroustrup

د اکتوبر له 31 څخه تر نومبر 1 پورې، د C++ روسیه پیټر کنفرانس په سینټ پیټرزبورګ کې ترسره شو - په روسیه کې یو له لوی پیمانه پروګرامونو کنفرانسونو څخه دی چې د JUG Ru ګروپ لخوا تنظیم شوی. په بلنه شوي ویناوالو کې د C++ معیارونو کمیټې غړي، د CppCon سپیکرې، د O'Reilly کتاب لیکوالان، او د پروژو ساتونکي لکه LLVM، libc++، او بوسټ شامل دي. کنفرانس د تجربه لرونکو C++ پراختیا کونکو په هدف دی چې غواړي خپل تخصص ژور کړي او په ژوندۍ اړیکه کې تجربې تبادله کړي. محصلین، فارغ شوي محصلین او د پوهنتون استادانو ته خورا ښه تخفیف ورکول کیږي.

د کنفرانس مسکو نسخه به د راتلونکي کال د اپریل په پیل کې د لیدو لپاره شتون ولري ، مګر په ورته وخت کې زموږ زده کونکي به تاسو ته ووایی چې په وروستي پیښه کې دوی کوم په زړه پوري شیان زده کړل. 

C++ روسیه: دا څنګه پیښ شوي

عکس له د کنفرانس البوم

زموږ په اړه

د ملي څیړنې پوهنتون د اقتصاد عالي لیسې دوه زده کونکي - سینټ پیټرزبورګ پدې پوسټ کې کار کاوه:

  • لیزا واسیلینکو د څلورم کال فارغ التحصیل زده کونکی دی چې د پلي شوي ریاضیاتو او کمپیوټر ساینس برنامې برخې په توګه د برنامې ژبې مطالعه کوي. په پوهنتون کې زما په لومړي کال کې د C++ ژبې سره آشنا شوم، ما وروسته په صنعت کې د انټرنشپونو له لارې د دې سره کار کولو تجربه ترلاسه کړه. په عمومي توګه د پروګرام کولو ژبو او په ځانګړي توګه د فعال پروګرام کولو لپاره زما لیوالتیا په کنفرانس کې د راپورونو په انتخاب کې خپله نښه پریښوده.
  • دانیا سمیرنوف د ماسټر برنامې "پروګرامینګ او ډیټا تحلیل" د لومړي کال زده کونکی دی. کله چې په ښوونځي کې وم، ما په C++ کې د اولمپیاډ ستونزې لیکلې، او بیا دا یو څه پیښ شول چې ژبه په دوامداره توګه په تعلیمي فعالیتونو کې راغله او بالاخره اصلي کاري ژبه شوه. ما پریکړه وکړه چې په کنفرانس کې برخه واخلم ترڅو خپلې پوهې ته وده ورکړم او د نویو فرصتونو په اړه هم زده کړم.

په خبرپاڼه کې راغلي، چې د پوهنځي رهبري ډېری وخت زموږ د تخصص له مخې د ښوونیزو پېښو په اړه معلومات شریکوي. په سپتمبر کې موږ د C++ روسیې په اړه معلومات ولیدل او پریکړه یې وکړه چې د اوریدونکو په توګه راجستر کړو. دا په داسې کنفرانسونو کې د ګډون زموږ لومړۍ تجربه ده.

د کنفرانس جوړښت

  • راپورونه

د دوو ورځو په جریان کې، متخصصینو 30 راپورونه ولوستل، چې ډیری ګرمې موضوعګانې یې پوښلې: د پلي شوي ستونزو حل کولو لپاره د ژبې ځانګړتیاوو هوښیار کارول، د نوي معیار سره په اړیکه کې د ژبې راتلونکی تازه کول، د C++ ډیزاین کې جوړجاړی او احتیاطونه کله چې د دوی پایلو سره کار کوي، مثالونه. د پروژې په زړه پورې جوړښت، په بیله بیا د ژبې زیربنا ځینې توضیحات. درې نندارې په یو وخت کې ترسره شوې، ډیری وختونه دوه په روسیه او یو په انګلیسي کې.

  • د بحث زونونه

د وینا وروسته، ټولې بې پوښتنې پوښتنې او نیمګړتیاوې د ویناوالو سره د اړیکو لپاره ځانګړي ټاکل شوي ساحې ته لیږدول شوي، چې د مارکر بورډونو سره سمبال شوي. د خوندور خبرو اترو سره د وینا ترمینځ وقفې لرې کولو لپاره یوه ښه لاره.

  • د رڼا خبرې او غیر رسمي خبرې اترې

که تاسو غواړئ یو لنډ راپور ورکړئ، تاسو کولی شئ د ماښام د رڼا خبرې لپاره په سپینه تخته کې لاسلیک کړئ او د کنفرانس موضوع په اړه د هر څه په اړه د خبرو کولو لپاره پنځه دقیقې وخت ترلاسه کړئ. د مثال په توګه ، د C++ لپاره د سینیټایزرونو ګړندي پیژندنه (د ځینو لپاره دا نوی و) یا د سین څپې نسل کې د بګ په اړه کیسه چې یوازې اوریدل کیدی شي ، مګر نه لیدل کیږي.

بله بڼه د پینل بحث دی "د زړه څخه د زړه کمیټې سره." په سټیج کې د معیاري کولو کمیټې ځینې غړي دي ، په پروجیکټر کې د اور ځای دی (په رسمي ډول - د صادقانه فضا رامینځته کولو لپاره ، مګر دلیل "ځکه چې هرڅه په اور کې دي" په زړه پوري ښکاري) ، د C++ معیاري او عمومي لید په اړه پوښتنې. ، پرته له تودو تخنیکي بحثونو او هولیوارونو. دا معلومه شوه چې په کمیټه کې ژوندي خلک هم شامل دي چې ممکن په بشپړ ډول ډاډه نه وي یا ممکن په یو څه نه پوهیږي.

د هولیوار د مینه والو لپاره، دریمه پیښه په قضیه کې پاتې شوه - د BOF سیشن "Go vs. C++". موږ د Go عاشق، د C++ مینه وال اخلو، د غونډې له پیل مخکې دوی په ګډه د یوې موضوع په اړه 100500 سلایډونه چمتو کوي (لکه په C++ کې د بسته بندۍ ستونزې یا په Go کې د جنریک نشتوالی)، او بیا دوی په خپل منځ کې ژوندی بحث کوي. د لیدونکو سره، او لیدونکي هڅه کوي چې په یو وخت کې دوه ټکي درک کړي. که چیرې هولیور د شرایطو څخه بهر پیل شي، مدیر مداخله کوي او اړخونه پخلا کوي. دا بڼه عادی ده: د پیل څخه څو ساعته وروسته، یوازې نیم سلایډونه بشپړ شوي. پای باید خورا ګړندی شي.

  • ملګری ولاړ دی

د کنفرانس شریکانو په تالار کې استازیتوب کاوه - په سټینډونو کې دوی د اوسنیو پروژو په اړه خبرې وکړې، د انټرنشپونو او کارموندنې وړاندیزونه، پوښتنې او کوچنۍ سیالۍ ترسره کړې، او همدارنګه په زړه پورې انعامونه هم ورکړل شول. په ورته وخت کې، ځینې شرکتونو حتی وړاندیز کړی چې د مرکو لومړنیو مرحلو ته لاړ شي، کوم چې د هغو کسانو لپاره ګټور وي چې نه یوازې د راپورونو اوریدلو لپاره راغلي.

د راپورونو تخنیکي توضیحات

موږ دواړه ورځې راپورونه اوریدل. په ځینو وختونو کې دا ستونزمنه وه چې د موازي راپورونو څخه یو راپور غوره کړو - موږ موافقه وکړه چې د وقفې په جریان کې ترلاسه شوي پوهه ویش او تبادله کړو. او حتی داسې ښکاري چې ډیر څه پاتې دي. دلته موږ غواړو د ځینو راپورونو د منځپانګې په اړه خبرې وکړو چې موږ یې خورا په زړه پوري موندلي

په C++ کې استثناوې د کمپیلر اصلاح کولو پرزم له لارې، رومن روسییف

C++ روسیه: دا څنګه پیښ شوي
څخه سلایډ презентации

لکه څنګه چې سرلیک وړاندیز کوي، رومن د مثال په توګه د LLVM په کارولو سره د استثنا سره کار کولو ته ګوري. په ورته وخت کې، د هغو کسانو لپاره چې په خپل کار کې کلینګ نه کاروي، راپور لاهم کولی شي یو څه نظر ورکړي چې څنګه کوډ په بالقوه توګه مطلوب کیدی شي. دا ځکه چې د تالیف کونکو او ورته معیاري کتابتونونو پراختیا کونکي یو له بل سره اړیکه نیسي او ډیری بریالۍ حلونه همغږي کیدی شي.

نو، د استثنا اداره کولو لپاره، تاسو اړتیا لرئ چې ډیری شیان ترسره کړئ: د سمبالولو کوډ (که کوم وي) یا په اوسني کچه وړیا سرچینې زنګ ووهئ او سټیک لوړ کړئ. دا ټول د دې حقیقت لامل کیږي چې تالیف کونکی د تلیفونونو لپاره اضافي لارښوونې اضافه کوي چې احتمالي استثناوې غورځوي. له همدې امله، که استثنا په حقیقت کې پورته نه شي، برنامه به لاهم غیر ضروري عملونه ترسره کړي. د دې لپاره چې په یو ډول د سر سر کم کړي، LLVM د شرایطو ټاکلو لپاره ډیری هوریستیکونه لري چیرې چې د استثنایی اداره کولو کوډ اضافه کولو ته اړتیا نلري یا د "اضافي" لارښوونو شمیر کم کیدی شي.

سپیکر شاوخوا یو درجن معاینه کوي او دواړه حالتونه ښیې چیرې چې دوی د برنامه اجرا کولو ګړندي کولو کې مرسته کوي ، او هغه چیرې چې دا میتودونه د تطبیق وړ ندي.

په دې توګه، رومن روسیایف زده کونکي دې پایلې ته رسوي چې کوډ چې استثناوې لري تل د صفر سر سره نه اجرا کیدی شي، او لاندې مشوره ورکوي:

  • کله چې د کتابتونونو پراختیا، دا ارزښت لري چې په اصولو کې استثناوې پریږدي؛
  • که استثناء ته لاهم اړتیا وي، نو هرکله چې امکان ولري نو هرچیرې د noexcept (او const) اصالحاتو اضافه کولو ارزښت لري ترڅو تالیف کوونکی د امکان تر حده مطلوب کړي.

په عموم کې، سپیکر دا نظر تایید کړ چې استثناوې لږ تر لږه کارول کیږي یا په بشپړ ډول پریښودل کیږي.

د راپور سلایډونه په لاندې لینک کې شتون لري: ["C++ د LLVM کمپیلر اصلاح کولو لینز له لارې استثناوې"]

جنراتورونه، کوروټینونه او نور د مغز غیر فعاله خوږه، اډی شاویت

C++ روسیه: دا څنګه پیښ شوي
څخه سلایډ презентации

په دې کنفرانس کې یو له ډیرو راپورونو څخه چې په C++20 کې نوښتونو ته وقف شوی و، نه یوازې د دې رنګارنګ پریزنټشن لپاره، بلکې د راټولولو پروسس منطق (لوپ، کال بیکس لپاره) سره د موجوده ستونزو روښانه پیژندلو لپاره هم د یادولو وړ و.

اډي شاویت لاندې ټکي په ګوته کوي: اوس مهال موجود میتودونه د ټول ټولګې څخه تیریږي او ځینې داخلي منځګړی حالت ته لاسرسی نه ورکوي (یا دوی د کال بیکس په حالت کې کوي ، مګر د لوی شمیر ناخوښه اړخیزو اغیزو سره ، لکه د کال بیک دوزخ) . داسې بریښي چې تکرار کونکي شتون لري ، مګر حتی د دوی سره هرڅه دومره اسانه ندي: دلته د ننوتلو او وتلو عمومي نقطې شتون نلري (پیل → پای په مقابل کې rbegin → رینډ او داسې نور) ، دا روښانه نده چې موږ به څومره وخت تکرار کړو؟ د C++20 سره پیل کول، دا ستونزې حل کیږي!

لومړی اختیار: سلسلې. د تکرار کونکو لپاه کولو سره ، موږ د تکرار پیل او پای لپاره یو عام انٹرفیس ترلاسه کوو ، او موږ د کمپوز کولو وړتیا هم ترلاسه کوو. دا ټول د ډیټا پروسس کولو بشپړ پایپ لاینونو رامینځته کول اسانه کوي. مګر هرڅه دومره اسانه ندي: د محاسبې منطق برخه د ځانګړي تکرار پلي کولو دننه موقعیت لري ، کوم چې کولی شي د پوهیدو او ډیبګ کولو لپاره کوډ پیچلی کړي.

C++ روسیه: دا څنګه پیښ شوي
څخه سلایډ презентации

ښه ، د دې قضیې لپاره ، C++ 20 کورټینونه اضافه کړل (هغه دندې چې چلند یې په Python کې جنراتورونو ته ورته دی): اجرا کول د مینځنۍ حالت ساتلو پرمهال د ځینې اوسني ارزښت بیرته راګرځولو سره ځنډول کیدی شي. په دې توګه، موږ نه یوازې د ډیټا سره کار کول ترلاسه کوو لکه څنګه چې ښکاري، بلکې په یو ځانګړي کورټین کې ټول منطق هم شاملوي.

مګر په مرهم کې مچ شتون لري: دا مهال دوی یوازې د موجوده تالیف کونکو لخوا په جزوي ډول ملاتړ کیږي ، او دا هم په سمه توګه نه پلي کیږي لکه څنګه چې موږ غواړو: د مثال په توګه ، دا لاهم په کورټینونو کې د حوالې او لنډمهاله شیانو کارولو ارزښت نلري. سربیره پردې ، پدې لیست کې ځینې محدودیتونه شتون لري چې کوروټینونه څه کیدی شي ، او د کانسټیکسپر افعال ، جوړونکي / تخریب کونکي ، او اصلي پدې لیست کې ندي شامل شوي.

په دې توګه، کوروټینونه د معلوماتو پروسس کولو منطق په سادګۍ سره د ستونزو یوه مهمه برخه حل کوي، مګر د دوی اوسني تطبیق پرمختګ ته اړتیا لري.

توکي:

د Yandex.Taxi، انتون پولوخین څخه C++ چلونه

زما په مسلکي فعالیتونو کې، ځینې وختونه زه باید په بشپړ ډول مرستندویه شیان پلي کړم: د داخلي انٹرفیس او د ځینې کتابتون API، ننوتل یا پارس کولو ترمنځ یو ریپر. په دې حالت کې، معمولا هیڅ اضافي اصلاح ته اړتیا نشته. مګر څه که چیرې دا برخې په RuNet کې په ځینو خورا مشهور خدماتو کې کارول کیږي؟ په داسې حالت کې، تاسو باید یوازې د لاګونو هر ساعت ټیرابایټ پروسس کړئ! بیا هر ملی ثانوي حساب کوي او له همدې امله تاسو باید مختلف چالونو ته لاره هواره کړئ - انتون پولوخین د دوی په اړه خبرې وکړې.

شاید ترټولو په زړه پوری مثال د پوائنټر څخه پلي کولو (پیمپل) نمونه پلي کول وو. 

#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 فایل ته واستول: موږ د پوښل شوي 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_; 
};

یوازینۍ ستونزه: تاسو اړتیا لرئ د هر ریپر لپاره اندازه او ترتیب مشخص کړئ - راځئ چې زموږ د پامپل ټیمپلیټ د پیرامیټونو سره جوړ کړو ، ځینې خپلسري ارزښتونه وکاروئ او ویجاړونکي ته چک اضافه کړئ چې موږ هرڅه سم ترلاسه کړل: 

~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 لا دمخه د تخریب کونکي پروسس کولو په وخت کې تعریف شوی، دا کوډ به په سمه توګه تجزیه شي او د تالیف په مرحله کې به دا اړین اندازه او د سمون ارزښتونه تولید کړي چې اړتیا ورته د غلطیو په توګه داخل شي. په دې توګه، د یو اضافي تالیف چلولو په لګښت کې، موږ د پوښل شوي ټولګیو متحرک تخصیص څخه ځان خلاصوو، د تطبیق سره د .cpp فایل کې API پټوو، او همدارنګه یو ډیزاین ترلاسه کوو چې د پروسیسر لخوا د کیچ کولو لپاره خورا مناسب وي.

ننوتل او پارس کول لږ اغیزمن ښکاري او له همدې امله به پدې بیاکتنه کې یادونه ونه شي.

د راپور سلایډونه په لاندې لینک کې شتون لري: ["د ټکسي څخه C++ چالونه"]

ستاسو د کوډ ساتلو لپاره عصري تخنیکونه DRY، Björn Fahller

په دې خبرو کې، Björn Fahller د تکرار حالت چکونو د سټایلیک نیمګړتیا سره د مبارزې لپاره ډیری مختلفې لارې ښیي:

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

آشنا غږ؟ په وروستي معیارونو کې معرفي شوي د څو پیاوړو C++ تخنیکونو په کارولو سره، تاسو کولی شئ د فعالیت جریمې پرته ورته فعالیت په ښه توګه پلي کړئ. پرتله کول:   

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

د غیر ثابت شمیر چیکونو اداره کولو لپاره ، تاسو سمدلاسه د مختلف ټیمپلیټونو او فولډ څرګندونو کارولو ته اړتیا لرئ. راځئ فرض کړو چې موږ غواړو د څو متغیرونو مساوات د enum د حالت_ ډول عنصر ته وګورو. لومړی شی چې ذهن ته راځي د مرستندویه فنکشن لیکل دي_کوم_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)); 

غیر ډول ټیمپلیټ پیرامیټونه به د وضعیت لږ ښه کولو کې مرسته وکړي. د دوی په مرسته، موږ به د اینوم د شمیر وړ عناصر د ټیمپلیټ پیرامیټونو لیست ته انتقال کړو: 

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

په غیر ډول ټیمپلیټ پیرامیټر (C++17) کې د آټو کارولو سره ، چلند په ساده ډول نه یوازې د ریاست_ ډول عناصرو سره پرتله کولو لپاره عمومي شوی ، بلکه د لومړني ډولونو سره هم چې د غیر ډول ټیمپلیټ پیرامیټرونو په توګه کارول کیدی شي:


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);

په دې مثال کې، د کسر لارښود د مطلوب جوړښت ټیمپلیټ پیرامیټرونه تالیف کونکي ته وړاندیز کوي، کوم چې د جوړونکي دلیلونو ډولونه پیژني. 

نور - ډیر په زړه پورې. Bjorn درس ورکوي چې څنګه د == څخه هاخوا د پرتله کولو آپریټرانو لپاره پایله کوډ عمومي کړي، او بیا د خپل سري عملیاتو لپاره. د لارې په اوږدو کې، دا ډول ځانګړتیاوې لکه no_unique_address خاصیت (C++20) او د لامبډا افعال (C++20) کې د ټیمپلیټ پیرامیټونه د کارولو مثالونو په کارولو سره تشریح شوي. (هو، اوس د لامبډا ترکیب د یادولو لپاره خورا اسانه دی - دا د هر ډول قوس څلور پرله پسې جوړې دي.) د ساختماني توضیحاتو په توګه د افعالاتو په کارولو سره وروستی حل واقعیا زما روح ګرموي ، نه د لامبډا په غوره دودونو کې د بیان ټپل ذکر کول. حساب

په پای کې، د هغې پالش کول مه هیروئ:

  • په یاد ولرئ چې lambdas د وړیا لپاره constexpr دي؛ 
  • راځئ چې کامل فارورډینګ اضافه کړو او د لامبډا بند کې د پیرامیټر پیک په تړاو د دې بدصورت ترکیب وګورو؛
  • راځئ چې کمپیلر ته د شرایطو سره د اصلاح کولو لپاره نور فرصتونه ورکړو پرته له دې؛ 
  • راځئ چې په ټیمپلیټونو کې د لا پوهیدو وړ غلطۍ محصول ته پاملرنه وکړو چې د لامبډاس څرګند بیرته راستنیدونکي ارزښتونو څخه مننه. دا به کمپیلر دې ته اړ کړي چې مخکې لدې چې د ټیمپلیټ فنکشن واقعیا ویل کیږي نور چیکونه وکړي - د ډول چیک کولو مرحله کې. 

د جزیاتو لپاره، مهرباني وکړئ د لیکچر موادو ته مراجعه وکړئ: 

زموږ تاثرات

په C++ روسیه کې زموږ لومړی ګډون د هغې د شدت لپاره د یادولو وړ و. ما د C++ روسیه د یوې صادقانه پیښې په توګه تاثر ترلاسه کړ، چیرې چې د روزنې او ژوندۍ اړیکو ترمنځ کرښه تقریبا د پام وړ نه ده. هر څه، د ویناوالو له مزاج څخه نیولې د غونډې د شریکانو تر سیالیو پورې، د تودو بحثونو لپاره مناسب دي. د کنفرانس محتوا، د راپورونو څخه جوړه شوې، د موضوعاتو پراخه لړۍ پوښي پشمول د C++ نوښتونه، د لویو پروژو قضیې مطالعې او ایډیالوژیکي معمارۍ نظرونه. مګر دا به غیر عادلانه وي چې د پیښې ټولنیز برخې له پامه غورځول شي، کوم چې نه یوازې د C++ په اړه د ژبې خنډونو په لرې کولو کې مرسته کوي.

موږ د کنفرانس تنظیم کونکو څخه مننه کوو چې په داسې یوه پیښه کې د ګډون فرصت لري!
تاسو ممکن د C++ روسیې د تیر، اوسني او راتلونکي په اړه د تنظیم کونکو پوسټ لیدلی وي د JUG Ru بلاګ کې.

د لوستلو لپاره مننه، او موږ امید لرو چې زموږ د پیښو تکرار ګټور و!

سرچینه: www.habr.com

Add a comment