C++ Russia: ΠΊΠ°ΠΊ это Π±Ρ‹Π»ΠΎ

Если Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΏΡŒΠ΅ΡΡ‹ Π²Ρ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π½Π° стСнС висит ΠΊΠΎΠ΄ Π½Π° Π‘++, Ρ‚ΠΎ ΠΊ ΠΊΠΎΠ½Ρ†Ρƒ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π΅ΠΏΡ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π²Ρ‹ΡΡ‚Ρ€Π΅Π»ΠΈΡ‚ΡŒ Π²Π°ΠΌ Π² Π½ΠΎΠ³Ρƒ.

Π‘ΡŒΡΡ€Π½Π΅ Бтроуструп

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

МосковскоС ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΡΠ΅Ρ‚ΠΈΡ‚ΡŒ ΡƒΠΆΠ΅ Π² Π°ΠΏΡ€Π΅Π»Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ Π³ΠΎΠ΄Π°, Π° ΠΏΠΎΠΊΠ° наши студСнты расскаТут, Ρ‡Ρ‚ΠΎ интСрСсного ΠΎΠ½ΠΈ ΡƒΠ·Π½Π°Π»ΠΈ Π½Π° ΠΏΡ€ΠΎΡˆΠ΅Π΄ΡˆΠ΅ΠΌ мСроприятии.Β 

C++ Russia: ΠΊΠ°ΠΊ это Π±Ρ‹Π»ΠΎ

Π€ΠΎΡ‚ΠΎ ΠΈΠ· альбома ΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈ

О нас

Над этим постом Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ Π΄Π²ΠΎΠ΅ студСнтов НИУ Π’Π¨Π­ β€” Π‘Π°Π½ΠΊΡ‚-ΠŸΠ΅Ρ‚Π΅Ρ€Π±ΡƒΡ€Π³:

  • Π›ΠΈΠ·Π° ВасилСнко – студСнтка 4-Π³ΠΎ курса Π±Π°ΠΊΠ°Π»Π°Π²Ρ€ΠΈΠ°Ρ‚Π°, ΠΈΠ·ΡƒΡ‡Π°ΡŽΡ‰Π°Ρ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Β«Π―Π·Ρ‹ΠΊΠΈ программирования» Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Β«ΠŸΡ€ΠΈΠΊΠ»Π°Π΄Π½Π°Ρ ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ° ΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ°Β». Познакомившись с языком C++ Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠΌ курсС унивСрситСта, впослСдствии ΠΏΡ€ΠΈΠΎΠ±Ρ€Π΅Π»Π° ΠΎΠΏΡ‹Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π½ΠΈΠΌ Π½Π° стаТировках Π² индустрии. Π£Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ языками программирования Π² Ρ†Π΅Π»ΠΎΠΌ ΠΈΒ  Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π² частности Π½Π°Π»ΠΎΠΆΠΈΠ»ΠΎ ΠΎΡ‚ΠΏΠ΅Ρ‡Π°Ρ‚ΠΎΠΊ Π½Π° Π²Ρ‹Π±ΠΎΡ€ Π΄ΠΎΠΊΠ»Π°Π΄ΠΎΠ² Π½Π° ΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈ.
  • Даня Π‘ΠΌΠΈΡ€Π½ΠΎΠ² – студСнт 1-Π³ΠΎ курса магистратуры Β«ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Π°Π½Π°Π»ΠΈΠ· Π΄Π°Π½Π½Ρ‹Ρ…Β». Π•Ρ‰Ρ‘ Π² школС писал Π½Π° C++ ΠΎΠ»ΠΈΠΌΠΏΠΈΠ°Π΄Π½Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ, Π° дальшС ΠΊΠ°ΠΊ-Ρ‚ΠΎ Ρ‚Π°ΠΊ Π²Ρ‹ΡˆΠ»ΠΎ, Ρ‡Ρ‚ΠΎ язык постоянно всплывал Π² ΡƒΡ‡Π΅Π±Π½ΠΎΠΉ Π΄Π΅ΡΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ Π² ΠΈΡ‚ΠΎΠ³Π΅ стал основным Ρ€Π°Π±ΠΎΡ‡ΠΈΠΌ. Π’ ΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈ Ρ€Π΅ΡˆΠΈΠ» ΡƒΡ‡Π°ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄Ρ‚ΡΠ½ΡƒΡ‚ΡŒ свои знания, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΎ Π½ΠΎΠ²Ρ‹Ρ… возмоТностях.

Π’ рассылкС руководство Ρ„Π°ΠΊΡƒΠ»ΡŒΡ‚Π΅Ρ‚Π° часто дСлится ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΎΠ± ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… событиях, связанных с нашСй ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ. Π’ сСнтябрС ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄Π΅Π»ΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ C++ Russia ΠΈ Ρ€Π΅ΡˆΠΈΠ»ΠΈ Π·Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² качСствС ΡΠ»ΡƒΡˆΠ°Ρ‚Π΅Π»Π΅ΠΉ. Π­Ρ‚ΠΎ – наш ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΎΠΏΡ‹Ρ‚ участия Π² ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… конфСрСнциях.

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° ΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈ

  • Π”ΠΎΠΊΠ»Π°Π΄Ρ‹

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

  • Discussion zones

ПослС выступлСния всС Π½Π΅Π·Π°Π΄Π°Π½Π½Ρ‹Π΅ вопросы ΠΈ Π½Π΅Π·Π°Π²Π΅Ρ€ΡˆΡ‘Π½Π½Ρ‹Π΅ обсуТдСния ΠΏΠ΅Ρ€Π΅Π½ΠΎΡΠΈΠ»ΠΈΡΡŒ Π² ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π·ΠΎΠ½Ρ‹ общСния с Π΄ΠΎΠΊΠ»Π°Π΄Ρ‡ΠΈΠΊΠ°ΠΌΠΈ, оснащённыС ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Π½Ρ‹ΠΌΠΈ досками. Π₯ΠΎΡ€ΠΎΡˆΠΈΠΉ способ ΡΠΊΠΎΡ€ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Ρ€Ρ‹Π² ΠΌΠ΅ΠΆΠ΄Ρƒ выступлСниями Π·Π° приятной бСсСдой.

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

Если Π·Π°Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΉ Π΄ΠΎΠΊΠ»Π°Π΄ β€” ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒΡΡ Π½Π° ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Π½ΠΎΠΉ доскС Π½Π° Π²Π΅Ρ‡Π΅Ρ€Π½ΠΈΠΉ Lightning Talk ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΡΡ‚ΡŒ ΠΌΠΈΠ½ΡƒΡ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° рассказ ΠΎ Ρ‡Ρ‘ΠΌ ΡƒΠ³ΠΎΠ΄Π½ΠΎ ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅ ΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈ. НапримСр, быстроС Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² sanitizers для C++ (для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… оказалось Π² Π½ΠΎΠ²ΠΈΠ½ΠΊΡƒ) ΠΈΠ»ΠΈ история ΠΏΡ€ΠΎ Π±Π°Π³ Π² Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ синусоиды, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΡΠ»Ρ‹ΡˆΠ°Ρ‚ΡŒ, Π½ΠΎ Π½Π΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ.

Π”Ρ€ΡƒΠ³ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ β€” панСльная дискуссия Β«Π‘ ΠΊΠΎΠΌΠΈΡ‚Π΅Ρ‚ΠΎΠΌ ΠΏΠΎ Π΄ΡƒΡˆΠ°ΠΌΒ». На сцСнС β€” Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‡Π»Π΅Π½Ρ‹ ΠΊΠΎΠΌΠΈΡ‚Π΅Ρ‚Π° ΠΏΠΎ стандартизации, Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΡ€Π΅ β€” ΠΊΠ°ΠΌΠΈΠ½ (ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎ β€” для создания Π΄ΡƒΡˆΠ΅Π²Π½ΠΎΠΉ атмосфСры, Π½ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° Β«ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ВБЁ Π’ ΠžΠ“ΠΠ•Β» каТСтся Π·Π°Π±Π°Π²Π½Π΅Π΅), вопросы β€” ΠΏΡ€ΠΎ стандарт ΠΈ ΠΎΠ±Ρ‰Π΅Π΅ Π²ΠΈΠ΄Π΅Π½ΠΈΠ΅ C++, Π±Π΅Π· Π±ΡƒΡ€Π½Ρ‹Ρ… тСхничСских обсуТдСний ΠΈ Ρ…ΠΎΠ»ΠΈΠ²Π°Ρ€ΠΎΠ². Оказалось, Ρ‡Ρ‚ΠΎ Π² ΠΊΠΎΠΌΠΈΡ‚Π΅Ρ‚Π΅ Ρ‚ΠΎΠΆΠ΅ сидят ΠΆΠΈΠ²Ρ‹Π΅ люди, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π² Ρ‡Ρ‘ΠΌ-Ρ‚ΠΎ Π½Π΅ Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹ ΠΈΠ»ΠΈ Ρ‡Π΅Π³ΠΎ-Ρ‚ΠΎ Π½Π΅ Π·Π½Π°Ρ‚ΡŒ.

Для Π»ΡŽΠ±ΠΈΡ‚Π΅Π»Π΅ΠΉ Ρ…ΠΎΠ»ΠΈΠ²Π°Ρ€ΠΎΠ² ΠΏΠΎ Π΄Π΅Π»Ρƒ ΠΎΡΡ‚Π°Π²Π°Π»ΠΎΡΡŒ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ мСроприятиС β€” BOF-сСссия Β«Go ΠΏΡ€ΠΎΡ‚ΠΈΠ² C++Β». Π‘Π΅Ρ€Ρ‘ΠΌ Π»ΡŽΠ±ΠΈΡ‚Π΅Π»Ρ Go, Π»ΡŽΠ±ΠΈΡ‚Π΅Π»Ρ C++, ΠΏΠ΅Ρ€Π΅Π΄ Π½Π°Ρ‡Π°Π»ΠΎΠΌ сСссии ΠΎΠ½ΠΈ вмСстС готовят 100500 слайдов Π½Π° Ρ‚Π΅ΠΌΡƒ (Π²Ρ€ΠΎΠ΄Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с ΠΏΠ°ΠΊΠ΅Ρ‚Π°ΠΌΠΈ Π² C++ ΠΈΠ»ΠΈ отсутствиСм Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ² Π² Go), Π° Π·Π°Ρ‚Π΅ΠΌ ΠΎΠ½ΠΈ ΠΎΠΆΠΈΠ²Π»Ρ‘Π½Π½ΠΎ Π΄ΠΈΡΠΊΡƒΡ‚ΠΈΡ€ΡƒΡŽΡ‚ ΠΌΠ΅ΠΆΠ΄Ρƒ собой ΠΈ с Π·Π°Π»ΠΎΠΌ, Π° Π·Π°Π» пытаСтся ΠΏΠΎΠ½ΡΡ‚ΡŒ сразу Π΄Π²Π΅ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния. Если начинаСтся Ρ…ΠΎΠ»ΠΈΠ²Π°Ρ€ Π½Π΅ ΠΏΠΎ Π΄Π΅Π»Ρƒ β€” Π²ΠΌΠ΅ΡˆΠΈΠ²Π°Π΅Ρ‚ΡΡ ΠΌΠΎΠ΄Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΈ примиряСт стороны. Π’Π°ΠΊΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ затягиваСт: Ρ‡Π΅Ρ€Π΅Π· нСсколько часов послС Π½Π°Ρ‡Π°Π»Π° Π±Ρ‹Π»Π° ΠΏΡ€ΠΎΠΉΠ΄Π΅Π½Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π° слайдов. ΠšΠΎΠ½Π΅Ρ† ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ сильно ΡƒΡΠΊΠΎΡ€ΡΡ‚ΡŒ.

  • Π‘Ρ‚Π΅Π½Π΄Ρ‹ ΠΏΠ°Ρ€Ρ‚Π½Ρ‘Ρ€ΠΎΠ²

Π’ Ρ…ΠΎΠ»Π»Π°Ρ… Π±Ρ‹Π»ΠΈ прСдставлСны ΠΏΠ°Ρ€Ρ‚Π½Π΅Ρ€Ρ‹ ΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈ β€” Π½Π° стСндах рассказывали ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ…, ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π»ΠΈ стаТировки ΠΈ трудоустройство, ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΠ»ΠΈ ΠΊΠ²ΠΈΠ·Ρ‹ ΠΈ нСбольшиС сорСвнования, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°Π·Ρ‹Π³Ρ€Ρ‹Π²Π°Π»ΠΈ приятныС ΠΏΡ€ΠΈΠ·Ρ‹. ΠŸΡ€ΠΈ этом Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Π΄Π°ΠΆΠ΅ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π»ΠΈ ΠΏΡ€ΠΎΠΉΡ‚ΠΈ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ этапы собСсСдований, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ для Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ ΠΏΡ€ΠΈΠ΅Ρ…Π°Π» Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡΠ»ΡƒΡˆΠ°Ρ‚ΡŒ Π΄ΠΎΠΊΠ»Π°Π΄Ρ‹.

ВСхничСскиС подробности Π΄ΠΎΠΊΠ»Π°Π΄ΠΎΠ²

ΠœΡ‹ ΡΠ»ΡƒΡˆΠ°Π»ΠΈ Π΄ΠΎΠΊΠ»Π°Π΄Ρ‹ ΠΎΠ±Π° дня. ΠŸΠΎΡ€ΠΎΠΉ Π±Ρ‹Π»ΠΎ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ Π΄ΠΎΠΊΠ»Π°Π΄ ΠΈΠ· ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ ΠΈΠ΄ΡƒΡ‰ΠΈΡ… – ΠΌΡ‹ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈΡΡŒ Ρ€Π°Π·Π΄Π΅Π»ΡΡ‚ΡŒΡΡ ΠΈ ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΌΠΈ знаниями Π² ΠΏΠ΅Ρ€Π΅Ρ€Ρ‹Π²Π°Ρ…. И Π΄Π°ΠΆΠ΅ Ρ‚Π°ΠΊ, каТСтся, Ρ‡Ρ‚ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ ΡƒΠΏΡƒΡ‰Π΅Π½ΠΎ. Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ Π±Ρ‹ Ρ€Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎ содСрТании Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΄ΠΎΠΊΠ»Π°Π΄ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ показались Π½Π°ΠΌ самыми интСрСсными

Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π² C++ Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€ΠΈΠ·ΠΌΡƒ компиляторных ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΉ, Π ΠΎΠΌΠ°Π½ РусяСв

C++ Russia: ΠΊΠ°ΠΊ это Π±Ρ‹Π»ΠΎ
Π‘Π»Π°ΠΉΠ΄ ΠΈΠ· ΠΏΡ€Π΅Π·Π΅Π½Ρ‚Π°Ρ†ΠΈΠΈ

Как понятно ΠΈΠ· названия, Π ΠΎΠΌΠ°Π½ рассмотрСл Ρ€Π°Π±ΠΎΡ‚Ρƒ с ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΠΌΠΈ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ LLVM. ΠŸΡ€ΠΈ этом для Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… Π² своСй Ρ€Π°Π±ΠΎΡ‚Π΅ Clang Π΄ΠΎΠΊΠ»Π°Π΄ всё Ρ€Π°Π²Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ прСдставлСниС ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΊΠΎΠ΄ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½. Π­Ρ‚ΠΎ Ρ‚Π°ΠΊ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ компиляторов ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… стандартных Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΎΠ±Ρ‰Π°ΡŽΡ‚ΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ собой ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΡƒΠ΄Π°Ρ‡Π½Ρ‹Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ.

Π˜Ρ‚Π°ΠΊ, для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ трСбуСтся ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ мноТСство дСйствий: Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ (Ссли Π΅ΡΡ‚ΡŒ) ΠΈΠ»ΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ рСсурсы Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΈ Ρ€Π°ΡΠΊΡ€ΡƒΡ‚ΠΈΡ‚ΡŒ стСк Π²Ρ‹ΡˆΠ΅. Всё это Π²Π΅Π΄Ρ‘Ρ‚ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ для ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ Π²Ρ‹Π΄Π°ΡŽΡ‰ΠΈΡ… ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² компилятор добавляСт Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ инструкции. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Ссли ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ Ρ„Π°ΠΊΡ‚Ρƒ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½ΠΎ, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° всС Ρ€Π°Π²Π½ΠΎ станСт Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅ дСйствия. Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠ°ΠΊ-Ρ‚ΠΎ ΡΠ½ΠΈΠ·ΠΈΡ‚ΡŒ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы, Π² LLVM Π΅ΡΡ‚ΡŒ нСсколько эвристик опрСдСлСния ситуаций, Π³Π΄Π΅ ΠΊΠΎΠ΄ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ»ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ½ΠΈΠ·ΠΈΡ‚ΡŒ количСство Β«Π»ΠΈΡˆΠ½ΠΈΡ…Β» инструкций.

Π”ΠΎΠΊΠ»Π°Π΄Ρ‡ΠΈΠΊ рассматриваСт ΠΎΠΊΠΎΠ»ΠΎ дСсятка ΠΈΠ· Π½ΠΈΡ… ΠΈ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΊΠ°ΠΊ ситуации, Π³Π΄Π΅ ΠΎΠ½ΠΈ ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ исполнСниС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Ρ‚Π°ΠΊ ΠΈ Ρ‚Π΅, Π³Π΄Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π½Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΡ‹.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π ΠΎΠΌΠ°Π½ РусяСв ΠΏΠΎΠ΄Π²ΠΎΠ΄ΠΈΡ‚ ΡΠ»ΡƒΡˆΠ°Ρ‚Π΅Π»Π΅ΠΉ ΠΊ Π²Ρ‹Π²ΠΎΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄, содСрТащий Ρ€Π°Π±ΠΎΡ‚Ρƒ с ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΠΌΠΈ, Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ всСгда ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»Π½ΡΡ‚ΡŒ с Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌΠΈ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹ΠΌΠΈ расходами, ΠΈ Π΄Π°Ρ‘Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ совСты:

  • ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ стоит ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅;
  • Ссли ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ всё ΠΆΠ΅ Π½ΡƒΠΆΠ½Ρ‹, Ρ‚ΠΎ ΠΏΠΎ возмоТности Π²Π΅Π·Π΄Π΅ стоит Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ noexcept (ΠΈ const), Ρ‡Ρ‚ΠΎΠ±Ρ‹ компилятор ΠΌΠΎΠ³ ΡΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ большС.

Π’ Ρ†Π΅Π»ΠΎΠΌ, Π΄ΠΎΠΊΠ»Π°Π΄Ρ‡ΠΈΠΊ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΠ» ΠΌΠ½Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π»ΡƒΡ‡ΡˆΠ΅ всСго ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌΡƒ ΠΈΠ»ΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΎΡ‚ Π½ΠΈΡ… ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ.

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

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

C++ Russia: ΠΊΠ°ΠΊ это Π±Ρ‹Π»ΠΎ
Π‘Π»Π°ΠΉΠ΄ ΠΈΠ· ΠΏΡ€Π΅Π·Π΅Π½Ρ‚Π°Ρ†ΠΈΠΈ

Один ΠΈΠ· ΠΌΠ½ΠΎΠ³ΠΈΡ… Π΄ΠΎΠΊΠ»Π°Π΄ΠΎΠ² этой ΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈ, посвящённых нововвСдСниям C++20, запомнился Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ красочно ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½Π½ΠΎΠΉ ΠΏΡ€Π΅Π·Π΅Π½Ρ‚Π°Ρ†ΠΈΠ΅ΠΉ, Π½ΠΎ ΠΈ Ρ‡Ρ‘Ρ‚ΠΊΠΈΠΌ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ…ΡΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с Π»ΠΎΠ³ΠΈΠΊΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ (Ρ†ΠΈΠΊΠ» for, callback-ΠΈ).

Adi Shavit выдСляСт ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅: ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ΡΡ Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ проходят ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ ΠΈ ΠΏΡ€ΠΈ этом Π½Π΅ Π΄Π°ΡŽΡ‚ доступа ΠΊ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΌΡƒ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠΌΡƒ ΡΠΎΡΡ‚ΠΎΡΠ½ΠΈΡŽ (Π»ΠΈΠ±ΠΎ Π΄Π°ΡŽΡ‚ Π² случаС callback-ΠΎΠ², Π½ΠΎ с большим количСством нСприятных ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹Ρ… эффСктов, Ρ‚ΠΈΠΏΠ° Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Callback Hell). Казалось Π±Ρ‹, Π΅ΡΡ‚ΡŒ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, Π½ΠΎ ΠΈ с Π½ΠΈΠΌΠΈ всё Π½Π΅ Ρ‚Π°ΠΊ Π³Π»Π°Π΄ΠΊΠΎ: Π½Π΅Ρ‚ ΠΎΠ±Ρ‰ΠΈΡ… Ρ‚ΠΎΡ‡ΠΊΠΈ Π²Ρ…ΠΎΠ΄Π° ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π° (begin β†’ end ΠΏΡ€ΠΎΡ‚ΠΈΠ² rbegin β†’ rend ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅), нСпонятно, сколько Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ? Начиная с C++20 Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Ρ€Π΅ΡˆΠ°ΡŽΡ‚ΡΡ!

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚: ranges. Π—Π° счёт ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΊΠΈ ΠΏΠΎΠ²Π΅Ρ€Ρ… ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΎΠ±Ρ‰ΠΈΠΉ интСрфСйс для Π½Π°Ρ‡Π°Π»Π° ΠΈ ΠΊΠΎΠ½Ρ†Π° ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ. Всё это позволяСт Π»Π΅Π³ΠΊΠΎ ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½Ρ‹Π΅ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Ρ‹ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. Но Π½Π΅ всё Ρ‚Π°ΠΊ Π³Π»Π°Π΄ΠΊΠΎ: Ρ‡Π°ΡΡ‚ΡŒ Π»ΠΎΠ³ΠΈΠΊΠΈ вычислСний находится Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΡΠ»ΠΎΠΆΠ½ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ для восприятия ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ.

C++ Russia: ΠΊΠ°ΠΊ это Π±Ρ‹Π»ΠΎ
Π‘Π»Π°ΠΉΠ΄ ΠΈΠ· ΠΏΡ€Π΅Π·Π΅Π½Ρ‚Π°Ρ†ΠΈΠΈ

Π§Ρ‚ΠΎ ΠΆΠ΅, Π½Π° этот случай Π² 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<kImplSize, kImplAlign> data_;Β 
};

ЕдинствСнная ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°: Π½ΡƒΠΆΠ½ΠΎ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΊΠΈ ΠΏΡ€ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΈ Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ β€” сдСлаСм наш pimpl ΡˆΠ°Π±Π»ΠΎΠ½Π½Ρ‹ΠΌ с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ <T,SizeT,AlignmentT>, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ с ΠΊΠ°ΠΊΠΈΠΌΠΈ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌΠΈ значСния ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π² дСструктор ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ всё ΡƒΠ³Π°Π΄Π°Π»ΠΈ:Β 

~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 ΡƒΠΆΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½, Π΄Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΈ Π½Π° стадии компиляции Π² Π²ΠΈΠ΄Π΅ ошибок Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ Π½ΡƒΠΆΠ½Ρ‹Π΅ значСния Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΈ выравнивания, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½ΠΎ Π²ΠΏΠΈΡΠ°Ρ‚ΡŒ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ†Π΅Π½ΠΎΠΉ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ запуска компиляции ΠΌΡ‹ избавляСмся ΠΎΡ‚ динамичСской Π°Π»Π»ΠΎΠΊΠ°Ρ†ΠΈΠΈ ΠΎΠ±ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… классов, прячСм API Π² .cpp-Ρ„Π°ΠΉΠ» с Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π½ΡƒΡŽ для ΠΊΠ΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ процСссором ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ.

Π›ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ парсинг показались ΠΌΠ΅Π½Π΅Π΅ Π²ΠΏΠ΅Ρ‡Π°Ρ‚Π»ΡΡŽΡ‰ΠΈΠΌΠΈ, Π° поэтому Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΎΠ±Π·ΠΎΡ€Π΅ упомянуты Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚.

Π‘Π»Π°ΠΉΠ΄Ρ‹ Π΄ΠΎΠΊΠ»Π°Π΄Π° доступны ΠΏΠΎ ссылкС: [Β«C++ Ρ‚Ρ€ΡŽΠΊΠΈ ΠΈΠ· Вакси»]

Modern techniques for keeping your code DRY, BjΓΆrn Fahller

Π’ этом Π΄ΠΎΠΊΠ»Π°Π΄Π΅ BjΓΆrn Fahller ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ нСсколько Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… способов Π±ΠΎΡ€ΡŒΠ±Ρ‹ с Ρ‚Π°ΠΊΠΈΠΌ стилистичСским Π½Π΅Π΄ΠΎΡ‡Ρ‘Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΠ΅ΡΡ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ условий:

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

Π—Π½Π°ΠΊΠΎΠΌΠΎ? Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ нСсколько ΠΌΠΎΡ‰Π½Ρ‹Ρ… Ρ‚Π΅Ρ…Π½ΠΈΠΊ Π‘++, ΠΏΠΎΡΠ²ΠΈΠ²ΡˆΠΈΡ…ΡΡ Π² Π½Π΅Π΄Π°Π²Π½ΠΈΡ… стандартах, ΠΌΠΎΠΆΠ½ΠΎ изящно Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Ρƒ ΠΆΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π±Π΅Π· ΠΌΠ°Π»Π΅ΠΉΡˆΠΈΡ… ΠΏΠΎΡ‚Π΅Ρ€ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Π‘Ρ€Π°Π²Π½ΠΈΡ‚Π΅:Β Β Β 

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 <typename ... Ts>
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 <state_type ... states>
bool is_any_of(state_type t) {Β 
    return ((t == states) | ...);Β 
}
	
assert(is_any_of<IDLE, DISCONNECTING, DISCONNECTED>(state));Β 

Π‘ использованиСм auto Π² Π½Π΅ Ρ‚ΠΈΠΏΠΎΠ²ΠΎΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅ шаблона (C++17), ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ просто обобщаСтся Π½Π° сравнСния Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с элСмСнтами state_type, Π½ΠΎ ΠΈ с ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² качСствС non-type template parameters:


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

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ deduction guide слуТит для подсказки ΠΆΠ΅Π»Π°Π΅ΠΌΡ‹Ρ… ΡˆΠ°Π±Π»ΠΎΠ½Π½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² структуры компилятору, Π·Π½Π°ΡŽΡ‰Π΅ΠΌΡƒ Ρ‚ΠΈΠΏΡ‹ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² конструктора.Β 

Π”Π°Π»ΡŒΡˆΠ΅ – интСрСснСС. Π‘ΡŒΠΎΡ€Π½ ΡƒΡ‡ΠΈΡ‚ ΠΎΠ±ΠΎΠ±Ρ‰Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ²ΡˆΠΈΠΉΡΡ ΠΊΠΎΠ΄ для ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² сравнСния ΠΏΠΎΠΌΠΈΠΌΠΎ ==, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΈ для ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ. ΠŸΠΎΠΏΡƒΡ‚Π½ΠΎ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ использования ΠΎΠ±ΡŠΡΡΠ½ΡΡŽΡ‚ΡΡ Ρ‚Π°ΠΊΠΈΠ΅ Ρ„ΠΈΡ‡ΠΈ ΠΊΠ°ΠΊ no_unique_address attribute (C++20) ΠΈ ΡˆΠ°Π±Π»ΠΎΠ½Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π² лямбда-функциях (C++20). (Π”Π°, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ синтакс лямбд Π΅Ρ‰Ρ‘ Π»Π΅Π³Ρ‡Π΅ Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ – это Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Ρ‹ скобок всСх сортов.) Π˜Ρ‚ΠΎΠ³ΠΎΠ²ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ с использованиСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΊΠ°ΠΊ Π΄Π΅Ρ‚Π°Π»Π΅ΠΊ конструктора Π»ΠΈΡ‡Π½ΠΎ ΠΌΠ½Π΅ ΠΎΡ‡Π΅Π½ΡŒ Π³Ρ€Π΅Π΅Ρ‚ Π΄ΡƒΡˆΡƒ, Π½Π΅ говоря ΡƒΠΆΠ΅ ΠΎ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ tuple Π² Π»ΡƒΡ‡ΡˆΠΈΡ… традициях лямбда-исчислСния.

Π’ ΠΊΠΎΠ½Ρ†Π΅ Π½Π΅ Π·Π°Π±Ρ‹Π²Π°Π΅ΠΌ навСсти лоск:

  • Вспомним, Ρ‡Ρ‚ΠΎ лямбды – constexpr Π·Π° бСсплатно;Β 
  • Π”ΠΎΠ±Π°Π²ΠΈΠΌ perfect forwarding ΠΈ посмотрим Π½Π° Π΅Π³ΠΎ ΡƒΡ€ΠΎΠ΄Π»ΠΈΠ²Ρ‹ΠΉ синтакс ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊ parameter pack Π² Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠΈ лямбд;
  • Π”Π°Π΄ΠΈΠΌ компилятору большС возмоТностСй для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΉ с conditional noexcept;Β 
  • ΠŸΠΎΠ·Π°Π±ΠΎΡ‚ΠΈΠΌΡΡ ΠΎ Π±ΠΎΠ»Π΅Π΅ понятном Π²Ρ‹Π²ΠΎΠ΄Π΅ ошибок Π² ΡˆΠ°Π±Π»ΠΎΠ½Π°Ρ… благодаря явным Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΌ значСниям лямбд. Π­Ρ‚ΠΎ заставит компилятор Π΄Π΅Π»Π°Ρ‚ΡŒ большС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ Π΄ΠΎ собствСнно Π²Ρ‹Π·ΠΎΠ²Π° шаблонной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ – Π½Π° стадии ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ‚ΠΈΠΏΠΎΠ².Β 

Π—Π° подробностями ΠΎΠ±Ρ€Π°Ρ‰Π°ΠΉΡ‚Π΅ΡΡŒ ΠΊ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π°ΠΌ Π»Π΅ΠΊΡ†ΠΈΠΈ:Β 

Наши впСчатлСния

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

Π‘Π»Π°Π³ΠΎΠ΄Π°Ρ€ΠΈΠΌ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈ Π·Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΡƒΡ‡Π°ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π² Ρ‚Π°ΠΊΠΎΠΌ событии!
ΠŸΠΎΡΡ‚ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΎ ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΌ, настоящСм ΠΈ Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ C++ Russia Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ Π² Π±Π»ΠΎΠ³Π΅ JUG Ru.

Бпасибо Π·Π° ΠΏΡ€ΠΎΡ‡Ρ‚Π΅Π½ΠΈΠ΅, ΠΈ надССмся, Ρ‡Ρ‚ΠΎ наш пСрСсказ событий оказался ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ!

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

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ