C++ Русия: ΠΊΠ°ΠΊ бСшС

Ако Π² Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ Π½Π° пиСсата ΠΊΠ°Π·Π²Π°Ρ‚Π΅, Ρ‡Π΅ Π½Π° стСната висява ΠΊΠΎΠ΄ Π½Π° C++, Ρ‚ΠΎ Π² края Ρ‚ΠΎΠΉ Π½Π΅ΠΏΡ€Π΅ΠΌΠ΅Π½Π½ΠΎ трябва Π΄Π° Π²ΠΈ стрСля Π² ΠΊΡ€Π°ΠΊΠ°.

БярнС Бтроуструп

ΠžΡ‚ 31 ΠΎΠΊΡ‚ΠΎΠΌΠ²Ρ€ΠΈ Π΄ΠΎ 1 Π½ΠΎΠ΅ΠΌΠ²Ρ€ΠΈ Π² Π‘Π°Π½ΠΊΡ‚ ΠŸΠ΅Ρ‚Π΅Ρ€Π±ΡƒΡ€Π³ сС ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅ конфСрСнцията C++ Russia Piter – Π΅Π΄Π½ΠΎ ΠΎΡ‚ ΠΌΠ°Ρ‰Π°Π±Π½ΠΈΡ‚Π΅ ΡΡŠΠ±ΠΈΡ‚ΠΈΡ ΠΏΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Π² Русия, ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π°Π½ΠΎ ΠΎΡ‚ JUG Ru Group. Π‘Ρ€Π΅Π΄ ΠΏΠΎΠΊΠ°Π½Π΅Π½ΠΈΡ‚Π΅ Π»Π΅ΠΊΡ‚ΠΎΡ€ΠΈ са Ρ‡Π»Π΅Π½ΠΎΠ²Π΅ Π½Π° ΠΊΠΎΠΌΠΈΡ‚Π΅Ρ‚Π° ΠΏΠΎ стандартизация Π½Π° C++, Π΄ΠΎΠΊΠ»Π°Π΄Ρ‡ΠΈΡ†ΠΈ ΠΎΡ‚ CppCon, Π°Π²Ρ‚ΠΎΡ€ΠΈ Π½Π° ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΡ‚ издатСлство O’Reilly, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Ρ‚Π΅Π»ΠΈ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ ΠΊΠ°Ρ‚ΠΎ LLVM, libc++ ΠΈ Boost. ΠšΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΡΡ‚Π° Π΅ насочСна към ΠΎΠΏΠΈΡ‚Π½ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ Π½Π° C++, ΠΊΠΎΠΈΡ‚ΠΎ искат Π΄Π° Π·Π°Π΄ΡŠΠ»Π±ΠΎΡ‡Π°Ρ‚ СкспСртизата си ΠΈ Π΄Π° обмСнят ΠΎΠΏΠΈΡ‚ Π² ΠΆΠΈΠ²Π° комуникация. Π‘Ρ‚ΡƒΠ΄Π΅Π½Ρ‚ΠΈΡ‚Π΅, аспирантитС ΠΈ ΠΏΡ€Π΅ΠΏΠΎΠ΄Π°Π²Π°Ρ‚Π΅Π»ΠΈΡ‚Π΅ Π² унивСрситСтитС ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ приятни ΠΎΡ‚ΡΡ‚ΡŠΠΏΠΊΠΈ.

ΠœΠΎΡΠΊΠΎΠ²ΡΠΊΠΎΡ‚ΠΎ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ Π½Π° конфСрСнцията ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС посСщавано ΠΎΡ‰Π΅ ΠΏΡ€Π΅Π· Π°ΠΏΡ€ΠΈΠ» слСдващата Π³ΠΎΠ΄ΠΈΠ½Π°, Π° ΠΌΠ΅ΠΆΠ΄ΡƒΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π½Π°ΡˆΠΈΡ‚Π΅ студСнти Ρ‰Π΅ Ρ€Π°Π·ΠΊΠ°ΠΆΠ°Ρ‚ ΠΊΠ°ΠΊΠ²ΠΎ интСрСсно ΡƒΠ·Π½Π°Π»ΠΈ Π½Π° ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π»ΠΎΡ‚ΠΎ ΡΡŠΠ±ΠΈΡ‚ΠΈΠ΅.Β 

C++ Русия: ΠΊΠ°ΠΊ бСшС

Π‘Π½ΠΈΠΌΠΊΠ° ΠΎΡ‚ Π°Π»Π±ΡƒΠΌΠ° Π½Π° конфСрСнцията

Π—Π° нас

По Ρ‚ΠΎΠ·ΠΈ пост Ρ€Π°Π±ΠΎΡ‚ΠΈΡ…Π° Π΄Π²Π΅ студСнтки ΠΎΡ‚ НИУ Π’Π¨Π­ – Π‘Π°Π½ΠΊΡ‚ ΠŸΠ΅Ρ‚Π΅Ρ€Π±ΡƒΡ€Π³:

  • Π›ΠΈΠ·Π° ВасилСнко – студСнтка ΠΎΡ‚ 4-Ρ‚ΠΈ курс Π±Π°ΠΊΠ°Π»Π°Π²Ρ€ΠΈΠ°Ρ‚, ΠΈΠ·ΡƒΡ‡Π°Π²Π°Ρ‰Π° Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ β€žΠ•Π·ΠΈΡ†ΠΈ Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅β€œ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π° β€žΠŸΡ€ΠΈΠ»ΠΎΠΆΠ½Π° ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ° ΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ°β€œ. Π—Π°ΠΏΠΎΠ·Π½Π°Π²Π°ΠΉΠΊΠΈ сС с Π΅Π·ΠΈΠΊΠ° C++ ΠΎΡ‰Π΅ Π½Π° ΠΏΡŠΡ€Π²Π°Ρ‚Π° Π³ΠΎΠ΄ΠΈΠ½Π° Π² унивСрситСта, ΠΏΠΎ-късно ΠΏΡ€ΠΈΠ΄ΠΎΠ±ΠΈΠ»Π° ΠΎΠΏΠΈΡ‚ с Π½Π΅Π³ΠΎ Π½Π° стаТовС Π² индустрията. Π£Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΏΠΎ Π΅Π·ΠΈΡ†ΠΈ Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ ΠΊΠ°Ρ‚ΠΎ цяло ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π½ΠΎΡ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Π² частност повлияло Π½Π° ΠΈΠ·Π±ΠΎΡ€Π° Π½Π° Ρ‚Π΅ΠΌΠΈ Π·Π° Π΄ΠΎΠΊΠ»Π°Π΄ΠΈΡ‚Π΅ Π½Π° конфСрСнцията.
  • Даня Π‘ΠΌΠΈΡ€Π½ΠΎΠ² – студСнт ΠΎΡ‚ 1-Π²ΠΈ курс магистратура β€žΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ ΠΈ Π°Π½Π°Π»ΠΈΠ· Π½Π° Π΄Π°Π½Π½ΠΈβ€œ. ΠžΡ‰Π΅ Π² ΡƒΡ‡ΠΈΠ»ΠΈΡ‰Π΅ Ρ€Π΅ΡˆΠ°Π²Π°Π» Π·Π°Π΄Π°Ρ‡ΠΈ ΠΎΡ‚ ΠΎΠ»ΠΈΠΌΠΏΠΈΠ°Π΄ΠΈ Π½Π° C++, Π° слСд Ρ‚ΠΎΠ²Π°, Ρ‚Π°ΠΊΠ° сС случи, Ρ‡Π΅ Π΅Π·ΠΈΠΊΡŠΡ‚ постоянно сС появявал Π² ΡƒΡ‡Π΅Π±Π½Π°Ρ‚Π° ΠΌΡƒ дСйност ΠΈ Π² ΠΊΡ€Π°ΠΉΠ½Π° смСтка станал основният Ρ€Π°Π±ΠΎΡ‚Π΅Π½ инструмСнт. Π’ конфСрСнцията Ρ€Π΅ΡˆΠΈΠ» Π΄Π° участва, Π·Π° Π΄Π° ΠΏΠΎΠ΄ΠΎΠ±Ρ€ΠΈ знанията си ΠΈ Π΄Π° Π½Π°ΡƒΡ‡ΠΈ Π·Π° Π½ΠΎΠ²ΠΈΡ‚Π΅ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ.

Π’ разпространСниСто Ρ€ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎΡ‚ΠΎ Π½Π° Ρ„Π°ΠΊΡƒΠ»Ρ‚Π΅Ρ‚Π° чСсто сподСля информация Π·Π° ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚Π΅Π»Π½ΠΈ ΡΡŠΠ±ΠΈΡ‚ΠΈΡ, ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ с Π½Π°ΡˆΠ°Ρ‚Π° спСциалност. ΠŸΡ€Π΅Π· сСптСмври видяхмС информация Π·Π° C++ Russia ΠΈ Ρ€Π΅ΡˆΠΈΡ…ΠΌΠ΅ Π΄Π° сС рСгистрирамС ΠΊΠ°Ρ‚ΠΎ ΡΠ»ΡƒΡˆΠ°Ρ‚Π΅Π»ΠΈ. Π’ΠΎΠ²Π° Π΅ Π½Π°ΡˆΠΈΡΡ‚ ΠΏΡŠΡ€Π²ΠΈ ΠΎΠΏΠΈΡ‚ Π² участия Π² ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ ΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈ.

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Π½Π° конфСрСнцията

  • Π”ΠΎΠΊΠ»Π°Π΄ΠΈ

Π’ Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ Π½Π° Π΄Π²Π° Π΄Π½ΠΈ СкспСртитС ΠΏΡ€ΠΎΡ‡Π΅Ρ‚ΠΎΡ…Π° 30 Π΄ΠΎΠΊΠ»Π°Π΄Π°, обсъТдайки ΠΌΠ½ΠΎΠ³ΠΎ Π°ΠΊΡ‚ΡƒΠ°Π»Π½ΠΈ Ρ‚Π΅ΠΌΠΈ: остроумнитС прилоТСния Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈΡ‚Π΅ Π½Π° Π΅Π·ΠΈΠΊΠ° Π·Π° Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅ Π½Π° практичСски Π·Π°Π΄Π°Ρ‡ΠΈ, прСдстоящитС Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° Π΅Π·ΠΈΠΊΠ° във Π²Ρ€ΡŠΠ·ΠΊΠ° с новия стандарт, компромиситС ΠΏΡ€ΠΈ Π΄ΠΈΠ·Π°ΠΉΠ½Π° Π½Π° C++ ΠΈ ΠΌΠ΅Ρ€ΠΊΠΈΡ‚Π΅ Π·Π° бСзопасност ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π° с Ρ‚Π΅Ρ…Π½ΠΈΡ‚Π΅ послСдствия, ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π·Π° интСрСсна Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ някои задкулисни Π΄Π΅Ρ‚Π°ΠΉΠ»ΠΈ Π½Π° инфраструктурата Π½Π° Π΅Π·ΠΈΠΊΠ°. ΠŸΠ°Ρ€Π°Π»Π΅Π»Π½ΠΎ сС ΠΏΡ€ΠΎΠ²Π΅ΠΆΠ΄Π°Ρ…Π° ΠΏΠΎ 3 изказвания, ΠΊΠ°Ρ‚ΠΎ ΠΏΠΎ-чСсто Π΄Π²Π΅ Π½Π° руски ΠΈ Π΅Π΄Π½ΠΎ Π½Π° английски Π΅Π·ΠΈΠΊ.

  • Π—ΠΎΠ½ΠΈ Π·Π° обсъТданС

Π‘Π»Π΅Π΄ прСзСнтацията всички Π½Π΅Π·Π°Π΄Π°Π½ΠΈ Π²ΡŠΠΏΡ€ΠΎΡΠΈ ΠΈ Π½Π΅Π·Π°Π²ΡŠΡ€ΡˆΠ΅Π½ΠΈ дискусии ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π²Π°Ρ…Π° Π² спСциално обособСни Π·ΠΎΠ½ΠΈ Π·Π° Ρ€Π°Π·Π³ΠΎΠ²ΠΎΡ€ΠΈ с Π»Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡ‚Π΅, ΠΎΠ±ΠΎΡ€ΡƒΠ΄Π²Π°Π½ΠΈ с ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Π½ΠΈ дъски. ΠžΡ‚Π»ΠΈΡ‡Π΅Π½ Π½Π°Ρ‡ΠΈΠ½ Π΄Π° ΠΏΡ€Π΅ΠΊΠ°Ρ€Π°Ρ‚Π΅ ΠΏΠΎΡ‡ΠΈΠ²ΠΊΠ°Ρ‚Π° ΠΌΠ΅ΠΆΠ΄Ρƒ изказванията с приятСн Ρ€Π°Π·Π³ΠΎΠ²ΠΎΡ€.

  • Lightning Talks ΠΈ Π½Π΅Ρ„ΠΎΡ€ΠΌΠ°Π»Π½ΠΈ дискусии

Ако ΠΆΠ΅Π»Π°Π΅Ρ‚Π΅ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ ΠΊΡ€Π°Ρ‚ΠΊΠ° прСзСнтация, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° сС Π·Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ Π½Π° ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Π½Π°Ρ‚Π° дъска Π·Π° вСчСрния Lightning Talk ΠΈ Ρ‰Π΅ ΠΈΠΌΠ°Ρ‚Π΅ ΠΏΠ΅Ρ‚ ΠΌΠΈΠ½ΡƒΡ‚ΠΈ Π·Π° Ρ€Π°Π·ΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° всичко, ΡΠ²ΡŠΡ€Π·Π°Π½ΠΎ с Ρ‚Π΅ΠΌΠ°Ρ‚Π° Π½Π° конфСрСнцията. НапримСр, Π±ΡŠΡ€Π·ΠΎ въвСдСниС Π² sanitizers Π·Π° C++ (Π·Π° някои ΠΎΠΊΠ°Π·Π° новост) ΠΈΠ»ΠΈ история Π·Π° бъг Π² Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° синусоида, ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Ρ‡ΡƒΡ‚, Π½ΠΎ Π½Π΅ ΠΈ видян.

Другият Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π΅ ΠΏΠ°Π½Π΅Π»Π½Π° дискусия β€žΠ‘ ΠΊΠΎΠΌΠΈΡ‚Π΅Ρ‚Π° ΠΏΠΎ Π΄ΡƒΡˆΠΈΡ‚Π΅β€œ. На сцСната са някои Ρ‡Π»Π΅Π½ΠΎΠ²Π΅ Π½Π° ΠΊΠΎΠΌΠΈΡ‚Π΅Ρ‚Π° ΠΏΠΎ стандартизация, Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΡ€Π° β€” ΠΊΠ°ΠΌΠΈΠ½Π° (ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»Π½ΠΎ β€” Π·Π° създаванС Π½Π° ΡƒΡŽΡ‚Π½Π° атмосфСра, Π½ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°Ρ‚Π° β€žΠ·Π°Ρ‰ΠΎΡ‚ΠΎ Π’Π‘Π˜Π§ΠšΠž Π• Π’ ΠžΠ“ΠͺΠβ€œ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΏΠΎ-Π·Π°Π±Π°Π²Π½Π°), Π²ΡŠΠΏΡ€ΠΎΡΠΈΡ‚Π΅ са Π·Π° стандарта ΠΈ ΠΎΠ±Ρ‰ΠΎΡ‚ΠΎ Π²ΠΈΠΆΠ΄Π°Π½Π΅ Π·Π° C++, Π±Π΅Π· Π±ΡƒΡ€Π½ΠΈ тСхничСски обсъТдания ΠΈ Ρ…ΠΎΠ»ΠΈΠ²Π°Ρ€ΠΈ. Оказа сС, Ρ‡Π΅ Π² ΠΊΠΎΠΌΠΈΡ‚Π΅Ρ‚Π° ΡΡŠΡ‰ΠΎ ΠΈΠΌΠ° ΠΆΠΈΠ²ΠΈ Ρ…ΠΎΡ€Π°, ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠ³Π°Ρ‚ Π² Π½Π΅Ρ‰ΠΎ Π΄Π° Π½Π΅ са напълно ΡƒΠ²Π΅Ρ€Π΅Π½ΠΈ ΠΈΠ»ΠΈ Π½Π΅Ρ‰ΠΎ Π΄Π° Π½Π΅ знаят.

Π—Π° Π»ΡŽΠ±ΠΈΡ‚Π΅Π»ΠΈΡ‚Π΅ Π½Π° Ρ…ΠΎΠ»ΠΈΠ²Π°Ρ€ΠΈΡ‚Π΅ ΠΏΠΎ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΠΎ остава Ρ‚Ρ€Π΅Ρ‚ΠΎΡ‚ΠΎ ΡΡŠΠ±ΠΈΡ‚ΠΈΠ΅ β€” BOF-сСсия β€žGo срСщу C++β€œ. Π’Π·ΠΈΠΌΠ°ΠΌΠ΅ Π»ΡŽΠ±ΠΈΡ‚Π΅Π» Π½Π° Go, Π»ΡŽΠ±ΠΈΡ‚Π΅Π» Π½Π° C++, ΠΏΡ€Π΅Π΄ΠΈ Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ Π½Π° сСсията Ρ‚Π΅ Π·Π°Π΅Π΄Π½ΠΎ подготвят 100500 слайда ΠΏΠΎ Ρ‚Π΅ΠΌΠ°Ρ‚Π° (ΠΊΠ°Ρ‚ΠΎ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈΡ‚Π΅ с ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈΡ‚Π΅ Π² C++ ΠΈΠ»ΠΈ ΠΎΡ‚ΡΡŠΡΡ‚Π²ΠΈΠ΅Ρ‚ΠΎ Π½Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ‡Π½ΠΈ Ρ‚ΠΈΠΏΠΎΠ²Π΅ Π² Go), Π° слСд Ρ‚ΠΎΠ²Π° ΠΎΠΆΠΈΠ²Π΅Π½ΠΎ дискутират ΠΏΠΎΠΌΠ΅ΠΆΠ΄Ρƒ си ΠΈ с аудиторията, Π° Π·Π°Π»Π°Ρ‚Π° сС ΠΎΠΏΠΈΡ‚Π²Π° Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅ Π΅Π΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π΄Π²Π΅ Π³Π»Π΅Π΄Π½ΠΈ Ρ‚ΠΎΡ‡ΠΊΠΈ. Ако Π·Π°ΠΏΠΎΡ‡Π½Π΅ Ρ…ΠΎΠ»ΠΈΠ²Π°Ρ€ Π±Π΅Π· ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° β€” ΠΌΠΎΠ΄Π΅Ρ€Π°Ρ‚ΠΎΡ€ΡŠΡ‚ намСсва ΠΈ помирява странитС. Вакъв Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ затСгля: слСд няколко часа слСд Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ бяха ΠΏΡ€Π΅ΠΊΠ°Ρ€Π°Π½ΠΈ само ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½ слайд. ΠšΡ€Π°ΡΡ‚ Ρ‚Ρ€ΡΠ±Π²Π°ΡˆΠ΅ Π΄Π° бъдС Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ускорСн.

  • Павилиони Π½Π° ΠΏΠ°Ρ€Ρ‚Π½ΡŒΠΎΡ€ΠΈΡ‚Π΅

Π’ Π·Π°Π»ΠΈΡ‚Π΅ бяха прСдставСни ΠΏΠ°Ρ€Ρ‚Π½ΡŒΠΎΡ€ΠΈΡ‚Π΅ Π½Π° конфСрСнцията β€” Π½Π° ΠΏΠ°Π²ΠΈΠ»ΠΈΠΎΠ½ΠΈΡ‚Π΅ Ρ€Π°Π·ΠΊΠ°Π·Π²Π°Ρ…Π° Π·Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ, ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Ρ…Π° стаТовС ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°, ΠΏΡ€ΠΎΠ²Π΅ΠΆΠ΄Π°Ρ…Π° Π²ΠΈΠΊΡ‚ΠΎΡ€ΠΈΠ½ΠΈ ΠΈ ΠΌΠ°Π»ΠΊΠΈ ΡΡŠΡΡ‚Π΅Π·Π°Π½ΠΈΡ, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ Ρ€Π°Π·Π΄Π°Π²Π°Ρ…Π° приятни Π½Π°Π³Ρ€Π°Π΄ΠΈ. ОсвСн Ρ‚ΠΎΠ²Π° някои ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Π΄ΠΎΡ€ΠΈ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Ρ…Π° Π΄Π° ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Ρ‚ Π½Π°Ρ‡Π°Π»Π΅Π½ Π΅Ρ‚Π°ΠΏ Π½Π° ΠΈΠ½Ρ‚Π΅Ρ€Π²ΡŽΡ‚Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π·Π° Ρ‚Π΅Π·ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ са дошли Π½Π΅ само Π·Π° Π΄Π° ΡΠ»ΡƒΡˆΠ°Ρ‚ Π΄ΠΎΠΊΠ»Π°Π΄ΠΈ.

ВСхничСски подробности Π½Π° Π΄ΠΎΠΊΠ»Π°Π΄ΠΈΡ‚Π΅

Π‘Π»ΡƒΡˆΠ°Ρ…ΠΌΠ΅ Π΄ΠΎΠΊΠ»Π°Π΄ΠΈΡ‚Π΅ ΠΈ Π΄Π²Π°Ρ‚Π° Π΄Π½ΠΈ. Понякога бСшС Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Π΄Π° сС ΠΈΠ·Π±Π΅Ρ€Π΅ Π΅Π΄ΠΈΠ½ Π΄ΠΎΠΊΠ»Π°Π΄ ΠΎΡ‚ ΠΏΠ°Ρ€Π°Π»Π΅Π»Π½ΠΎ ΠΏΡ€ΠΎΡ‚ΠΈΡ‡Π°Ρ‰ΠΈΡ‚Π΅ β€” Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΡ…ΠΌΠ΅ сС Π΄Π° сС Ρ€Π°Π·Π΄Π΅Π»ΠΈΠΌ ΠΈ Π΄Π° обмСнямС ΠΏΡ€ΠΈΠ΄ΠΎΠ±ΠΈΡ‚ΠΈΡ‚Π΅ знания Π² ΠΏΠΎΡ‡ΠΈΠ²ΠΊΠΈΡ‚Π΅. И Π΄ΠΎΡ€ΠΈ Ρ‚Π°ΠΊΠ° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π°, Ρ‡Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Π΅ останало пропуснато. Π’ΡƒΠΊ Π±ΠΈΡ…ΠΌΠ΅ искали Π΄Π° Ρ€Π°Π·ΠΊΠ°ΠΆΠ΅ΠΌ Π·Π° ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° някои ΠΎΡ‚ Π΄ΠΎΠΊΠ»Π°Π΄ΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ Π½ΠΈ сС сториха Π½Π°ΠΉ-интСрсни.

Π˜Π·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π² C++ ΠΏΡ€Π΅Π· ΠΏΡ€ΠΈΠ·ΠΌΠ°Ρ‚Π° Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€Π½ΠΈΡ‚Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ, Π ΠΎΠΌΠ°Π½ РусяСв

C++ Русия: ΠΊΠ°ΠΊ бСшС
Π‘Π»Π°ΠΉΠ΄ ΠΎΡ‚ прСзСнтацията

ΠšΠ°ΠΊΡ‚ΠΎ Π»ΠΈΡ‡ΠΈ ΠΎΡ‚ Π·Π°Π³Π»Π°Π²ΠΈΠ΅Ρ‚ΠΎ, Π ΠΎΠΌΠ°Π½ Ρ€Π°Π·Π³Π»Π΅ΠΆΠ΄Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° с ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π½Π° LLVM. Π”ΠΎΡ€ΠΈ ΠΈ Π·Π° Ρ‚Π΅Π·ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Clang Π² Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° си, Π΄ΠΎΠΊΠ»Π°Π΄ΡŠΡ‚ всС ΠΏΠ°ΠΊ ΠΌΠΎΠΆΠ΅ Π΄Π° прСдостави прСдстава Π·Π° Π½Π°Ρ‡ΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΠΉΡ‚ΠΎ ΠΊΠΎΠ΄ΡŠΡ‚ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»Π½ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π°Π½. Π’ΠΎΠ²Π° Π΅ Ρ‚Π°ΠΊΠ°, Π·Π°Ρ‰ΠΎΡ‚ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€ΠΈ ΠΈ ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡ‚Π΅ стандартни Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ си взаимодСйстват ΠΏΠΎΠΌΠ΅ΠΆΠ΄Ρƒ си ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° ΡΡŠΠ²ΠΏΠ°Π΄Π°Ρ‚.

Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»Π½ΠΎ, Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ°Ρ‚ мноТСство дСйствия: Π΄Π° сС ΠΈΠ·Π²ΠΈΠΊΠ° ΠΊΠΎΠ΄ Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° (Π°ΠΊΠΎ ΠΈΠΌΠ° Ρ‚Π°ΠΊΡŠΠ²) ΠΈΠ»ΠΈ Π΄Π° сС освободят рСсурситС Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΎΡ‚ΠΎ Π½ΠΈΠ²ΠΎ ΠΈ Π΄Π° сС ΠΈΠ·ΠΊΠ°Ρ‡ΠΈ стСка Π½Π°Π³ΠΎΡ€Π΅. Всичко Ρ‚ΠΎΠ²Π° Π²ΠΎΠ΄ΠΈ Π΄ΠΎ Ρ„Π°ΠΊΡ‚Π°, Ρ‡Π΅ Π·Π° ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»Π½ΠΎ ΠΏΡ€Π΅Π΄Π°Π²Π°Ρ‰ΠΈΡ‚Π΅ ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ извиквания, ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€ΡŠΡ‚ добавя Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ инструкции. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»Π½ΠΎ, Π΄ΠΎΡ€ΠΈ ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π² дСйствитСлност Π½Π΅ бъдС ΠΏΡ€Π΅Π΄ΠΈΠ·Π²ΠΈΠΊΠ°Π½ΠΎ, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π° всС ΠΏΠ°ΠΊ Ρ‰Π΅ ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° Π½Π΅Π½ΡƒΠΆΠ½ΠΈ дСйствия. Π—Π° Π΄Π° сС намалят Ρ€Π°Π·Ρ…ΠΎΠ΄ΠΈΡ‚Π΅, Π² LLVM ΠΈΠΌΠ° няколко христики Π·Π° опрСдСлянС Π½Π° ситуации, Π² ΠΊΠΎΠΈΡ‚ΠΎ Π½Π΅ трябва Π΄Π° сС добавя ΠΊΠΎΠ΄ Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΈΠ»ΠΈ ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π½Π°ΠΌΠ°Π»ΠΈ броят Π½Π° "ΠΈΠ·Π»ΠΈΡˆΠ½ΠΈΡ‚Π΅" инструкции.

Π”ΠΎΠΊΠ»Π°Π΄Ρ‡ΠΈΠΊΡŠΡ‚ Ρ€Π°Π·Π³Π»Π΅ΠΆΠ΄Π° ΠΎΠΊΠΎΠ»ΠΎ дСсСт ΠΎΡ‚ тях ΠΈ ΠΏΠΎΠΊΠ°Π·Π²Π° ΠΊΠ°ΠΊ ситуациитС, Π² ΠΊΠΎΠΈΡ‚ΠΎ Ρ‚Π΅ ΠΏΠΎΠΌΠ°Π³Π°Ρ‚ Π΄Π° сС ускори ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π°, Ρ‚Π°ΠΊΠ° ΠΈ Ρ‚Π΅Π·ΠΈ, Π² ΠΊΠΎΠΈΡ‚ΠΎ Ρ‚Π΅Π·ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ Π½Π΅ са ΠΏΡ€ΠΈΠ»ΠΎΠΆΠΈΠΌΠΈ.

По Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½, Π ΠΎΠΌΠ°Π½ РусяСв ΠΏΠΎΠ΄Π²ΠΎΠ΄ΠΈ ΡΠ»ΡƒΡˆΠ°Ρ‚Π΅Π»ΠΈΡ‚Π΅ Π΄ΠΎ ΠΈΠ·Π²ΠΎΠ΄Π°, Ρ‡Π΅ ΠΊΠΎΠ΄ΡŠΡ‚, ΠΊΠΎΠΉΡ‚ΠΎ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° Ρ€Π°Π±ΠΎΡ‚Π° с ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, Π΄Π°Π»Π΅Ρ‡ Π½Π΅ Π²ΠΈΠ½Π°Π³ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° сС изпълнява Π±Π΅Π· Ρ€Π°Π·Ρ…ΠΎΠ΄ΠΈ, ΠΈ Π΄Π°Π²Π° слСднитС ΡΡŠΠ²Π΅Ρ‚ΠΈ:

  • ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π°Π½Π΅ Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ трябва Π΄Π° сС ΠΎΡ‚ΠΊΠ°ΠΆΠ΅Ρ‚Π΅ ΠΎΡ‚ ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΡ‚Π° ΠΊΠ°Ρ‚ΠΎ цяло;
  • Π°ΠΊΠΎ ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΡ‚Π° всС ΠΏΠ°ΠΊ са Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ, Ρ‚ΠΎ навсякъдС, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ Π΅ възмоТно, трябва Π΄Π° сС добавят ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΈ noexcept (ΠΈ const), Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€ΡŠΡ‚ Π΄Π° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π° ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ сС ΠΌΠΎΠΆΠ΅ ΠΏΠΎΠ²Π΅Ρ‡Π΅.

ΠšΠ°Ρ‚ΠΎ цяло, Π΄ΠΎΠΊΠ»Π°Π΄Ρ‡ΠΈΠΊΡŠΡ‚ ΠΏΠΎΡ‚Π²ΡŠΡ€Π΄ΠΈ ΠΌΠ½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ, Ρ‡Π΅ ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΡ‚Π° Π΅ Π½Π°ΠΉ-Π΄ΠΎΠ±Ρ€Π΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π² ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½ΠΎ количСство ΠΈΠ»ΠΈ ΠΈΠ·ΠΎΠ±Ρ‰ΠΎ Π΄Π° сС ΠΎΡ‚ΠΊΠ°ΠΆΠ°Ρ‚.

Π‘Π»Π°ΠΉΠ΄ΠΎΠ²Π΅ ΠΎΡ‚ Π΄ΠΎΠΊΠ»Π°Π΄Π° са Π½Π°Π»ΠΈΡ‡Π½ΠΈ Π½Π° слСдния Π»ΠΈΠ½ΠΊ: [Β«Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ C++ Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€ΠΈΠ·ΠΌΡƒ компиляторных ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΉ LLVMΒ»]

Generators, coroutines and other brain-unrolling sweetness, Adi Shavit

C++ Русия: ΠΊΠ°ΠΊ бСшС
Π‘Π»Π°ΠΉΠ΄ ΠΎΡ‚ прСзСнтацията

Π•Π΄ΠΈΠ½ ΠΎΡ‚ ΠΌΠ½ΠΎΠ³ΠΎΡ‚ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄ΠΈ Π½Π° Ρ‚Π°Π·ΠΈ конфСрСнция, посвСтСни Π½Π° Π½ΠΎΠ²ΠΎΠ²ΡŠΠ²Π΅Π΄Π΅Π½ΠΈΡΡ‚Π° Π² C++20, Π·Π°ΠΏΠΎΠΌΠ½ΠΈ Π½Π΅ само с красочно ΠΎΡ„ΠΎΡ€ΠΌΠ΅Π½Π°Ρ‚Π° прСзСнтация, Π½ΠΎ ΠΈ с ясното ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π° ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ с Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π° Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° ΠΊΠΎΠ»Π΅ΠΊΡ†ΠΈΠΈ (Ρ†ΠΈΠΊΡŠΠ» for, callback-ΠΈ).

Adi Shavit отдСля слСднитС: ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ΠΈΡ‚Π΅ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π²Π°Ρ‚ ΠΏΡ€Π΅Π· цялата колСкция ΠΈ Π² ΡΡŠΡ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π΅ Π΄Π°Π²Π°Ρ‚ Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ някакво Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½ΠΎ ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π½ΠΎ ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅ (ΠΈΠ»ΠΈ Π΄Π°Π²Π°Ρ‚ Π² случай Π½Π° callback-ΠΎΠ²Π΅, Π½ΠΎ с ΠΌΠ½ΠΎΠ³ΠΎ нСприятни странични Π΅Ρ„Π΅ΠΊΡ‚ΠΈ, ΠΊΠ°Ρ‚ΠΎ Ρ‚.Π½Π°Ρ€. Callback Hell). ИзглСТда, Ρ‡Π΅ ΠΈΠΌΠ° ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΈ, Π½ΠΎ ΠΈ с тях всичко Π½Π΅ Π΅ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° Π³Π»Π°Π΄ΠΊΠΎ: няма ΠΎΠ±Ρ‰ΠΈ Ρ‚ΠΎΡ‡ΠΊΠΈ Π·Π° Π²Ρ…ΠΎΠ΄ ΠΈ ΠΈΠ·Ρ…ΠΎΠ΄ (begin β†’ end срСщу rbegin β†’ rend ΠΈ Ρ‚Π°ΠΊΠ° Π½Π°Ρ‚Π°Ρ‚ΡŠΠΊ), Π½Π΅ Π΅ ясно ΠΊΠΎΠ»ΠΊΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‰Π΅ ΠΈΡ‚Π΅Ρ€ΠΈΡ€Π°ΠΌΠ΅? Π—Π°ΠΏΠΎΡ‡Π²Π°ΠΉΠΊΠΈ ΠΎΡ‚ C++20, Ρ‚Π΅Π·ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ сС Ρ€Π΅ΡˆΠ°Π²Π°Ρ‚!

ΠŸΡŠΡ€Π²ΠΈΡΡ‚ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚: ranges. Π‘ ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° ΠΎΠ±Π²ΠΈΠ²ΠΊΠ°Ρ‚Π° Π½Π°Π΄ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ ΠΎΠ±Ρ‰ интСрфСйс Π·Π° Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ ΠΈ края Π½Π° итСрацията, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° композиция. Всичко Ρ‚ΠΎΠ²Π° позволява лСсно ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΏΡŠΠ»Π½ΠΎΡ†Π΅Π½Π½ΠΈ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ΠΈ Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Π΄Π°Π½Π½ΠΈ. Но Π½Π΅ всичко Π΅ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° Π³Π»Π°Π΄ΠΊΠΎ: част ΠΎΡ‚ Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π° Π½Π° изчислСнията сС Π½Π°ΠΌΠΈΡ€Π° Π²ΡŠΡ‚Ρ€Π΅ Π² ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Π°Ρ‚Π° рСализация Π½Π° ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° услоТни ΠΊΠΎΠ΄Π° Π·Π° Π²ΡŠΠ·ΠΏΡ€ΠΈΠ΅ΠΌΠ°Π½Π΅ ΠΈ отстраняванС Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ.

C++ Русия: ΠΊΠ°ΠΊ бСшС
Π‘Π»Π°ΠΉΠ΄ ΠΎΡ‚ прСзСнтацията

Π’ Ρ‚Π°ΠΊΡŠΠ² случай Π² C++20 са Π΄ΠΎΠ±Π°Π²Π΅Π½ΠΈ ΠΊΠΎΡ€ΡƒΡ‚ΠΈΠ½ΠΈ (Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‡ΠΈΠ΅Ρ‚ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π΅ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Π½Π° Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΈΡ‚Π΅ Π² Python): ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½ΠΎ, ΠΊΠ°Ρ‚ΠΎ сС Π²ΡŠΡ€Π½Π΅ Ρ‚Π΅ΠΊΡƒΡ‰Π° стойност с Π·Π°ΠΏΠ°Π·Π²Π°Π½Π΅ Π½Π° ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π½ΠΎΡ‚ΠΎ ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅. Π’Π°ΠΊΠ° постигамС Π½Π΅ само Ρ€Π°Π±ΠΎΡ‚Π° с Π΄Π°Π½Π½ΠΈ ΠΊΠ°ΠΊΡ‚ΠΎ сС появяват, Π½ΠΎ ΠΈ инкапсулирамС цялата Π»ΠΎΠ³ΠΈΠΊΠ° Π² ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Π°Ρ‚Π° ΠΊΠΎΡ€ΡƒΡ‚ΠΈΠ½Π°.

Но ΠΈΠΌΠ° ΠΈ Ρ‚ΡŠΠ³Π°: Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Ρ‚Π΅ са само частично ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Π½ΠΈ ΠΎΡ‚ Π½Π°Π»ΠΈΡ‡Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€ΠΈ ΠΈ са Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ Π½Π΅ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° Π΄ΠΎΠ±Ρ€Π΅, ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ Π±ΠΈΡ…ΠΌΠ΅ искали: Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, всС ΠΎΡ‰Π΅ Π½Π΅ сС ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π²Π° Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Ρ€Π΅Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈ ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π²ΠΈ ΠΎΠ±Π΅ΠΊΡ‚ΠΈ Π² ΠΊΠΎΡ€ΡƒΡ‚ΠΈΠ½ΠΈ. Плюс, ΠΈΠΌΠ° някои ограничСния относно Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊΠ²ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΊΠΎΡ€ΡƒΡ‚ΠΈΠ½Π°, ΠΈ constexpr Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, конструктори/дСструктори, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ main Π½Π΅ Π²Π»ΠΈΠ·Π°Ρ‚ Π² Ρ‚ΠΎΠ·ΠΈ списък.

Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»Π½ΠΎ, ΠΊΠΎΡ€ΡƒΡ‚ΠΈΠ½ΠΈΡ‚Π΅ Ρ€Π΅ΡˆΠ°Π²Π°Ρ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½Π° част ΠΎΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈΡ‚Π΅ с простотата Π½Π° Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π° Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Π΄Π°Π½Π½ΠΈ, Π½ΠΎ Ρ‚Π΅Ρ…Π½ΠΈΡ‚Π΅ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ изискват Π΄ΠΎΡ€Π°Π±ΠΎΡ‚ΠΊΠ°.

ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈ:

C++ Ρ‚Ρ€ΠΈΠΊΠΎΠ²Π΅ ΠΎΡ‚ ЯндСкс.Вакси, Антон ΠŸΠΎΠ»ΡƒΡ…ΠΈΠ½

Π’ профСсионалната си дСйност понякога ΠΌΠΈ сС Π½Π°Π»Π°Π³Π° Π΄Π° Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°ΠΌ чисто спомагатСлни Π½Π΅Ρ‰Π°: ΠΎΠ±Π²ΠΈΠ²ΠΊΠ° ΠΌΠ΅ΠΆΠ΄Ρƒ Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½ΠΈΡ интСрфСйс ΠΈ API Π½Π° някаква Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, Π»ΠΎΠ³Π²Π°Π½Π΅ ΠΈΠ»ΠΈ парсинг. ΠŸΡ€ΠΈ Ρ‚ΠΎΠ²Π° ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ няма Π½ΡƒΠΆΠ΄Π° ΠΎΡ‚ Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½Π° оптимизация. Но ΠΊΠ°ΠΊΠ²ΠΎ, Π°ΠΊΠΎ Ρ‚Π΅Π·ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π² някои ΠΎΡ‚ Π½Π°ΠΉ-популярнитС услуги Π² Π ΡƒΠ½Π΅Ρ‚Π°? Π’ Ρ‚Π°ΠΊΠ°Π²Π° ситуация Ρ‰Π΅ трябва Π΄Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π°ΠΌ Ρ‚Π΅Ρ€Π°Π±Π°ΠΉΡ‚ΠΈ Π½Π° час само ΠΎΡ‚ Π»ΠΎΠ³ΠΎΠ²Π΅Ρ‚Π΅! Π’ΠΎΠ³Π°Π²Π° всяка милисСкунда Π΅ ΠΎΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈ Π·Π°Ρ‚ΠΎΠ²Π° сС Π½Π°Π»Π°Π³Π° Π΄Π° ΠΏΡ€ΠΈΠ±Π΅Π³Π½Π° Π΄ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Ρ‚Ρ€ΠΈΠΊΠΎΠ²Π΅ β€” Π·Π° тях Ρ€Π°Π·ΠΊΠ°Π·Π° Антон ΠŸΠΎΠ»ΡƒΡ…ΠΈΠ½.

МоТС Π±ΠΈ Π½Π°ΠΉ-интСрСсният ΠΏΡ€ΠΈΠΌΠ΅Ρ€ бСшС рСализацията Π½Π° шаблона 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 Ρ„Π°ΠΉΠ»Π°: Π½ΡƒΠΆΠ΅Π½ Π΅ forward-declaration Π½Π° обвивния 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 data_; 
};

ЕдинствСният ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π΅, Ρ‡Π΅ Π·Π° всяка ΠΎΠ±Π²ΠΈΠ²ΠΊΠ° трябва Π΄Π° Π·Π°Π΄Π°Π΄Π΅ΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΈ подравняванС β€” Ρ‰Π΅ Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ нашия pimpl шаблонСн с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ , Ρ‰Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΈ стойности ΠΈ Ρ‰Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π² дСструктора, Π·Π° Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ Π΄Π°Π»ΠΈ всичко Π΅ Π½Π° място:Β 

~FastPimpl() noexcept { 
    validate(); 
    Ptr().->~T(); 
}

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

Въй ΠΊΠ°Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° дСструктора T Π²Π΅Ρ‡Π΅ Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½, Ρ‚ΠΎΠ·ΠΈ ΠΊΠΎΠ΄ Ρ‰Π΅ сС Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π° ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ ΠΈ Π½Π° Π΅Ρ‚Π°ΠΏΠ° Π½Π° компилация Ρ‰Π΅ Π΄Π°Π²Π° Π½ΡƒΠΆΠ½ΠΈΡ‚Π΅ стойности Π½Π° Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΈ подравняванСто ΠΊΠ°Ρ‚ΠΎ Π³Ρ€Π΅ΡˆΠΊΠΈ. По Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½, с Ρ†Π΅Π½Π°Ρ‚Π° Π½Π° Π΅Π΄ΠΈΠ½ Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π΅Π½ ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ†ΠΈΠΎΠ½Π΅Π½ Ρ†ΠΈΠΊΡŠΠ», избягвамС Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΎΡ‚ΠΎ Π°Π»ΠΎΡ†ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΎΠ±Π²ΠΈΠ²Π½ΠΈ класовС, скривамС API Π² .cpp Ρ„Π°ΠΉΠ» с рСализация, ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ конструкция, която Π΅ ΠΏΠΎ-подходяща Π·Π° ΠΊΠ΅ΡˆΠΈΡ€Π°Π½Π΅ ΠΎΡ‚ процСсора.

Π›ΠΎΠ³Π²Π°Π½Π΅Ρ‚ΠΎ ΠΈ парсинга ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π°Ρ‚ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ впСчатляващи ΠΈ Π·Π°Ρ‚ΠΎΠ²Π° Π² Ρ‚ΠΎΠ·ΠΈ ΠΎΠ±Π·ΠΎΡ€ няма Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ спомСнати.

Π‘Π»Π°ΠΉΠ΄ΠΎΠ²Π΅ ΠΎΡ‚ Π΄ΠΎΠΊΠ»Π°Π΄Π° са Π½Π°Π»ΠΈΡ‡Π½ΠΈ Π½Π° слСдния Π»ΠΈΠ½ΠΊ: [β€žC++ Ρ‚Ρ€ΠΈΠΊΠΎΠ²Π΅ ΠΎΡ‚ Π’Π°ΠΊΡΠΈβ€œ]

Π‘ΡŠΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΈ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΈ Π·Π° ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Π½Π΅ Π½Π° вашия ΠΊΠΎΠ΄ DRY, BjΓΆrn Fahller

Π’ Ρ‚ΠΎΠ·ΠΈ Π΄ΠΎΠΊΠ»Π°Π΄ BjΓΆrn Fahller ΠΏΠΎΠΊΠ°Π·Π²Π° няколко Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π½Π°Ρ‡ΠΈΠ½Π° Π·Π° справянС с Ρ‚Π°ΠΊΡŠΠ² стилистичСн Π½Π΅Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΠΊ, ΠΊΠ°Ρ‚ΠΎ повтарящи сС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½Π° условия:

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

Π—Π²ΡƒΡ‡ΠΈ ΠΏΠΎΠ·Π½Π°Ρ‚ΠΎ? Π‘ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° няколко ΠΌΠΎΡ‰Π½ΠΈ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΈ ΠΎΡ‚ C++, появили сС Π² послСднитС стандарти, ΠΌΠΎΠΆΠ΅ изящно Π΄Π° Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Ρ‚Π΅ ΡΡŠΡ‰Π°Ρ‚Π° функционалност Π±Π΅Π· Π½ΠΈΠΊΠ°ΠΊΠ²ΠΈ Π·Π°Π³ΡƒΠ±ΠΈ Π½Π° производитСлност. Π‘Ρ€Π°Π²Π½Π΅Ρ‚Π΅:Β Β Β 

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

Π—Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° нСпостоянСн Π±Ρ€ΠΎΠΉ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π²Π΅Π΄Π½Π°Π³Π° Π΅ Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ variadic templates ΠΈ fold expressions. Π”Π° ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Π΅ искамС Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ Π΄Π°Π»ΠΈ няколко ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ са Ρ€Π°Π²Π½ΠΈ Π½Π° Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ ΠΎΡ‚ enum'a state_type. ΠŸΡŠΡ€Π²ΠΎΡ‚ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΈΠ΄Π²Π° Π½Π°ΡƒΠΌ – Π΄Π° напишСм спомагатСлна функция is_any_of:


enum state_type { IDLE, CONNECTED, DISCONNECTED }; 

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

Π’Π°Π·ΠΈ ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π½Π° ΡΡ‚ΡŠΠΏΠΊΠ° създава Ρ€Π°Π·ΠΎΡ‡Π°Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅. Π”ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° ΠΊΠΎΠ΄ΡŠΡ‚ Π½Π΅ става ΠΏΠΎ-Ρ‡Π΅Ρ‚ΠΈΠΌ:

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

ΠœΠ°Π»ΠΊΠΈΡ‚Π΅ подобрСния Π² ситуацията Ρ‰Π΅ Π½ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π°Ρ‚ non-type template parameters. Π‘ тях Ρ‰Π΅ прСмСстим Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ‚Π΅ Π½Π° enum'a Π² списъка с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π½Π° шаблона:Β 

template 
bool is_any_of(state_type t) { 
    return ((t == states) | ...); 
}
	
assert(is_any_of(state));Β 

Π‘ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° auto Π² Π½Π΅-Ρ‚ΠΈΠΏΠΎΠ² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€ Π½Π° шаблона (C++17), ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΡŠΡ‚ просто сС ΠΎΠ±ΠΎΠ±Ρ‰Π°Π²Π°, Π·Π° Π΄Π° сравнява Π½Π΅ само с Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ‚Π΅ Π½Π° state_type, Π½ΠΎ ΠΈ с ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½ΠΈ Ρ‚ΠΈΠΏΠΎΠ²Π΅, ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ ΠΊΠ°Ρ‚ΠΎ non-type template parameters:


template 
bool is_any_of(const T& t) {
    return ((t == alternatives) | ...);
}

Π‘ послСдоватСлност ΠΎΡ‚ Ρ‚Π°ΠΊΠΈΠ²Π° подобрСния сС постига ТСланият гладък синтаксис Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ:


template 
struct any_of : private std::tuple { 
// полСнимся ΠΈ унаслСдуСм конструкторы ΠΎΡ‚ tuple 
		using std::tuple::tuple;
		template 
		bool operator ==(const T& t) const {
			return std::apply(
				[&t](const auto& ... ts) {
					return ((ts == t) || ...);
				},
				static_cast<const std::tuple&>(*this));
		}
};

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

Π’ Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎΡ‚ΠΎ Π·Π° ΠΈΠ·Π²ΠΎΠ΄ слуТи Π·Π° подсказка Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€Π° ΠΊΠ°ΠΊΠ²ΠΈ ΠΆΠ΅Π»Π°Π΅ΠΌΠΈ шаблонни ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ ΠΈΠΌΠ° структурата, Π·Π½Π°Π΅Ρ‰Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅Ρ‚Π΅ Π½Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ‚Π΅ Π½Π° конструктора.Β 

По-Π½Π°Ρ‚Π°Ρ‚ΡŠΠΊ става интСрСсното. Π‘ΡŒΠΎΡ€Π½ ΡƒΡ‡ΠΈ ΠΊΠ°ΠΊ Π΄Π° ΠΎΠ±ΠΎΠ±Ρ‰ΠΈΠΌ получСния ΠΊΠΎΠ΄ Π·Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΈ Π·Π° сравнСниС, освСн ==, Π° слСд Ρ‚ΠΎΠ²Π° ΠΈ Π·Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ. По Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° сС обясняват ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊΠ°Ρ‚ΠΎ no_unique_address attribute (C++20) ΠΈ шаблонни ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π² лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (C++20). (Π”Π°, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ синтаксис Π½Π° лямбдитС Π΅ Π΄ΠΎΡ€ΠΈ ΠΏΠΎ-лСсСн Π·Π° запомнянС – Ρ‚ΠΎΠ²Π° са Ρ‡Π΅Ρ‚ΠΈΡ€ΠΈ послСдоватСлни Π΄Π²ΠΎΠΉΠΊΠΈ скоби ΠΎΡ‚ всякакъв Π²ΠΈΠ΄.) Π€ΠΈΠ½Π°Π»Π½ΠΎΡ‚ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‰ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊΠ°Ρ‚ΠΎ Π΄Π΅Ρ‚Π°ΠΉΠ»ΠΈ Π½Π° конструктора, Π»ΠΈΡ‡Π½ΠΎ ΠΌΠ΅Π½ ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π΄Π²Π°, Π΄Π° Π½Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π·Π° ΠΈΠ·Ρ€Π°Π·Π° tuple Π² Π½Π°ΠΉ-Π΄ΠΎΠ±Ρ€ΠΈΡ‚Π΅ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΈ Π½Π° лямбда-изчислСниСто.

Π’ края Π½Π΅ забравямС Π΄Π° ΠΏΡ€ΠΈΠ΄Π°Π΄Π΅ΠΌ блясък:

  • НСка ΠΏΡ€ΠΈΠΏΠΎΠΌΠ½ΠΈΠΌ, Ρ‡Π΅ лямбда-ΠΈΠ·Ρ€Π°Π·ΠΈΡ‚Π΅ са constexpr напълно Π±Π΅Π·ΠΏΠ»Π°Ρ‚Π½ΠΎ;Β 
  • ДобавямС perfect forwarding ΠΈ Ρ€Π°Π·Π³Π»Π΅ΠΆΠ΄Π°ΠΌΠ΅ уродливия ΠΌΡƒ синтаксис със ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€Π½ΠΈΡ ΠΏΠ°ΠΊΠ΅Ρ‚ Π² лямбда-ΠΈΠ·Ρ€Π°Π·ΠΈΡ‚Π΅;
  • ΠŸΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΡΠΌΠ΅ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€Π° ΠΏΠΎΠ²Π΅Ρ‡Π΅ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ Π·Π° оптимизация с conditional noexcept;Β 
  • Π“Ρ€ΠΈΠΆΠΈΠΌ сС Π·Π° ΠΏΠΎ-Ρ€Π°Π·Π±ΠΈΡ€Π°Π΅ΠΌΠΎΡ‚ΠΎ ΠΈΠ·Π²Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ Π² ΡˆΠ°Π±Π»ΠΎΠ½ΠΈΡ‚Π΅, Π±Π»Π°Π³ΠΎΠ΄Π°Ρ€Π΅Π½ΠΈΠ΅ Π½Π° явнитС Π²ΡŠΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΈ стойности Π½Π° лямбда-ΠΈΠ·Ρ€Π°Π·ΠΈΡ‚Π΅. Π’ΠΎΠ²Π° Ρ‰Π΅ Π½Π°ΠΊΠ°Ρ€Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€Π° Π΄Π° ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΏΡ€Π΅Π΄ΠΈ дСйствитСлното ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° ΡˆΠ°Π±Π»ΠΎΠ½Π½Π°Ρ‚Π° функция – Π½Π° Π΅Ρ‚Π°ΠΏΠ° Π½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅Ρ‚Π΅.Β 

Π—Π° подробности сС ΠΎΠ±ΡŠΡ€Π½Π΅Ρ‚Π΅ към ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈΡ‚Π΅ Π½Π° лСкцията:Β 

ΠΠ°ΡˆΠΈΡ‚Π΅ впСчатлСния

ΠΠ°ΡˆΠ΅Ρ‚ΠΎ ΠΏΡŠΡ€Π²ΠΎ участиС Π² C++ Russia Π·Π°ΠΏΠΎΠΌΠ½ΠΈ с богатството си. БъздадС сС прСдставата Π·Π° C++ Russia ΠΊΠ°Ρ‚ΠΎ Π·Π° Π΄ΡƒΡˆΠ΅Π²Π½ΠΎ ΡΡŠΠ±ΠΈΡ‚ΠΈΠ΅, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ Π³Ρ€Π°Π½ΠΈΡ†Π°Ρ‚Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΈ ΠΆΠΈΠ²ΠΎΡ‚ΠΎ ΠΎΠ±Ρ‰ΡƒΠ²Π°Π½Π΅ ΠΏΠΎΡ‡Ρ‚ΠΈ Π½Π΅ сС усСща. Всичко, ΠΎΡ‚ настроСниСто Π½Π° Π»Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡ‚Π΅ Π΄ΠΎ конкурситС ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ ΠΎΡ‚ ΠΏΠ°Ρ€Ρ‚Π½ΡŒΠΎΡ€ΠΈΡ‚Π΅ Π½Π° ΡΡŠΠ±ΠΈΡ‚ΠΈΠ΅Ρ‚ΠΎ, Π½Π°ΡΡŠΡ€Ρ‡Π°Π²Π° Π±ΡƒΡ€Π½ΠΈ обсъТдания. Π‘ΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‚Π΅Π»Π½Π°Ρ‚Π° част Π½Π° конфСрСнцията, ΡΡŠΡΡ‚ΠΎΡΡ‰Π° сС ΠΎΡ‚ Π΄ΠΎΠΊΠ»Π°Π΄ΠΈ, ΠΎΠ±Ρ…Π²Π°Ρ‰Π° доста ΡˆΠΈΡ€ΠΎΠΊ ΡΠΏΠ΅ΠΊΡ‚ΡŠΡ€ Ρ‚Π΅ΠΌΠΈ, Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ Π½ΠΎΠ²ΠΎΠ²ΡŠΠ²Π΅Π΄Π΅Π½ΠΈΡΡ‚Π° Π² C++, ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ ΠΎΡ‚ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°Ρ‚Π° Π½Π° Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ ΠΈ идСологичСски Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½ΠΈ Ρ€Π°Π·ΡΡŠΠΆΠ΄Π΅Π½ΠΈΡ. Но Π±ΠΈ Π±ΠΈΠ»ΠΎ нСсправСдливо Π΄Π° Π½Π΅ ΠΎΠ±ΡŠΡ€Π½Π΅ΠΌ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΈ Π½Π° социалната характСристика Π½Π° ΡΡŠΠ±ΠΈΡ‚ΠΈΠ΅Ρ‚ΠΎ, спомагаща Π·Π° прСодоляванС Π½Π° Π΅Π·ΠΈΠΊΠΎΠ²ΠΈΡ‚Π΅ Π±Π°Ρ€ΠΈ ΠΈ ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ Π½Π° Π½Π΅ само C++.

Π‘Π»Π°Π³ΠΎΠ΄Π°Ρ€ΠΈΠΌ Π½Π° ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΈΡ‚Π΅ Π½Π° конфСрСнцията Π·Π° Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚Ρ‚Π° Π΄Π° участва Π² Ρ‚Π°ΠΊΠΎΠ²Π° ΡΡŠΠ±ΠΈΡ‚ΠΈΠ΅!
ΠŸΠΎΡΡ‚ΡŠΡ‚ Π½Π° ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΈΡ‚Π΅ Π·Π° ΠΌΠΈΠ½Π°Π»ΠΎΡ‚ΠΎ, настоящСто ΠΈ Π±ΡŠΠ΄Π΅Ρ‰Π΅Ρ‚ΠΎ Π½Π° C++ Russia стС ΠΌΠΎΠ³Π»ΠΈ Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ Π² Π±Π»ΠΎΠ³Π° JUG Ru.

Π‘Π»Π°Π³ΠΎΠ΄Π°Ρ€ΠΈΠΌ Π·Π° ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½eto, ΠΈ сС надявамС, Ρ‡Π΅ Π½Π°ΡˆΠ΅Ρ‚ΠΎ Ρ€Π΅Π·ΡŽΠΌΠ΅ Π½Π° ΡΡŠΠ±ΠΈΡ‚ΠΈΡΡ‚Π° Π΅ Π±ΠΈΠ»ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ!

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster