مرحبا بالجميع!
في الآونة الأخيرة ، تم عقد C ++ سيبيريا 2019 القادم في نوفوسيبيرسك ، وكان للمؤتمر جو مريح والعديد من التقارير الجيدة. انتهزت هذه الفرصة للتحدث مع اثنين من المتحدثين لدينا ، الذين ستتمكن قريباً من رؤيتهم في موسكو.
إيفان تشوكيتش هو أحد مطوري كيدي ، وهو مدرس وباحث في تصميم لغات البرمجة في جامعة بلغراد.
ألكساندر جرانين ( جرانيناس ) متحدث ومطور معروف ومتخصص في FP ، منظم مجتمع LVDADAsk في نوفوسيبيرسك.

سيرجي: مرحباً بالجميع ، دعنا نتعرف. ألكساندر متحدث رئيسي في سيبيريا C ++ ، وكان إيفان متحدثًا رئيسيًا في العام الماضي. دعونا نتحدث عن البرمجة الوظيفية. بقدر ما أتذكر ، كان FP in C ++ هو موضوع الكلمة الرئيسية السابقة ، Ivan ...
إيفان: ليس كليًا ، ولكن جزئيًا - نعم.
سيرجي: وموضوع ألكساندر في التقرير يدور حول البرمجة الوظيفية. لذلك ، قمت بإعداد سؤالين ، الأول - كيف يمكنك تحديد AF؟
ألكساندر: لا أعتقد أن هناك تعريفًا "صحيحًا" واحدًا لمرض التصلب العصبي المتعدد ، لكنني أتحدث شخصيًا عني ، فإن التصلب العصبي المتعدد له تكوين وظيفي ووظائف من الدرجة الأولى.
إيفان: أوافق ، لكنني سأضيف المزيد من الوظائف ذات الترتيب الأعلى - تلك التي يمكن أن تأخذ وظائف أخرى كوسائط وتعود كنتيجة لذلك.
سيرجي : رابط إلى وظيفة في C - هل يعتبر؟
إيفان: لا ، C ليست لغة برمجة وظيفية :-)
سيرجي: أخبرني لماذا؟
إيفان: لأنه لا يمكنك إنشاء وظيفة جديدة من مجموعة من مؤشرات الوظائف ، يمكنك فقط الإشارة إلى تلك الموجودة. بالطبع ، إذا لم يتم استخدام بعض الخارقة التجميع.
سيرجي: عظيم ، الآن لدي إجابة رسمية! يسأل الناس هذا السؤال باستمرار لماذا C ليست لغة برمجة وظيفية ، لأن هناك وظائف كاملة هناك. وهذا هو السبب في أن لغة C ++ هي لغة وظيفية وأكثر قابلية للفهم ...
ألكساندر: لن أقول إن لغة C ++ هي لغة برمجة عملية بالفعل ، فهي تدعم مجموعة من النماذج المصبوبة في لغة واحدة.
سيرجي: يعني - C ++ يدعم النموذج الوظيفي ، بالطبع. بالمناسبة ، لماذا؟ هل يدعمها لأنه يمكنك معالجة وظائف الرتب العليا؟
إيفان: حسنًا ، يبدو لي أنه كان دائمًا هكذا ، لأنه حتى في C ++ 98 ، توجد وظائف من الرتبة العليا بالفعل ، حتى في STL. ليست هذه هي اللغة الوظيفية الأكثر ملاءمة - فهناك لغات تطبق FP وأفضل. ولكن لاحتياجاتي كان دائما وظيفية للغاية.
سيرجي: لكن من هذا المكان بمزيد من التفصيل. أي نوع من الاحتياجات لديك؟
إيفان: الأمر معقد. تعال ، اخبر قصة. عندما كنت في الجامعة ، مررنا LISP ، وكان الجميع يكرهون LISP لأنه قبيح. ولكن ما فهمت منه هو كيفية محاكاة C بنيات مباشرة في رمز LISP. ثم في أحد الأيام ، تم إصدار نسخة جديدة من Java ، تم إصدارها لأشياء مثل foreach
المضمنة ، واعتقدت: نجاح باهر ، تحتاج إلى مترجم جديد ، إصدار جديد من اللغة وكل ما هو جديد فقط لتنفيذ شيء ما قمت به في الجامعة على LISP ، والتي عموما لا تدعم حتى الحلقات. في تلك اللحظة ، أدركت أن FP شيء جميل لبناء تجريدات عالية المستوى ، ولهذا السبب استخدم C ++ الوظيفية في عام 2019.
سيرجي: في الواقع ، يمكنك استخدام FP لتصميم رفيع المستوى.
إيفان: بالضبط.
ألكساندر: في الوقت الحالي ، لا أعمل في C ++ ، لكنني لن أرفض استخدامه لمعالجة البيانات ، فهذا أكثر متعة مما كان عليه الحال في النهج الضروري. حتى عند مقارنتها بـ OOP ، على النقيض من ذلك ، فإن التحولات فقط مقبولة هنا ، وهذا مناسب.
سيرجي: حسنًا ، يمكنك استخدام FP ليس فقط مع C ++ ، أليس كذلك؟ حسنًا ، إذن السؤال التالي: أي جزء من C ++ تستخدمه؟ إذا كانت مشكلات التصميم فقط مهمة ، يمكنك فقط اختيار الجزء الذي يسير على ما يرام مع FP ، الجزء الذي تستخدمه حقًا.
إيفان: ستكون هذه بالتأكيد وظائف لامدا. والأهم من ذلك ، القوالب ، لأنها تسمح لك بتمرير وظائف أخرى كوسائط وكل شيء آخر ، وأن lambdas مجرد بناء جملة لطيف لكتابة الكائنات الوظيفية.
سيرجي: نعم ، لقد أدركنا بالفعل أنك تحب لامباس :-)
إيفان: ليس الأمر أنهم يحبونهم حقًا ، ولكن من الواضح أن هذا هو أفضل شيء لدينا في C ++ 98 ، إنه أكثر ملاءمة للعمل معهم.
ألكساندر: نعم ، أنا أحب lambdas - هذه الميزة عالمية جدًا بحيث لا يمكنك الكتابة عليها سوى بمفردها. هذا يشبه الموحد الشامل الذي يسمح لك ببناء أي منطق - ربما ليس جميلًا كما هو الحال في اللغات الأخرى ، ولكن ليس أقل فائدة.
سيرجي: إيفان ، لقد لاحظت هنا أن هناك معايير قبل C ++ 11 ، على سبيل المثال ، C ++ 03 ، وهو أمر شائع جدًا ، وهناك بالفعل ميزات وظيفية هناك. وهناك المزيد من الميزات الوظيفية في المعايير الجديدة ... هل يمكن القول أن C ++ تتجه نحو FP؟ هل ستستمر هذه الحركة أم تتوقف؟ ثم ماذا سوف يؤدي إلى؟
إيفان: هناك تقرير جيد صادر عن سيمون بيثون جونز حول لغات البرمجة بشكل عام ، وهناك رسم بيانيًا يوضح العديد من اللغات الآمنة واللغات المستخدمة. بدأت هاسكل قصتها كلغة آمنة تمامًا لا يمكن القيام بشيء فيها - لأنه لا يوجد I / O ، ولا شيء على الإطلاق. صنّف SPJ لغة C ولغات التجميع باعتبارها تلك مفيدة للغاية ، لكن في نفس الوقت غير آمن للغاية. منذ ذلك الحين ، بدأت هاسكل في التحرك نحو مزيد من الأمن. من ناحية أخرى ، فإن تلك الميزات التي تظهر في C ++ - تظهر بشكل أساسي لزيادة الأمان بحيث يمكنك كتابة البرامج الصحيحة بشكل أكثر بساطة. لقد حدث أن معظم هذه الأشياء تأتي من لغات البرمجة الوظيفية.
سيرجي: لماذا تعتقد ذلك؟ بسبب طبيعة AF؟
إيفان: نعم ، ربما بطبيعتها ... لكنني لا أعرف بالتأكيد.
ألكساندر: أعتقد أن AF يأسر الجميع ببساطة لأننا تعبنا من الصراع مع القوالب ، وإعادة ترتيب البايتات ، مع نوع من الثمالة ذات المستوى المنخفض - نريد شيئًا يستحق تطبيق ذكائنا.
سيرجي: هذا ، بالنسبة لك ، هذا نوع من التمرين الفكري؟
ألكساندر: نعم ، هكذا.
سيرجي: أنا أفهم. كم هو أكثر إثارة للاهتمام بالنسبة للمطور للتفكير في التجريدات عالية المستوى من تطبيق الميزات القياسية الغبية - هذا أمر غير سارة. ثم هذا هو السؤال C: هل لديك أي خبرة في التطبيق العملي لـ FP في C ++؟ أي مشاريع الإنتاج؟
إيفان: بالطبع. يحتوي KDE ، أحد أكبر المشاريع في العالم ، على العديد من الأجزاء التي تستخدم الأسلوب الوظيفي بكثافة. بالطبع ، هذا هو مزيج من C ++ أكثر شيوعًا في كائن C ++ ، إذا جاز التعبير ، مع مجموعة من المفاهيم الوظيفية. لم أكن أبداً أن أكون طاهرة أو شيء من هذا القبيل. أحاول دائمًا الجمع بين أفضل ما في العالمين.
سيرجي: ماذا عن هاسكل أو سكالا؟ بعد كل شيء ، فهي تستخدم على نطاق واسع في الإنتاج. كيف تحب فكرة أن هاسكل يعتبر الآن معيار اللغة الوظيفية؟ ويلاحظ هذا خاصة من قبل الأصوليين.
إيفان: نعم ، أوافق على أن هاسكل اليوم مرادف لـ FP. في الواقع ، ينظر الناس إلى أي ميزة من Haskell على أنها شيء متعلق بـ FP. هذا ليس صحيحًا بالضرورة ، لكنني أعتقد أن هاسكل أصبح بالفعل أكثر لغات البرمجة الوظيفية الأكاديمية شعبية. أعلم أن العديد من البنوك في لندن وأوروبا الشمالية تستخدم Haskell على نطاق واسع ، ولكن لا يزال Scala أكثر شعبية الآن.
ألكساندر: أوافق على أن Scala أكثر شيوعًا ، لكن يبدو أن Haskell هي لغة أكثر فاعلية ، ويتم تنفيذ معظم ميزاتها بشكل صحيح. هذا هو أنه عندما يكون لديك الكاري الذي يكون سهلاً ، عندما يكون هناك طريقة سهلة لصنع التركيبة ، تصبح البرمجة سهلة وبسيطة ، مثل المشي عبر الغابة والاستمتاع بالمناظر.
إيفان: ولكن في بعض الأحيان هناك الدببة في الغابة. إذا كنت في روسيا.
سيرجي: هل تعتقد أن C ++ مستوحى بشكل أساسي من هاسكل؟ هل يستحق كل هذا العناء؟
إيفان: هل تلمح إلى أي أعضاء معينين في اللجنة؟ :-) ألمح أحدهم إلى أن المفاهيم ظهرت كنتيجة لفهم الفصول الدراسية ، لكن بيورن أوقف هذه الشائعات وكتب بعض المستندات عن كيفية اختلاف المفاهيم عن الفصول الدراسية. من وجهة نظري ، فهي تختلف في كل شيء ، ولكنها تخدم غرض واحد. مجرد طرق مختلفة.
سيرجي: هل المستقبل / الوعد مرتبط بأي طريقة بـ FI؟ يبدو أن Bartosh جادل بأن هذه monads تنفيذها بشكل سيئ.
إيفان: حسنًا ، نعم ، يتم تنفيذها كأشخاص أحاديون ينقلون تتابعات ، لكنني لست متأكدًا مما هو الأكثر أهمية في هذه المسألة.
سيرجي: هل نحن بحاجة إلى دعم أحادي أحسن في C ++؟
ألكسندر: بالطبع ، هذه هي الميزة الأكثر أهمية التي يمكن أن تحول C ++ إلى لغة جيدة حقا.
إيفان: بالمناسبة ، بما أننا في المؤتمر ، اسمحوا لي أن أطرح عليك سؤالًا أيضًا ، سيرجي. قلت إن المؤتمرات مهمة مثيرة. شارك ما هو مثير للاهتمام حول هذا الموضوع ، وهل تنصحني أو الرفيق جرانين بتنظيم مؤتمرات مستقلة في أجزاء أخرى من العالم؟
سيرجي: تنظيم المؤتمرات رائع حقًا ، تقابل الكثير من الأشخاص المثيرين للاهتمام ، ولكن هذه ليست سوى قمة جبل الجليد. وإلى هناك - الكثير من العمل ، كل هذا التحضير للقاعة ، طعام للمشاركين ، ناهيك عن البحث عن المتحدثين. C ++ ما زالت روسيا ليست المؤتمر الأكثر شهرة في العالم ، وعلى المتحدثين أن يوضحوا أننا مؤتمر جديد ، وأن هناك أشياء مثيرة للاهتمام تحدث هنا. أنت بحاجة إلى إقناع المتحدث ، خاصة المتحدثين النجوم المشهورين الذين لا يهتمون بشكل خاص بالسفر إلى روسيا لمجرد رؤية بلد جديد. العمل التنظيمي شاق ، خاصة إذا كنت تعمل في الوظيفة الرئيسية. لكن كل شيء يؤتي ثماره من خلال التواصل مع هؤلاء الناس رائعة. ومع ذلك ، فقد وصلت الآن إلى نقطة أنني سأحضر مؤتمر شخص آخر بدلاً من أن أحضر مؤتمري.
إيفان: هذا يعني أنك تقترح حضور مؤتمرات ، بدلاً من حضورها.
سيرجي: نعم ، إذا كان يمكنك تجنب تنظيم مؤتمر ، فيجب أن تغتنم الفرصة. عند التنظيم ، سوف يقع عليك عبء كبير ، هذا عمل آخر مدته 8 ساعات. أنا شخصياً أبدأ العمل لمدة 8 ساعات إضافية في اليوم قبل حوالي 3 أشهر من المؤتمر. إنه أمر ممتع أن أفعله ... ولكني آمل أن تكون عائلتي ممتعة. شكرا لسؤالك!
والآن ، عد إلى الموضوع. تحدثنا عن البرمجة الوظيفية ، وأقنعتني تقريبًا ، بمعنى أن تقاريرك أقنعتني. هناك شك في أن النهج الوظيفي في C ++ سيساعدني في تعدد العمليات عندما أحتاج إلى مزامنة أشياء مختلفة. هل ستساعد حقا؟
إيفان: بالطبع.
ألكساندر: على الرغم من حقيقة أن لدي خبرة محدودة في مجال تعدد العمليات الوظيفية على وجه التحديد في C ++ ، يجب أن أقول أنه عندما يكون لديك عالم من الوظائف الخالصة ، فمن الأسهل بكثير التحدث عنها في بيئة متعددة مؤشرات الترابط. إذا كتبت منطقًا ، على سبيل المثال ، منافسًا ، فلا داعي للتفكير في مزامنة كل هذه الأشياء ، والمزاح ، والأقسام الحساسة ، وأي شيء. يختفي كل هذا فقط ، لأنك تفكر في الكود كرمز تسلسلي منتظم ، ويتم إخفاء كل تعدد العمليات والمزامنة في مكان ما بداخله. هناك الكثير من الطرق للبرمجة متعددة مؤشرات الترابط ، وللوظائف. لست متأكدًا من أن هذا يحدث في جميع الطرق تمامًا ، ولكن على سبيل المثال ، تعتبر ذاكرة معاملات البرامج طريقة رائعة لتقليل التعقيد في التطبيقات التنافسية. لسوء الحظ ، إنها مسألة اختيار الحلول الوسط الصحيحة.
إيفان: عندما يقوم المترجم بكل العمل نيابة عنك ، عليك أن تدفع ثمنه بكفاءة.
ألكساندر: حسنًا ، هناك مشاكل مختلفة. أولاً ، تحتاج إلى فهم كل هذه الأشياء مثل STM ، ثم نقل هذه المعرفة السرية إلى زملائك. ثم توجد أخطاء في تطبيق معين وأماكن يمكن أن تعمل بشكل أفضل عند استخدام التحكم اليدوي في سلسلة العمليات. ولكن يمكنك الكتابة بشكل أسرع وأسهل من التحكم اليدوي. سيكون التنفيذ أبطأ ، لكن الكود سيكون مع وجود عدد أقل من الأخطاء. بالمناسبة ، إيفان ، ما رأيك حول مدى تغطية هذه القضية جيدًا في المؤتمرات؟
إيفان: هذا الموضوع مزدهر. في السنوات الأخيرة ، جميع المؤتمرات الكبرى - CPPConf ، C ++ روسيا ، الاجتماع C ++ ، إلخ. - تلقى تقارير إما مباشرة على FP ، أو على هياكل البيانات الجبرية ، أو شيء من هذا القبيل. في بعض الأحيان لا يشك المتحدثون في أنهم يتحدثون في تقريرهم عن مفهوم ما من FP. في C ++ ، تأتي الأشياء من أماكن مختلفة ... عادةً لا يكتب الناس بلغة واحدة فقط. تخيل إيفان إيفانوف العمل على مشروع كتب في Erlang و C ++. بعد ذلك تصل تاتيانا بيتروفنا ، وهي تعمل بالفعل مع هاسكل بوظائف خالصة وكل ذلك ، يأخذون آلياتهم المفضلة وينقلونها إلى C ++ ، ونتيجة لذلك ، يجلب عدد كبير من الناس من مجتمعات مختلفة أشياء أكثر وأكثر إلى C ++. كل هذا يحدث أمام أعيننا. على الأقل ، يحدث هذا في مجتمع مطوري C ++ ، لكن بالنسبة لشركات C ++ ، لست متأكدًا. ومع ذلك ، فإن العديد من الأشخاص في مجتمع C ++ يعملون الآن على مفاهيم وظيفية.
ألكساندر: فهمت بشكل صحيح أن العديد من مطوري C ++ يدرسون هاسكل فقط لفهم ما يحدث مع C ++؟
إيفان: لست متأكدًا من أنهم يعلمون هاسكل لهذا السبب. أعتقد أن مطوري C ++ هم أنانيون للغاية. لقد تعلموا لغة C ++ جيدًا لأنها معقدة. وإذا كنت تريد أن تتعلم شيئًا جديدًا حقًا ، فمن الواضح أن طريقك لا يكمن في أي جافا ، تم إنشاؤه خصيصًا ليكون بسيطًا. تحتاج إلى البحث في مجال اللغات غير العادية والغريبة ، والأكثر غرابة ، وستكون Haskell من بين أكثر الإجابات شعبية. شخص يرى ذلك ، يفهم: أوه ، هذا شيء أكثر تعقيدًا من C ++ ، تحتاج إلى تعلمه. عندما درست هاسكل ، كان الأمر نفسه معي ، ولدي أصدقاء تابعوا نفس خط الاستدلال.
ألكساندر: عندما كان إريك نيبلر معنا في سيبيريا وأظهر مكتبته للنطاقات ، سئل كثيرًا ما هو مصدر الإلهام. أجاب أنه كان هاسكل. ربما لا ينبغي أن تؤخذ جميع الميزات في صف واحد منه ، ولكن هناك حاجة واضحة لبعض في المجتمع.
إيفان: إنه تطور قليلاً. المواد الوراثية. ويمكن أيضًا تحسين Haskell من خلال أخذ شيء من C ++. معظم اللغات تشهد مثل هذا التطور. حاول Java تكييف LINQ من C # إلى نفسه ، واستخلص المبدعون LINQ من C # الإلهام من Haskell ، إلخ. اتضح مثل هذه الشبكة المتشابكة الجميلة من التأثير المتبادل بين اللغات المختلفة.
ألكساندر: ومع ذلك ، هل ما زالت لغة C ++ لغة منخفضة المستوى؟
إيفان: معظم الناس يعتقدون ذلك.
سيرجي: أي نوع من "المستوى المنخفض" تتحدث؟
إيفان: مترجم إلى رمز منخفض المستوى. لكنه يعمل مع التجريدات رفيعة المستوى. بيت القصيد والغرض هو أن مثل هذه التجريدات لا تؤدي إلى حمل غير ضروري من حيث الأداء. يجب على C ++ إنشاء رمز من التجريدات الخاصة به والتي لن تكون أسوأ من الكتابة بخط اليد. على الأقل من الناحية النظرية.
ألكساندر: ماذا يحدث إذا كسر شخص ما هذه القاعدة؟ على سبيل المثال ، النطاقات.
إيفان: أداء تجميع يعاني - نعم. جميع الميزات الجديدة ، وخاصة الميزات المتوفرة في المكتبات ، تزيد من وقت الترجمة. ولكن ليس هناك سبب لضرورة أن تكون النطاقات بطيئة. إذا تباطأت النطاقات ، فإن الشيء الوحيد الذي يمكنك إلقاء اللوم عليه هنا هو المترجمون الذين لم يتم تحسينهم لهذه الحالة بالذات.
سيرجي: النطاقات نفسها لا تعمل على الفرملة ، ولكن النطاقات في وضع التصحيح - هذا هو جوهر المناقشة بأكملها. في وضع الإصدار ، فإنها تعمل بشكل جيد.
إيفان: هذا طبيعي.
سيرجي: ليس الجميع يتفق مع هذا :-)
إيفان: نعم ، أنا أعرف في الممارسة العملية. في إحدى الشركات ، في مكتبتها الأكثر استخدامًا ... لن أقول أي نوع من الشركة والمكتبة ... توجد خوارزميات أبطأ بشكل كبير في وضع التصحيح. ومن يشكو الآن من أن النطاقات تفعل الشيء نفسه؟
سيرجي: في المقالة التي نناقشها ، لم تكن النقطة في حد ذاتها ، بل كانت مجرد مثال للمؤلف الذي كان غاضبًا من أن هذا الموقف أصبح اتجاهًا ، وانخفاض الإنتاجية في وضع التصحيح. في موضوعه ، محركات اللعبة ، هذا ببساطة غير مقبول.
ألكساندر: هؤلاء الناس لا يحبون STL على الإطلاق ، لأنه يعمل بشكل أبطأ مما يحتاجون إليه. تعمل النطاقات على توسيع المكتبة في نفس الاتجاه ، ويبدو أنها ميزة أخرى عديمة الفائدة لا يمكنهم استخدامها.
سيرجي: كارهي ستعمل الكراهية.
إيفان: بالضبط. على سبيل المثال ، يستخدم الجميع الفرز. فقط تخيل أنه لا يوجد المزيد من الفرز في المكتبة القياسية. كيف يمكنك تنفيذها؟
سيرجي: عادةً ما أطرح سؤالاً كهذا في مقابلة :-) هذا سؤال شائع جدًا.
إيفان: نعم ، السؤال المتكرر هو كيفية تطبيق الفرز. ثم تتحدث عن بعض الإصدارات الأساسية من النوع السريع ، والتي لا يتم استخدامها فعليًا على الإطلاق في أي مكان في العالم ، لأنها قد تكون بطيئة جدًا في بعض الحالات. لا تسمح المكتبة القياسية باستخدامها ، لأنها تتطلب سجل N مضمونًا ، ولا يمكن الفرز السريع. بالنسبة للجزء الأكبر ، يمكن أن يكون ، لكن المعيار في هذا المكان صارم للغاية ، ولا يعني N log المتراكمة ، يجب أن يكون N log N خالصًا ، وكيف ستنفذ مثل هذه الخوارزمية؟ تحتاج إلى البحث ، والعثور على العديد من التحسينات المختلفة للفرز السريع ، ودمجها في خوارزمية واحدة ، تتكون من ثلاثة خوارزميات مختلفة على الأقل ، كما هو الحال في libstdc ++. هذا هو معنى المكتبات القياسية - لا تحتاج إلى معرفة كل هذه الأشياء من أجل البرمجة. لا حاجة لمعرفة كيفية تنفيذ كل شيء بالطريقة الأكثر كفاءة ، فقد اهتم شخص آخر بهذا بالفعل من أجلك. لذلك ، لا أحب هذا النهج عندما يقول الناس: "المحكمة الخاصة بلبنان معقدة للغاية ، ولا نستخدمها ونكتب كل شيء من نقطة الصفر يدويًا."
سيرجي: نحن نقترب من نهاية المقابلة ، لذا السؤال الأخير: كيف تحب في روسيا؟
ألكساندر: أصبح أكثر برودة.
سيرجي: حتى بالنسبة لك؟ أنت محلي!
إيفان: ولكن بالنسبة لي هو أكثر دفئا بكثير مما كان متوقعا.
سيرجي: الآن هو -16 ، وأخبرناك أنها ستكون -40.
إيفان: نعم ، لقد وعدت! أنا أعدت خصيصا ناقص الأربعين. ثم أنظر إلى ميزان الحرارة ، وهناك كل شيء أكثر دفئًا ودفئًا.
سيرجي: حسنًا ، الآن سنلتقي فقط في C ++ Russia 2019 ، سيكون في موسكو ، وستكون هناك درجة حرارة زائد. شكرا للمقابلة ونراكم قريبا!
دقيقة من الإعلانات. في الفترة من 19 إلى 20 أبريل ، سيعقد مؤتمر C ++ في روسيا ، حيث سيقدم إيفان عرضًا تقديميًا بعنوان "تصميم C ++ - Move- فقط" ، وسيتحدث ألكساندر عن موزعين أحاديين. بالإضافة إلى ذلك ، سوف يعقد إيفان واحدة من ثلاث دورات تدريبية كبيرة - "البرمجة الوظيفية التطبيقية في C ++" . يبقى شهر قبل المؤتمر ويستمر تحسين البرنامج. على الموقع الرسمي ، يمكنك معرفة التقارير التي دخلت بالفعل البرنامج وشراء التذاكر . يرجى ملاحظة أن هناك أنواع مختلفة من التذاكر ، ويمكن أن يؤدي اختيار البطاقة المناسبة إلى توفير الكثير.