en
Feedback
Senior C++ Developer

Senior C++ Developer

Open in Telegram

Π˜Π·ΡƒΡ‡Π°Π΅ΠΌ C++. По вопросам сотрудничСства: @adv_and_pr РКН: https://www.gosuslugi.ru/snet/676e9a1e4e740947beca35ba

Show more

πŸ“ˆ Analytical overview of Telegram channel Senior C++ Developer

Channel Senior C++ Developer (@seniorcpp) in the Russian language segment is an active participant. Currently, the community unites 11 638 subscribers, ranking 10 383 in the Technologies & Applications category and 55 311 in the Russia region.

πŸ“Š Audience metrics and dynamics

Since its creation on Π½Π΅Π²Ρ–Π΄ΠΎΠΌΠΎ, the project has demonstrated rapid growth, gathering an audience of 11 638 subscribers.

According to the latest data from 03 September, 2026, the channel demonstrates stable activity. Although there has been a change in the number of participants by -70 over the last 30 days and by -5 over the last 24 hours, overall reach remains high.

  • Verification status: Not verified
  • Engagement rate (ER): The average audience engagement rate is 9.96%. Within the first 24 hours after publication, content typically collects 4.51% reactions from the total number of subscribers.
  • Post reach: On average, each post receives 1 159 views. Within the first day, a publication typically gains 525 views.
  • Reactions and interaction: The audience actively supports content: the average number of reactions per post is 0.
  • Thematic interests: Content is focused on key topics such as c++, ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½, git, true.

πŸ“ Description and content policy

The author describes the resource as a platform for expressing subjective opinions:
β€œΠ˜Π·ΡƒΡ‡Π°Π΅ΠΌ C++. По вопросам сотрудничСства: @adv_and_pr РКН: https://www.gosuslugi.ru/snet/676e9a1e4e740947beca35ba”

Thanks to the high frequency of updates (latest data received on 04 September, 2026), the channel maintains relevance and a high level of publication reach. Analytics show that the audience actively interacts with content, making it an important point of influence in the Technologies & Applications category.

11 638
Subscribers
-524 hours
-177 days
-7030 days
Posts Archive
thread-safe ΠΏΡƒΠ» ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² На ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ прСдставлСна рСализация потокобСзопасного ΠΏΡƒΠ»Π° ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². Π’ этой Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ класс
+1
thread-safe ΠΏΡƒΠ» ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² На ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ прСдставлСна рСализация потокобСзопасного ΠΏΡƒΠ»Π° ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². Π’ этой Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ класс ThreadPool управляСт ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² опрСдСляСтся ΠΏΡ€ΠΈ создании ΠΏΡƒΠ»Π° ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². Ѐункция enqueue ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π·Π°Π΄Π°Π½ΠΈΠΉ Π² ΠΏΡƒΠ» ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². На Π²Ρ‚ΠΎΡ€ΠΎΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ прСдставлСн ΠΏΡ€ΠΈΠΌΠ΅Ρ€ использования. функция Task пСрСдаСтся Π² ΠΏΡƒΠ» ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ enqueue. Ѐункция Task просто ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ сообщСниС ΠΈ "спит" Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ 1 сСкунды. ПослС ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ всСх Π·Π°Π΄Π°Π½ΠΈΠΉ Π³Π»Π°Π²Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΠΆΠ΄Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Π°Ρ‚ΡŒ заданиям Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒΡΡ ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹Ρ…ΠΎΠ΄ΠΎΠΌ. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ здСсь ΠΊΠΎΠ΄ являСтся Π±Π°Π·ΠΎΠ²ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ ΠΏΡƒΠ»Π° ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΈ Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹Π΅ возмоТности, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΎΡ‚ Π·Π°Π΄Π°Ρ‡ ΠΈΠ»ΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ количСства ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ эту Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π² соотвСтствии с вашими ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌΠΈ потрСбностями.

Π‘Π°Π·ΠΎΠ²Ρ‹ΠΉ курс Π»Π΅ΠΊΡ†ΠΈΠΉ ΠΏΠΎ Π‘++ ΠΈΠ· Π±Π°ΠΊΠ°Π»Π°Π²Ρ€ΠΈΠ°Ρ‚Π° МЀВИ https://youtu.be/Bym7UMqpVEY?list=PL3BR09unfgciJ1_K_E914nohpiOiHnpsK

🫡 ΠŸΡ€ΠΎΠΉΠ΄ΠΈ тСст ΠΏΠΎ C++ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒ свои знания. ΠžΡ‚Π²Π΅Ρ‚ΠΈΡˆΡŒ β€” ΠΏΡ€ΠΎΠΉΠ΄Π΅ΡˆΡŒ Π½Π° ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹ΠΉ курс "C++ Developer. Professional" ΠΎΡ‚ OTUS ΠΏΠΎ
🫡 ΠŸΡ€ΠΎΠΉΠ΄ΠΈ тСст ΠΏΠΎ C++ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒ свои знания. ΠžΡ‚Π²Π΅Ρ‚ΠΈΡˆΡŒ β€” ΠΏΡ€ΠΎΠΉΠ΄Π΅ΡˆΡŒ Π½Π° ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹ΠΉ курс "C++ Developer. Professional" ΠΎΡ‚ OTUS ΠΏΠΎ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ†Π΅Π½Π΅ + ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡˆΡŒ запись мастСр-класса ΠΎΡ‚ прСподаватСля курса. ⛔️ ΠŸΠ ΠžΠ™Π’Π˜ Π’Π•Π‘Π’: https://otus.pw/pLpV/ Нативная интСграция. Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π΅ www.otus.ru

std::atomic_flag std::atomic_flag являСтся классом для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ простой Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎΠΉ Ρ„Π»Π°Π³ΠΎΠ²ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. Он прСдоставляСт ΠΌΠ΅Ρ…
std::atomic_flag std::atomic_flag являСтся классом для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ простой Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎΠΉ Ρ„Π»Π°Π³ΠΎΠ²ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. Он прСдоставляСт ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ бСзопасной Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ρ„Π»Π°Π³ΠΎΠΌ Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΉ срСдС Π±Π΅Π· нСобходимости использования Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ. std::atomic_flag ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π²Π° основных ΠΌΠ΅Ρ‚ΠΎΠ΄Π°: test_and_set() ΠΈ clear(): ΠœΠ΅Ρ‚ΠΎΠ΄ test_and_set() устанавливаСт Ρ„Π»Π°Π³ Π² "истину" ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ„Π»Π°Π³Π°. Если Ρ„Π»Π°Π³ ΡƒΠΆΠ΅ Π±Ρ‹Π» установлСн, Π²Ρ‹Π·ΠΎΠ² test_and_set() Π²Π΅Ρ€Π½Π΅Ρ‚ true, Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС ΠΎΠ½ Π²Π΅Ρ€Π½Π΅Ρ‚ false. ΠœΠ΅Ρ‚ΠΎΠ΄ clear() сбрасываСт Ρ„Π»Π°Π³ Π² "лоТь". Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Π΄Π²Π° ΠΏΠΎΡ‚ΠΎΠΊΠ° workerThread1 ΠΈ workerThread2, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ‹Ρ‚Π°ΡŽΡ‚ΡΡ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½ΠΎΠΌΡƒ Π±Π»ΠΎΠΊΡƒ ΠΊΠΎΠ΄Π°. Π€Π»Π°Π³ flag инициализируСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ true с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ATOMIC_FLAG_INIT. Π’ Ρ†ΠΈΠΊΠ»Π΅ worker() ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ пытаСтся Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ test_and_set() для Π·Π°Ρ…Π²Π°Ρ‚Π° Ρ„Π»Π°Π³Π°. Если Ρ„Π»Π°Π³ ΡƒΠΆΠ΅ установлСн, ΠΏΠΎΡ‚ΠΎΠΊ ΠΆΠ΄Π΅Ρ‚ ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ пытаСтся Π΅Π³ΠΎ Π·Π°Ρ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ. Когда Ρ„Π»Π°Π³ Π½Π°ΠΊΠΎΠ½Π΅Ρ† захватываСтся, ΠΏΠΎΡ‚ΠΎΠΊ выполняСт Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ clear() для освобоТдСния Ρ„Π»Π°Π³Π°.

ΠŸΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΡΠΉΡ‚Π΅ΡΡŒ ΠΊ участникам ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ события для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния Π² России – ΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈ
ΠŸΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΡΠΉΡ‚Π΅ΡΡŒ ΠΊ участникам ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ события для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния Π² России – ΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈ C3Days 2023. ΠœΠ΅Ρ€ΠΎΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ компания C3D Labs – ΡΠΎΠ·Π΄Π°Ρ‚Π΅Π»ΡŒ коммСрчСского гСомСтричСского ядра Π² России. ΠŸΡ€ΠΎΠ΄ΡƒΠΊΡ‚Ρ‹ C3D Labs ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΊΡ€ΡƒΠΏΠ½Π΅ΠΉΡˆΠΈΠ΅ отСчСствСнныС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ CAD, MCAD, CAM, PDM, CAE, CFD систСм, Π° Ρ‚Π°ΠΊΠΆΠ΅ AEC ΠΈ BIM Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ. Π‘Ρ€Π΅Π΄ΠΈ Π½ΠΈΡ…: Аскон (Компас-3D), Нанософт (nanoCAD), Renga Software (Renga) ΠΈ Π΄Ρ€. 25-26 мая Π² Π‘Π°Π½ΠΊΡ‚-ΠŸΠ΅Ρ‚Π΅Ρ€Π±ΡƒΡ€Π³Π΅ C3D Labs Π² ΡˆΠ΅ΡΡ‚ΠΎΠΉ Ρ€Π°Π· собСрёт Π²Π΅Π΄ΡƒΡ‰ΠΈΡ… ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠΎΠ² ΠΈ программистов Π² области БАПР, Π° Ρ‚Π°ΠΊΠΆΠ΅ спСциалистов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ хотят Ρ€Π°Π·Π²ΠΈΠ²Π°Ρ‚ΡŒ свои 3D-ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ соврСмСнных ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ². ВмСстС ΠΎΠ½ΠΈ обсудят Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ вопросы стратСгии импортозамСщСния, познакомятся с Π½ΠΎΠ²ΠΈΠ½ΠΊΠ°ΠΌΠΈ C3D Labs ΠΈ ΠΎΠΏΡ‹Ρ‚ΠΎΠΌ примСнСния Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ. Π’Π°ΠΊΠΆΠ΅ участники смогут ΠΎΡΠ²ΠΎΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ Π½Π°Π²Ρ‹ΠΊΠΈ Π½Π° мастСр-классах ΠΎΡ‚ экспСртов C3D Labs. Π—Π½Π°ΠΊΠΎΠΌΡŒΡ‚Π΅ΡΡŒ с ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ ΠΈ Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΡƒΠΉΡ‚Π΅ΡΡŒ Π½Π° сайтС: https://bit.ly/455AJdG УчастиС – бСсплатноС ΠΏΡ€ΠΈ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ рСгистрации. Π•Π Π˜Π”: 2VtzqwdcXkV

std::conditional_variable std::condition_variable являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈ позволяСт ΠΏΠΎΡ‚ΠΎΠΊΡƒ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ наступлСн
std::conditional_variable std::condition_variable являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈ позволяСт ΠΏΠΎΡ‚ΠΎΠΊΡƒ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ наступлСния ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ условия ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ΠΌ выполнСния. Основной ΠΌΠ΅Ρ‚ΠΎΠ΄ std::condition_variable - это wait(), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π½Π΅ оповСстит Π΅Π³ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° notify_one() ΠΈΠ»ΠΈ notify_all(). Когда вызываСтся wait(), Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΏΠΎΡ‚ΠΎΠΊ освобоТдаСт Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ, которая Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π·Π°Ρ…Π²Π°Ρ‡Π΅Π½Π° вмСстС с Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ wait(), ΠΈ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚, ΠΏΠΎΠΊΠ° Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π½Π΅ Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² оповСщСния. ПослС получСния оповСщСния ΠΏΠΎΡ‚ΠΎΠΊ пробуТдаСтся ΠΈ пытаСтся ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ Π·Π°Ρ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ, ΠΈ Ссли Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ захватываСтся, ΠΏΠΎΡ‚ΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ свою Ρ€Π°Π±ΠΎΡ‚Ρƒ. Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ создаСтся ΠΏΠΎΡ‚ΠΎΠΊ workerThread, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ сигнала ΠΎΡ‚ основного ΠΏΠΎΡ‚ΠΎΠΊΠ°. Основной ΠΏΠΎΡ‚ΠΎΠΊ засыпаСт Π½Π° 2 сСкунды, Π° Π·Π°Ρ‚Π΅ΠΌ устанавливаСт Ρ„Π»Π°Π³ ready Π² true ΠΈ ΠΎΠΏΠΎΠ²Π΅Ρ‰Π°Π΅Ρ‚ ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΠΉ ΠΏΠΎΡ‚ΠΎΠΊ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ notify_one(). workerThread пробуТдаСтся ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ сообщСниС Π² консоль.

Π”Π²ΠΈΠΆΠΎΠΊ C3D Vision управляСт ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ 3D-тСкстур Β«Π½Π° Π»Π΅Ρ‚ΡƒΒ» Texture3D прСдставляСт стандартный C++ класс ΠΈ слуТит для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ 3D-тСкстур. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΡΡ‚Π°Ρ‚ΡŒΡŽ

⁉️ Π₯ΠΎΡ‚ΠΈΡ‚Π΅ Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄ Π±Π΅Π· копипасты? Π₯ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ваши ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π±Ρ‹Π»ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΡ‹? βš‘οΈΠŸΡ€ΠΈΠ³Π»Π°ΡˆΠ°Π΅ΠΌ Π½Π° бСсплатный Π²Π΅Π±
⁉️ Π₯ΠΎΡ‚ΠΈΡ‚Π΅ Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄ Π±Π΅Π· копипасты? Π₯ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ваши ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π±Ρ‹Π»ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΡ‹? βš‘οΈΠŸΡ€ΠΈΠ³Π»Π°ΡˆΠ°Π΅ΠΌ Π½Π° бСсплатный Π²Π΅Π±ΠΈΠ½Π°Ρ€ ΠΎΠ½Π»Π°ΠΉΠ½-курса Β«Rust Developer. BasicΒ» Π² ΠžΡ‚ΡƒΡ. Π’Π΅ΠΌΠ° ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ ΡƒΡ€ΠΎΠΊΠ°: Β«ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ Rust: ΠΎΠ±ΠΎΠ±Ρ‰Ρ‘Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ Π² RustΒ» πŸ•° Π”Π°Ρ‚Π°: 22.05 (мск) Π² 20:00 На ΡƒΡ€ΠΎΠΊΠ΅ ΠΌΡ‹ рассмотрим статичСский ΠΈ динамичСский ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ Π² Rust, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΏΠΈΡΠ°Ρ‚ΡŒ красивыС ΠΈ эффСктивныС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ΠžΠ±ΡΡƒΠ΄ΠΈΠΌ, Ρ‡Π΅ΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Rust отличаСтся ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… языков. Рассмотрим извСстныС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΈ вмСстС Π½Π°ΠΉΠ΄Π΅ΠΌ для Π½ΠΈΡ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ приятно ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ. πŸ‘‰ РСгистрация Π½Π° Π²Π΅Π±ΠΈΠ½Π°Ρ€: https://otus.pw/CZ7Q/ ΠŸΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ процСсс обучСния ΠΈ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚Π΅ ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ! Π Π΅ΠΊΠ»Π°ΠΌΠ°. Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΎ Ρ€Π΅ΠΊΠ»Π°ΠΌΠΎΠ΄Π°Ρ‚Π΅Π»Π΅ Π½Π° сайтС www.otus.ru

#вопросы_с_собСсСдований Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ CI/CD ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ прСимущСства Π΄Π°Π΅Ρ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ? CI/CD ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΡƒΡŽ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡŽ ΠΈ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎΠ΅ Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅. Π­Ρ‚ΠΎ Π½Π°Π±ΠΎΡ€ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊ ΠΈ инструмСнтов, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния для Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ процСсса создания, тСстирования ΠΈ развСртывания ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. НСпрСрывная интСграция Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡŽ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΊΠΎΠ΄Π° ΠΎΡ‚ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Π² ΠΎΠ±Ρ‰ΠΈΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ часто, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, нСсколько Ρ€Π°Π· Π² дСнь. КаТдая интСграция запускаСт Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ процСсс сборки ΠΈ тСстирования для Ρ€Π°Π½Π½Π΅Π³ΠΎ обнаруТСния ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ. НСпрСрывноС Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ (ΠΈΠ»ΠΈ Continuous Delivery) Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΎ Π½Π° Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΡŽ процСсса развСртывания ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния Π² производствСнных срСдах. Он Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΡŽ шагов, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… для ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ, развСртывания ΠΈ настройки прилоТСния. Π’ΠΎΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ прСимущСства CI/CD для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² C++: 1. Π Π°Π½Π½Π΅Π΅ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ошибок. 2. Π‘ΠΎΠ»Π΅Π΅ быстрый Ρ†ΠΈΠΊΠ» ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ связи. 3. ΠšΠ°Ρ‡Π΅ΡΡ‚Π²ΠΎ ΠΈ Ρ€Π΅ΠΌΠΎΠ½Ρ‚ΠΎΠΏΡ€ΠΈΠ³ΠΎΠ΄Π½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π°. 4. БотрудничСство ΠΈ коммуникация ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ. 5. Автоматизация сборки, тСстирования ΠΈ развСртывания ΠΊΠΎΠ΄Π°. 6. НСпрСрывноС Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅. 7. ΠœΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒ.

Π§Ρ‚ΠΎ, Ссли Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ пСрСрос свою Π΄ΠΎΠ»ΠΆΠ½ΠΎΡΡ‚ΡŒ, Π½ΠΎ Π½Π΅ Ρ…ΠΎΡ‡Π΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€ΡƒΠΊΠΎΠ²ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΌ? О Ρ‚ΠΎΠΌ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ это Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ ΠΈ ΠΊΡƒΠ΄Π° Ρ€Π°
Π§Ρ‚ΠΎ, Ссли Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ пСрСрос свою Π΄ΠΎΠ»ΠΆΠ½ΠΎΡΡ‚ΡŒ, Π½ΠΎ Π½Π΅ Ρ…ΠΎΡ‡Π΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€ΡƒΠΊΠΎΠ²ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΌ? О Ρ‚ΠΎΠΌ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ это Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ ΠΈ ΠΊΡƒΠ΄Π° расти тСхничСскому спСциалисту с Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠΉ экспСртизой, рассказываСт АлСксандр Π§Π΅Ρ€ΡƒΡˆΠ½ΠΈΠΊΠΎΠ², IT-Π»ΠΈΠ΄Π΅Ρ€ Π“Π°Π·ΠΏΡ€ΠΎΠΌΠ±Π°Π½ΠΊΠ°. Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π½Π° Π₯Π°Π±Ρ€Π΅ β€” https://vk.cc/co4JUP

#вопросы_с_собСсСдований Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±Π°Ρ€ΡŒΠ΅Ρ€Ρ‹ памяти? Π’ C++ Π±Π°Ρ€ΡŒΠ΅Ρ€Ρ‹ памяти ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°ΠΌΠΈ синхронизации, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΌΠΈ для контроля порядка ΠΈ видимости ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ с ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ…. Они Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΡŽΡ‚, Ρ‡Ρ‚ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ порядкС ΠΈ Ρ‡Ρ‚ΠΎ эффСкты ΠΎΠ΄Π½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π²ΠΈΠ΄Π½Ρ‹ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌ прСдсказуСмым ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. БущСствуСт нСсколько Ρ‚ΠΈΠΏΠΎΠ² Π±Π°Ρ€ΡŒΠ΅Ρ€ΠΎΠ² памяти, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² C++: - Π‘Π°Ρ€ΡŒΠ΅Ρ€ приобрСтСния: Π“Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ пСрСупорядочСны Π΄ΠΎ Π±Π°Ρ€ΡŒΠ΅Ρ€Π°. - Π‘Π°Ρ€ΡŒΠ΅Ρ€ освобоТдСния: Π“Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ пСрСупорядочСны послС Π±Π°Ρ€ΡŒΠ΅Ρ€Π°. - ΠŸΠΎΠ»Π½Ρ‹ΠΉ Π±Π°Ρ€ΡŒΠ΅Ρ€ памяти: ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Π΅Ρ‚ сСмантику ΠΊΠ°ΠΊ приобрСтСния, Ρ‚Π°ΠΊ ΠΈ освобоТдСния. - Π‘Π°Ρ€ΡŒΠ΅Ρ€ чтСния-записи: Π“Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ чтСния Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ пСрСупорядочСны ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ опСрациями записи. Π’ C++ Π±Π°Ρ€ΡŒΠ΅Ρ€Ρ‹ памяти ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΈΠ»ΠΈ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ² синхронизации, прСдоставляСмых языком, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ std::atomic_thread_fence, std::atomic_signal_fence, ΠΈΠ»ΠΈ ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΠΎΠ² ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… состояния.

#вопросы_с_собСсСдований Как Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ систСму ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ² Π½Π° Π‘++? Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° систСмы ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Π½Π° C++ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя созданиС структуры, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅ΠΉ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ ΠΈ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Π²ΠΎ врСмя выполнСния. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΎΠ±Π·ΠΎΡ€ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… шагов: 1. ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ интСрфСйс ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ: Π­Ρ‚ΠΎΡ‚ интСрфСйс Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Π½Π°Π±ΠΎΡ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈΠ»ΠΈ классов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ. 2. API для ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ²: Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ API, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±Π»Π΅Π³Ρ‡Π°Π΅Ρ‚ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹ΠΌΠΈ модулями. 3. ДинамичСская Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ: Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ динамичСской Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Π²ΠΎ врСмя выполнСния. 4. ΠžΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ²: Π Π΅Π°Π»ΠΈΠ·ΡƒΠΉΡ‚Π΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ для обнаруТСния ΠΈ рСгистрации доступных ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Π²ΠΎ врСмя выполнСния. 5. Π–ΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» ΠΏΠ»Π°Π³ΠΈΠ½Π°: ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ ΠΆΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ², Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ, настройку ΠΈ очистку. 6. Бвязь с ΠΏΠ»Π°Π³ΠΈΠ½Π°ΠΌΠΈ: Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°ΠΉΡ‚Π΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ связи ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹ΠΌΠΈ модулями. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ достигнуто с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Ρ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², систСм событий ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ сообщСний, Π² зависимости ΠΎΡ‚ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ вашСй систСмы ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ². 7. ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ошибок: Π Π΅Π°Π»ΠΈΠ·ΡƒΠΉΡ‚Π΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ошибок для Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Ρ‚Π°ΠΊΠΈΡ… ситуаций, ΠΊΠ°ΠΊ нСудачная Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΏΠ»Π°Π³ΠΈΠ½Π°, нСсовмСстимыС вСрсии ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ² ΠΈΠ»ΠΈ ошибки Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ². Π­Ρ‚ΠΎ обСспСчиваСт Π½Π°Π΄Π΅ΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ систСмы ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ². Π‘Ρ‚ΠΎΠΈΡ‚ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° систСмы ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ слоТной Π·Π°Π΄Π°Ρ‡Π΅ΠΉ, ΠΈ Π΅ΡΡ‚ΡŒ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΈ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ этот процСсс. НСкоторыС популярныС Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ Π² C++ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Boost.Extension, Poco Foundation ΠΈ Qt's Plugin System. Π­Ρ‚ΠΈ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΈ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ абстракции ΠΈ инструмСнты для создания систСм ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ² ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΡΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ‚ΡŒ врСмя ΠΈ усилия Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ². НС Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ аспСкты бСзопасности ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ систСмы ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° внСшнСго ΠΊΠΎΠ΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ уязвимостям.

std::unordered_map std::unordered_map - это ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½Ρ‹ΠΉ класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдоставляСт структуру Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈΠ·Π²Π΅ΡΡ‚Π½ΡƒΡŽ ΠΊΠ°ΠΊ Ρ…ΡΡˆ-ΠΊΠ°Ρ€
std::unordered_map std::unordered_map - это ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½Ρ‹ΠΉ класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдоставляСт структуру Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈΠ·Π²Π΅ΡΡ‚Π½ΡƒΡŽ ΠΊΠ°ΠΊ Ρ…ΡΡˆ-ΠΊΠ°Ρ€Ρ‚Π° ΠΈΠ»ΠΈ Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ†Π°. Он доступСн начиная с C++11. ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ std::unordered_map Ρ…Ρ€Π°Π½ΠΈΡ‚ элСмСнты Π² Π²ΠΈΠ΄Π΅ ΠΏΠ°Ρ€ ΠΊΠ»ΡŽΡ‡-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π³Π΄Π΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ ΡƒΠ½ΠΈΠΊΠ°Π»Π΅Π½, Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ зависит ΠΎΡ‚ качСства Ρ…ΡΡˆ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ для сопоставлСния ΠΊΠ»ΡŽΡ‡Π΅ΠΉ с Π±Π°Π·ΠΎΠ²Ρ‹ΠΌΠΈ ΠΊΠΎΡ€Π·ΠΈΠ½Π°ΠΌΠΈ. std::unordered_map Π² качСствС ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ встроСнныС Ρ‚ΠΈΠΏΡ‹, Ρ‚ΠΈΠΏΡ‹, опрСдСляСмыС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ, ΠΈ Π΄Π°ΠΆΠ΅ структуры ΠΈΠ»ΠΈ классы. - Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ создаСм myMap, которая сопоставляСт Ρ†Π΅Π»Ρ‹Π΅ числа со строками. - Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ insert() Π²ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ 3 ΠΏΠ°Ρ€Ρ‹ ΠΊΠ»ΡŽΡ‡-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. - Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ доступ ΠΈ ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, связанноС с ΠΊΠ»ΡŽΡ‡ΠΎΠΌ 2, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ []. - Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ erase() удаляСм Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ с ΠΊΠ»ΡŽΡ‡ΠΎΠΌ 3. - Π”Π°Π»Π΅Π΅ ΠΌΡ‹ выполняСм ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎ ΠΊΠ°Ρ€Ρ‚Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ†ΠΈΠΊΠ»Π° for, Ρ‡Ρ‚ΠΎΠ±Ρ‹ вывСсти всС ΠΏΠ°Ρ€Ρ‹ ΠΊΠ»ΡŽΡ‡-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. - НаконСц, ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ find(), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, сущСствуСт Π»ΠΈ ΠΊΠ»ΡŽΡ‡ 2 Π² ΠΊΠ°Ρ€Ρ‚Π΅.

#вопросы_с_собСсСдований Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ ΠΊΠΎΠ΄Π°? КакиС Π·Π½Π°Π΅Ρ‚Π΅? ДинамичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ ΠΊΠΎΠ΄Π° C++ - это инструмСнт ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠΎΠ΄ C++ Π²ΠΎ врСмя выполнСния ΠΈΠ»ΠΈ исполнСния. Он выполняСт Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΈ инспСкции ΠΊΠΎΠ΄Π° для обнаруТСния ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, ошибок, ΡƒΡ‚Π΅Ρ‡Π΅ΠΊ памяти, ΡƒΠ·ΠΊΠΈΡ… мСст Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π²ΠΎ врСмя выполнСния. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ статичСского Π°Π½Π°Π»ΠΈΠ·Π° ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠΎΠ΄ Π±Π΅Π· Π΅Π³ΠΎ выполнСния, динамичСский Π°Π½Π°Π»ΠΈΠ· Π΄Π°Π΅Ρ‚ прСдставлСниС ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠΈ ΠΊΠΎΠ΄Π° Π²ΠΎ врСмя Π΅Π³ΠΎ выполнСния. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹: Valgrind: Π­Ρ‚ΠΎ ΠΌΠΎΡ‰Π½Ρ‹ΠΉ инструмСнт динамичСского Π°Π½Π°Π»ΠΈΠ·Π°, Π² Π½Π΅Π³ΠΎ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Memcheck, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π΅Ρ‚ ΡƒΡ‚Π΅Ρ‡ΠΊΠΈ памяти, Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹Π΅ обращСния ΠΊ памяти ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ошибки, связанныС с ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ. AddressSanitizer (ASan): Π­Ρ‚ΠΎ Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΎΡ€ ошибок памяти, встроСнный Π² компиляторы Clang ΠΈ GCC. Он ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ‚Π°ΠΊΠΈΠ΅ ошибки памяти, ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π±ΡƒΡ„Π΅Ρ€Π°, использованиС послС освобоТдСния ΠΈ Ρ‚.Π΄. ASan провСряСт ΠΊΠΎΠ΄ Π²ΠΎ врСмя компиляции, внСдряя ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π²ΠΎ врСмя выполнСния. Dr. Memory: Π­Ρ‚ΠΎ инструмСнт ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ памяти для Windows ΠΈ Linux. Он ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ‚Π°ΠΊΠΈΠ΅ ошибки, ΠΊΠ°ΠΊ ΡƒΡ‚Π΅Ρ‡ΠΊΠΈ памяти, Π½Π΅Π·Π°ΠΊΠΎΠ½Π½Ρ‹ΠΉ доступ ΠΊ памяти ΠΈ Π½Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ памяти. GNU Electric Fence: Π­Ρ‚ΠΎ инструмСнт ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ пСрСполнСния Π±ΡƒΡ„Π΅Ρ€Π° ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ошибки, связанныС с ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ. Он ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ‚Π΅Ρ…Π½ΠΈΠΊΡƒ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ "Π·Π°Ρ‰ΠΈΡ‚Π½Ρ‹Π΅ страницы" для Π·Π°Ρ‰ΠΈΡ‚Ρ‹ выдСлСния памяти ΠΈ обнаруТСния Π½Π΅Π·Π°ΠΊΠΎΠ½Π½Ρ‹Ρ… ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΉ.

#вопросы_с_собСсСдований Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ copy elision ΠΈ ΠΊΠΎΠ³Π΄Π° становится Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ? КакиС особСнности для Ρ€Π°Π·Π½Ρ‹Ρ… стандартов? copy elision - это Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ компилятора Π² C++, которая позволяСт ΡƒΡΡ‚Ρ€Π°Π½ΠΈΡ‚ΡŒ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ копирования ΠΈΠ»ΠΈ пСрСмСщСния ΠΏΡ€ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈΠ»ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Π­Ρ‚ΠΎ позволяСт компилятору ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ созданиС ΠΈ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ‡Π΅Π³ΠΎ ΠΊΠΎΠ΄ становится Π±ΠΎΠ»Π΅Π΅ эффСктивным. copy elision становится Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠΉ Π² сцСнариях, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… стандартом C++. Π‘ΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ стандарта называСтся ΠΏΡ€Π°Π²ΠΈΠ»ΠΎΠΌ "as-if", ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ позволяСт компилятору ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΎΠ½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ Ρ‚Π°ΠΊΠΎΠ΅ ΠΆΠ΅ наблюдаСмоС ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, ΠΊΠ°ΠΊ ΠΈ исходный ΠΊΠΎΠ΄. - C++98/03: copy elision Π½Π΅ являСтся ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ, Π½ΠΎ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Π° Π² качСствС ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ. RVO* ΠΈ NRVO* - ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ, выполняСмыС компиляторами. *(Return Value Optimization, Named Return Value Optimization) - C++11: ΠŸΡ€Π°Π²ΠΈΠ»Π° copy elision Π±Ρ‹Π»ΠΈ пСрСсмотрСны. RVO ΠΈ NRVO стали ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях. copy elision Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈ выбросС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ. - C++17: ΠŸΡ€Π°Π²ΠΈΠ»Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ копирования Π±Ρ‹Π»ΠΈ Π΅Ρ‰Π΅ Π±ΠΎΠ»Π΅Π΅ смягчСны. Π˜ΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ созданы ΠΈΠ»ΠΈ присвоСны Π±Π΅Π· нСобходимости выполнСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ пСрСмСщСния. Π­Ρ‚Π° оптимизация называСтся "mandatory copy elision". - C++20: ΠŸΡ€Π°Π²ΠΈΠ»Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ копирования ΠΎΡΡ‚Π°Π»ΠΈΡΡŒ Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π² C++17. Π’Π°ΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ хотя ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ являСтся ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΠΎΠΉ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ, ΠΎΠ½ΠΎ всС Π΅Ρ‰Π΅ зависит ΠΎΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ компилятором. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ограничСния Π² ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ copy elision. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π΅Ρ‘ использованиС для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ повСдСния ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ нСпСрСносимым Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… компиляторах ΠΈΠ»ΠΈ вСрсиях.

#вопросы_с_собСсСдований Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ RTTI? RTTI Ρ€Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚ΡΡ ΠΊΠ°ΠΊ "Run-Time Type Information" ΠΈ являСтся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ Π² C++, которая прСдоставляСт ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚ΠΈΠΏΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π²ΠΎ врСмя выполнСния. Она позволяСт Π²Π°ΠΌ динамичСски Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Ρ‚ΡŒ ΠΈ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΎ Ρ‚ΠΈΠΏΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π’ C++ информация ΠΎ Ρ‚ΠΈΠΏΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ прСдставлСна ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠΌ, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΌ классом type_info. Класс type_info являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ C++ ΠΈ опрСдСляСтся Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ <typeinfo>. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ RTTI Π² C++, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ RTTI, ΡƒΠΊΠ°Π·Π°Π² Ρ„Π»Π°Π³ компилятора -frtti ΠΈΠ»ΠΈ Π²ΠΊΠ»ΡŽΡ‡ΠΈΠ² Π΅Π³ΠΎ Π² настройках ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. RTTI особСнно ΠΏΠΎΠ»Π΅Π·Π΅Π½, ΠΊΠΎΠ³Π΄Π° Ρƒ вас Π΅ΡΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс ΠΈΠ»ΠΈ ссылка Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса. RTTI обСспСчиваСт Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ указатСля Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΉ класс ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ. Для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ dynamic_cast, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выполняСт динамичСскоС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΈΠ»ΠΈ ссылку Ρ†Π΅Π»Π΅Π²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, Ссли ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ, ΠΈΠ»ΠΈ Π½ΡƒΠ»Π΅Π²ΠΎΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ, ΠΈΠ»ΠΈ выбрасываСт ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, Ссли ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π½Π΅ ΡƒΠ΄Π°Π»ΠΎΡΡŒ.

std::any Π­Ρ‚ΠΎ функция C++17, которая прСдоставляСт бСзопасный с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния Ρ‚ΠΈΠΏΠΎΠ² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ для Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ любого Ρ‚ΠΈΠΏ
std::any Π­Ρ‚ΠΎ функция C++17, которая прСдоставляСт бСзопасный с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния Ρ‚ΠΈΠΏΠΎΠ² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ для Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ любого Ρ‚ΠΈΠΏΠ°. Она позволяСт Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ значСниями Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ std::variant. Однако, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ std::variant, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ явного указания допустимых Ρ‚ΠΈΠΏΠΎΠ², std::any ΠΌΠΎΠΆΠ΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ значСния любого Ρ‚ΠΈΠΏΠ°. Класс std::any являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ C++ ΠΈ опрСдСляСтся Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ <any>. std::any прСдоставляСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ type(), has_value(), reset(), emplace() ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Ρ‚ΡŒ Ρ…Ρ€Π°Π½ΠΈΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ создаСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ val, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ значСния любого Ρ‚ΠΈΠΏΠ°. ΠœΡ‹ присваиваСм val Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ значСния ΠΈ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΠΌ ΠΈΡ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ std::any_cast ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ‚ΠΈΠΏΠ° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ typeid. Однако ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Ρ‚ΠΈΠΏ (Π² Π΄Π°Π½Π½ΠΎΠΌ случаС std::any_cast<int>), Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ std::bad_any_cast, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ try-catch.

std::variant Π­Ρ‚ΠΎ функция C++17, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰Π°Ρ типобСзопасноС объСдинСниС, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅Π΅ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ значСниями Ρ€Π°
std::variant Π­Ρ‚ΠΎ функция C++17, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰Π°Ρ типобСзопасноС объСдинСниС, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅Π΅ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ значСниями Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅. Она являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ C++ ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ <variant>. Π¨Π°Π±Π»ΠΎΠ½Π½Ρ‹ΠΉ класс std::variant ΠΏΠΎΡ…ΠΎΠΆ Π½Π° ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ union, Π½ΠΎ с Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒΡŽ Ρ‚ΠΈΠΏΠΎΠ² ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ. ΠžΡΠ½ΠΎΠ²Π½Ρ‹ΠΌΠΈ функциями std::variant ΡΠ²Π»ΡΡŽΡ‚ΡΡ index(), valueless_by_exception(), operator=, emplace. Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ создаСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ var, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ значСния Ρ‚ΠΈΠΏΠΎΠ² int, float ΠΈΠ»ΠΈ std::string. ΠœΡ‹ присваиваСм var Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ значСния ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΈΡ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ std::get. Однако Ссли ΠΌΡ‹ попытаСмся ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Ρ‚ΠΈΠΏ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, std::get<int>(var), ΠΊΠΎΠ³Π΄Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ содСрТит std::string), это Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ std::bad_variant_access.

Curiously Recurring Template Pattern (CRTP) CRTP ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ использованиС шаблонов ΠΈ наслСдования для достиТСния Ρ„ΠΎΡ€ΠΌΡ‹ стат
Curiously Recurring Template Pattern (CRTP) CRTP ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ использованиС шаблонов ΠΈ наслСдования для достиТСния Ρ„ΠΎΡ€ΠΌΡ‹ статичСского ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠ°. Он позволяСт ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΌΡƒ классу Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ парамСтризуСтся самим ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΌ классом Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° шаблона. Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ класс Base являСтся ΡˆΠ°Π±Π»ΠΎΠ½Π½Ρ‹ΠΌ классом, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΉ класс (Derived1 ΠΈΠ»ΠΈ Derived2) Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° шаблона. Класс Base прСдоставляСт ΠΎΠ±Ρ‰ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ»ΠΈ интСрфСйс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ настроСн ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΌ классом. Ѐункция implementation() Π² Π±Π°Π·ΠΎΠ²ΠΎΠΌ классС опрСдСляСтся ΠΊΠ°ΠΊ Π½Π΅Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ. Π’Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ implementation() ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ static_cast<Derived*>(this) для привСдСния указатСля ΠΊ Ρ‚ΠΈΠΏΡƒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса. Π­Ρ‚ΠΎ позволяСт ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΌΡƒ классу ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ свою ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ implementation(). Когда функция implementation() вызываСтся Π½Π° экзСмплярС ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса, ΠΎΠ½Π° Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π² этом ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΌ классС.

You Ain't Gonna Need It (YAGNI) You Ain't Gonna Need It (Π’Π°ΠΌ это Π½Π΅ понадобится) - это ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ поощряСт простоту ΠΈ ΠΈΠ·Π±Π΅Π³Π°Π΅Ρ‚ Ρ‡Ρ€Π΅Π·ΠΌΠ΅Ρ€Π½ΠΎΠΉ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΈ. ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ YAGNI ΠΏΠΎΠ±ΡƒΠΆΠ΄Π°Π΅Ρ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚, Π° Π½Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, которая ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ, Π½ΠΎ Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π½Π΅ Π½ΡƒΠΆΠ½Π°. Π’ΠΎΡ‚ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ аспСкты примСнСния ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° YAGNI: - Минимализм: ΠŸΠΈΡˆΠΈΡ‚Π΅ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ объСм ΠΊΠΎΠ΄Π°, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ для выполнСния нСпосрСдствСнных Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ. - Π˜Π·Π±Π΅Π³Π°ΠΉΡ‚Π΅ спСкулятивной Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ: НС Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠΉΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π° основС спСкулятивных Π±ΡƒΠ΄ΡƒΡ‰ΠΈΡ… Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ. - Π Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³: ΠŸΠ΅Ρ€Π΅Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΠΉΡ‚Π΅ ΠΊΠΎΠ΄, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ всС Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅ ΠΈΠ»ΠΈ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π­Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Ρ‹ΠΌ ΠΈ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ для обслуТивания. - Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°, управляСмая тСстами: ΠŸΠΈΡˆΠΈΡ‚Π΅ тСсты для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π° Π½Π΅ ΠΎΠ±ΡˆΠΈΡ€Π½ΠΎΠ³ΠΎ тСстирования гипотСтичСских Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… возмоТностСй. ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π½Π΅ Π² ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΈ гибкости, Π° Π² принятии обоснованных Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ, основанных Π½Π° Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… трСбованиях.