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

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

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

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

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

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

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

Π—Π° нас

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

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

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

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

  • Π›Π΅ΠΊΡ†ΠΈΠΈ

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

  • Π—ΠΎΠ½ΠΈ Π·Π° дискусии

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

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

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

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

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

  • Π©Π°Π½Π΄ΠΎΠ²Π΅Ρ‚Π΅ Π½Π° ΠΏΠ°Ρ€Ρ‚Π½ΡŒΠΎΡ€ΠΈΡ‚Π΅

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

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

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

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

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

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

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

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

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

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

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

Π‘Π»Π°ΠΉΠ΄ΠΎΠ²Π΅Ρ‚Π΅ Π½Π° Π΄ΠΎΠΊΠ»Π°Π΄Π° са Π΄ΠΎΡΡ‚ΡŠΠΏΠ½ΠΈ Π½Π° Π»ΠΈΠ½ΠΊΠ°: [Β«Π˜Π·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ C++ ΠΏΡ€Π΅Π· ΠΏΡ€ΠΈΠ·ΠΌΠ°Ρ‚Π° Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€Π½ΠΈΡ‚Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ LLVMΒ»]

Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΈ, ΠΊΠΎΡ€ΡƒΡ‚ΠΈΠ½ΠΈ ΠΈ Π΄Ρ€ΡƒΠ³Π° сладост със замъгляванС Π½Π° мозъка, Ади Π¨Π°Π²ΠΈΡ‚

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

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

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

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

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

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

Но ΠΈΠΌΠ° ΠΈ ΠΌΠ°Π»ΠΊΠΎ лоша страна: Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Ρ‚Π΅ сС ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Ρ‚ само частично ΠΎΡ‚ Π½Π°Π»ΠΈΡ‡Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€ΠΈ, Π° ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° са Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ Π½Π΅ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° ΠΏΡ€Π΅Ρ†ΠΈΠ·Π½ΠΎ, ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ Π±ΠΈΡ…ΠΌΠ΅ искали: Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π° Ρ‚ΠΎΠ·ΠΈ Π΅Ρ‚Π°ΠΏ Π½Π΅ Π΅ ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Ρ€Π΅Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈ ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π²ΠΈ ΠΎΠ±Π΅ΠΊΡ‚ΠΈ Π² ΠΊΠΎΡ€ΡƒΡ‚ΠΈΠ½ΠΈ. ОсвСн Ρ‚ΠΎΠ²Π°, ΠΈΠΌΠ° някои ограничСния Π·Π° Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊΠ²ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Π² ΠΊΠΎΡ€ΡƒΡ‚ΠΈΠ½ΠΈ, ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, конструктоори/дСструктори, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ 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);

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

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

Π—Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π±Ρ€ΠΎΠΉ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ сС ΠΏΡ€Π΅Π΄Π»Π°Π³Π° Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π²Π°Ρ€ΠΈΠ°Π΄ΠΈΡ‡Π½ΠΈ шаблони ΠΈ fold ΠΈΠ·Ρ€Π°Π·ΠΈ. Π”Π° ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Π΅ искамС Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ равСнството Π½Π° няколко ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ с Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ ΠΎΡ‚ 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));Β 

Малко ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½ΠΈΠ΅ Π½Π° ситуацията ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° прСдоставят ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΡ‚Π΅ Π½Π° шаблона Π±Π΅Π· Ρ‚ΠΈΠΏ. Π‘ тяхна ΠΏΠΎΠΌΠΎΡ‰ Ρ‰Π΅ прСмСстим ΠΈΠ·Π±Ρ€ΠΎΠ΅Π½ΠΈΡ‚Π΅ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ ΠΎΡ‚ enum’a Π² списъка Π½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΡ‚Π΅ Π½Π° шаблона:Β 

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

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


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 ΠΈ ΠΏΠΎΠ³Π»Π΅ΠΆΠ΄Π°ΠΌΠ΅ нСговия Π½Π΅ΠΏΠΎΠ΄Ρ€Π΅Π΄Π΅Π½ синтаксис, ΡΠ²ΡŠΡ€Π·Π°Π½ с парамСтричния ΠΏΠ°ΠΊΠ΅Ρ‚ Π² замиквания Π½Π° лямбди;
  • Π”Π°Π²Π°ΠΌΠ΅ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€Π° ΠΏΠΎΠ²Π΅Ρ‡Π΅ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ Π·Π° оптимизация с условСн noexcept;Β 
  • ΠŸΠΎΠ³Ρ€ΠΈΠΆΠ΅Ρ‚Π΅ сС Π·Π° ΠΏΠΎ-Ρ€Π°Π·Π±ΠΈΡ€Π°Π΅ΠΌ ΠΈΠ·Ρ…ΠΎΠ΄ Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ Π² шаблони Ρ‡Ρ€Π΅Π· явни Π²ΡŠΡ€Π½Π°Ρ‚ΠΈ стойности ΠΎΡ‚ лямбди. Π’ΠΎΠ²Π° Ρ‰Π΅ Π½Π°ΠΊΠ°Ρ€Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€Π° Π΄Π° ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΏΡ€Π΅Π΄ΠΈ дСйствитСлното ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° ΡˆΠ°Π±Π»ΠΎΠ½Π½Π°Ρ‚Π° функция – Π½Π° Π΅Ρ‚Π°ΠΏΠ° Π½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅Ρ‚Π΅.Β 

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

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

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

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

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

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

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