Как ΠΏΡ€Π΅Π²Π΅Π΄ΠΎΡ…ΠΌΠ΅ 10 ΠΌΠΈΠ»ΠΈΠΎΠ½Π° Ρ€Π΅Π΄Π° ΠΊΠΎΠ΄ Π½Π° C++ към стандарт C++14 (Π° слСд Ρ‚ΠΎΠ²Π° ΠΈ към C++17)

ΠŸΡ€Π΅Π΄ΠΈ извСстно Π²Ρ€Π΅ΠΌΠ΅ (СсСнта Π½Π° 2016), ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° Π½Π° Π½ΠΎΠ²Π° вСрсия Π½Π° Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΡ‡Π½Π°Ρ‚Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅, Π² Π΅ΠΊΠΈΠΏΠ° Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° възникна Π²ΡŠΠΏΡ€ΠΎΡΡŠΡ‚ Π·Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ°Ρ‚Π° Π½Π° новия стандарт C++14 Π² нашия ΠΊΠΎΠ΄. ΠŸΡ€Π΅Ρ…ΠΎΠ΄ΡŠΡ‚ към новия стандарт, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Ρ…ΠΌΠ΅, Ρ‰Π΅ΡˆΠ΅ Π΄Π° Π½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ Π΄Π° пишСм ΠΌΠ½ΠΎΠ³ΠΎ Π½Π΅Ρ‰Π° ΠΏΠΎ-Π΅Π»Π΅Π³Π°Π½Ρ‚Π½ΠΎ, ΠΏΠΎ-просто ΠΈ ΠΏΠΎ-Π½Π°Π΄Π΅ΠΆΠ΄Π½ΠΎ, улСснявайки ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ°Ρ‚Π° ΠΈ консСрвиранСто Π½Π° ΠΊΠΎΠ΄Π°. И Π² ΠΏΡ€Π΅Π²ΠΎΠ΄Π° няма Π½ΠΈΡ‰ΠΎ Скстраординарно, Π°ΠΊΠΎ Π½Π΅ сС Π²Π·Π΅ΠΌΠ°Ρ‚ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄ ΠΌΠ°Ρ‰Π°Π±ΠΈΡ‚Π΅ Π½Π° ΠΊΠΎΠ΄ΠΎΠ²Π°Ρ‚Π° Π±Π°Π·Π° ΠΈ спСцифичнитС характСристики Π½Π° нашия ΠΊΠΎΠ΄.

Π—Π° Ρ‚Π΅Π·ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π΅ знаят, 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ – Ρ‚ΠΎΠ²Π° Π΅ срСда Π·Π° Π±ΡŠΡ€Π·ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π°Π½Π΅ Π½Π° кросплатформСни бизнСс прилоТСния ΠΈ runtime Π·Π° тяхното изпълнСниС Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ОБ ΠΈ Π‘Π£Π‘Π”. Π’ ΠΎΠ±Ρ‰ΠΈ Π»ΠΈΠ½ΠΈΠΈ, Π² ΡΡŠΡΡ‚Π°Π²Π° Π½Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π° Π²Π»ΠΈΠ·Π°Ρ‚:

НиС сС стараСм максимално Π΄Π° пишСм Π΅Π΄ΠΈΠ½ ΠΊΠΎΠ΄ Π·Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ОБ β€” ΠΊΠΎΠ΄ΠΎΠ²Π°Ρ‚Π° Π±Π°Π·Π° Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π° Π΅ ΠΎΠ±Ρ‰Π° Π½Π° 99%, ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΡŠΡ‚ β€” ΠΎΠΊΠΎΠ»ΠΎ 95%. Π’Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΡ‡Π½Π°Ρ‚Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ Π΅ ΠΏΡ€Π΅Π΄ΠΈΠΌΠ½ΠΎ написана Π½Π° C++ ΠΈ ΠΏΠΎ-Π΄ΠΎΠ»Ρƒ са ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»Π½ΠΈΡ‚Π΅ характСристики Π½Π° ΠΊΠΎΠ΄Π°:

  • 10 ΠΌΠΈΠ»ΠΈΠΎΠ½Π° Ρ€Π΅Π΄Π° C++ ΠΊΠΎΠ΄,
  • 14 хиляди Ρ„Π°ΠΉΠ»Π°,
  • 60 хиляди класа,
  • ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½ ΠΌΠΈΠ»ΠΈΠΎΠ½ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°.

И всичко Ρ‚ΠΎΠ²Π° Ρ‚Ρ€ΡΠ±Π²Π°ΡˆΠ΅ Π΄Π° бъдС ΠΏΡ€Π΅Π²Π΅Π΄Π΅Π½ΠΎ Π½Π° C++14. Π—Π° Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊ Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ…ΠΌΠ΅ ΠΈ с ΠΊΠ°ΠΊΠ²ΠΈ прСдизвикатСлства сС ΡΠ±Π»ΡŠΡΠΊΠ°Ρ…ΠΌΠ΅ Π² процСса, Ρ‰Π΅ Ρ€Π°Π·ΠΊΠ°ΠΆΠ΅ΠΌ днСс.

Как ΠΏΡ€Π΅Π²Π΅Π΄ΠΎΡ…ΠΌΠ΅ 10 ΠΌΠΈΠ»ΠΈΠΎΠ½Π° Ρ€Π΅Π΄Π° ΠΊΠΎΠ΄ Π½Π° C++ към стандарт C++14 (Π° слСд Ρ‚ΠΎΠ²Π° ΠΈ към C++17)

ДисклСймСр

Всичко, написано ΠΏΠΎ-Π΄ΠΎΠ»Ρƒ Π·Π° Π±Π°Π²Π½ΠΎΡ‚ΠΎ/Π±ΡŠΡ€Π·ΠΎΡ‚ΠΎ изпълнСниС ΠΈ (Π½Π΅)голямото ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚ ΠΎΡ‚ стандартнитС класовС Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΠΎΠ·Π½Π°Ρ‡Π°Π²Π° Π΅Π΄Π½ΠΎ: Ρ‚ΠΎΠ²Π° Π΅ Π²Π°Π»ΠΈΠ΄Π½ΠΎ ЗА НАБ. Π’ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΅ стандартнитС Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π° работят Π½Π°ΠΉ-Π΄ΠΎΠ±Ρ€Π΅ Π·Π° Π²Π°ΡˆΠΈΡ‚Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ. НиС ΠΎΠ±Π°Ρ‡Π΅ сС Ρ€ΡŠΠΊΠΎΠ²ΠΎΠ΄Π΅Ρ…ΠΌΠ΅ ΠΎΡ‚ собствСнитС си Π½ΡƒΠΆΠ΄ΠΈ: Π²Π·Π΅Ρ…ΠΌΠ΅ Ρ‚ΠΈΠΏΠΈΡ‡Π½ΠΈ Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ Π½Π°ΡˆΠΈΡ‚Π΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈ, пуснахмС Π³ΠΈ ΠΏΡ€Π΅Π· стандартни сцСнарии, Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°Ρ…ΠΌΠ΅ производитСлността, ΠΎΠ±Π΅ΠΌΠ° Π½Π° потрСбяСмата ΠΏΠ°ΠΌΠ΅Ρ‚ ΠΈ Ρ‚.Π½., ΠΈ оцСнявахмС – удовлСтворяват Π»ΠΈ Π½ΠΈ ΠΈ Π½Π°ΡˆΠΈΡ‚Π΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈ Ρ‚Π΅Π·ΠΈ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ ΠΈΠ»ΠΈ Π½Π΅. И Π²Π·Π΅ΠΌΠ°Ρ…ΠΌΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ въз основа Π½Π° Ρ‚ΠΎΠ²Π°.

Какво ΠΈΠΌΠ°Ρ…ΠΌΠ΅

ΠŸΡŠΡ€Π²ΠΎΠ½Π°Ρ‡Π°Π»Π½ΠΎ ΠΏΠΈΡˆΠ΅Ρ…ΠΌΠ΅ ΠΊΠΎΠ΄Π° Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ 8 Π² Microsoft Visual Studio. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΡŠΡ‚ Π·Π°ΠΏΠΎΡ‡Π½Π° Π² Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ Π½Π° 2000-Ρ‚Π΅ ΠΈ ΠΈΠΌΠ°Ρ…ΠΌΠ΅ вСрсия само Π·Π° Windows. Π Π°Π·Π±ΠΈΡ€Π° сС, ΠΎΡ‚Ρ‚ΠΎΠ³Π°Π²Π° ΠΊΠΎΠ΄ΡŠΡ‚ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ сС Ρ€Π°Π·Π²ΠΈ, ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΈ бяха напълно прСнаписани. Но ΠΊΠΎΠ΄ΡŠΡ‚ бСшС написан ΠΏΠΎ стандарт ΠΎΡ‚ 1998 Π³ΠΎΠ΄ΠΈΠ½Π°, ΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, дСснитС Π°Π³ΠΎΠ»Π½ΠΈ скоби бяха Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈ с ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΈ, Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅ компилацията Π΄Π° ΠΏΡ€Π΅ΠΌΠΈΠ½Π΅ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ, Ρ‚Π°ΠΊΠ°:

vector<vector > IntV;

ΠŸΡ€Π΅Π· 2006 Π³ΠΎΠ΄ΠΈΠ½Π°, с ΠΈΠ·Π»ΠΈΠ·Π°Π½Π΅Ρ‚ΠΎ Π½Π° вСрсия 8.1 Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°, Π·Π°ΠΏΠΎΡ‡Π½Π°Ρ…ΠΌΠ΅ Π΄Π° ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°ΠΌΠ΅ Linux ΠΈ ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Ρ…ΠΌΠ΅ Π½Π° външна стандартна Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° STLPort. Π•Π΄Π½Π° ΠΎΡ‚ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΈΡ‚Π΅ Π·Π° ΠΏΡ€Π΅Ρ…ΠΎΠ΄Π° бСшС Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° с ΡˆΠΈΡ€ΠΎΠΊΠΈ Π½ΠΈΠ·ΠΎΠ²Π΅. Π’ нашия ΠΊΠΎΠ΄ навсякъдС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ std::wstring, Π±Π°Π·ΠΈΡ€Π°Π½ Π½Π° Ρ‚ΠΈΠΏΠ° wchar_t. НСговият Ρ€Π°Π·ΠΌΠ΅Ρ€ Π² Windows Π΅ 2 Π±Π°ΠΉΡ‚Π°, Π° Π² Linux ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Π΅ 4 Π±Π°ΠΉΡ‚Π°. Π’ΠΎΠ²Π° водСшС Π΄ΠΎ Π½Π΅ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ Π½Π° Π½Π°ΡˆΠΈΡ‚Π΅ Π±ΠΈΠ½Π°Ρ€Π½ΠΈ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΈ ΡΡŠΡ€Π²ΡŠΡ€Π°, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈΡ‚Π΅ пСрсистСнтни Π΄Π°Π½Π½ΠΈ. ΠžΠΏΡ†ΠΈΠΈΡ‚Π΅ Π½Π° gcc позволяват Π΄Π° сС Π·Π°Π΄Π°Π΄Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€ΡŠΡ‚ Π½Π° wchar_t ΠΏΡ€ΠΈ компилация ΡΡŠΡ‰ΠΎ Π΄Π° Π΅ 2 Π±Π°ΠΉΡ‚Π°, Π½ΠΎ Ρ‚ΠΎΠ³Π°Π²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° Π·Π°Π±Ρ€Π°Π²ΠΈΠΌ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° стандартната Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΎΡ‚ компилятора, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ тя ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° glibc, Π° тя ΠΎΡ‚ своя страна Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π° Π·Π° 4-Π±Π°ΠΉΡ‚Π½Π° wchar_t. Π”Ρ€ΡƒΠ³ΠΈ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΈ бяха ΠΏΠΎ-качСствСната рСализация Π½Π° стандартнитС класовС, ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ°Ρ‚Π° Π½Π° Ρ…Π΅Ρˆ-Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ ΠΈ Π΄ΠΎΡ€ΠΈ Π΅ΠΌΡƒΠ»Π°Ρ‚ΠΎΡ€ΠΈ Π½Π° сСмантика Π·Π° прСмСстванС Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ…ΠΌΠ΅. И ΠΎΡ‰Π΅ Π΅Π΄Π½Π° ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°, ΠΊΠ°Π·Π²Π°Ρ‚ β€žΠΏΠΎΡΠ»Π΅Π΄Π½Π°, Π½ΠΎ Π½Π΅ ΠΈ ΠΏΠΎ Π²Π°ΠΆΠ½ΠΎΡΡ‚β€œ, бСшС производитСлността Π½Π° Π½ΠΈΠ·ΠΎΠ²Π΅Ρ‚Π΅. Π˜ΠΌΠ°Ρ…ΠΌΠ΅ собствСн клас Π·Π° Π½ΠΈΠ·ΠΎΠ²Π΅, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π·Π°Ρ€Π°Π΄ΠΈ спСцификата Π½Π° нашия софтуСр Π½ΠΈΠ·ΠΎΠ²ΠΈΡ‚Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈ Π·Π° нас Ρ‚ΠΎΠ²Π° Π΅ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½ΠΎ.

ΠΠ°ΡˆΠΈΡΡ‚ Π½ΠΈΠ· Π΅ Π±Π°Π·ΠΈΡ€Π°Π½ Π½Π° ΠΈΠ΄Π΅ΠΈΡ‚Π΅ Π·Π° оптимизация Π½Π° Π½ΠΈΠ·ΠΎΠ²Π΅Ρ‚Π΅, ΠΈΠ·ΠΊΠ°Π·Π°Π½ΠΈ ΠΎΡ‰Π΅ Π² Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ Π½Π° 2000-Ρ‚Π΅ АндрСй АлСксандрСску. По-късно, ΠΊΠΎΠ³Π°Ρ‚ΠΎ АлСксандрСску Ρ€Π°Π±ΠΎΡ‚Π΅ΡˆΠ΅ във Facebook, ΠΏΠΎ Π½Π΅Π³ΠΎΠ²Π° ΠΈΠ½ΠΈΡ†ΠΈΠ°Ρ‚ΠΈΠ²Π° Π² Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Facebook бСшС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π° стринг, която Ρ€Π°Π±ΠΎΡ‚ΠΈ Π½Π° ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈ (Π²ΠΈΠΆΡ‚Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° folly).

Π’ нашия стринг бяха ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ Π΄Π²Π΅ основни Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Π·Π° оптимизация:

  1. Π—Π° ΠΊΡ€Π°Ρ‚ΠΊΠΈ стойности сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ΅Π½ Π±ΡƒΡ„Π΅Ρ€ Π² самия ΠΎΠ±Π΅ΠΊΡ‚ Π½Π° стринга (Π½Π΅ изискващ Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½Π° алокация Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚).
  2. Π—Π° всички останали сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΌΠ΅Ρ…Π°Π½ΠΈΠΊΠ°Ρ‚Π° Copy On Write. Бтойността Π½Π° стринга сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π° Π½Π° Π΅Π΄Π½ΠΎ място, ΠΏΡ€ΠΈ присвояванС/модификация сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° брояч Π½Π° Ρ€Π΅Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈ.

Π—Π° Π΄Π° ускорим компилацията Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°, ΠΈΠ·ΠΊΠ»ΡŽΡ‡ΠΈΡ…ΠΌΠ΅ ΠΎΡ‚ нашия Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π½Π° STLPort рСализацията Π½Π° ΠΏΠΎΡ‚ΠΎΡ†ΠΈΡ‚Π΅ (ΠΊΠΎΠΈΡ‚ΠΎ Π½Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ…ΠΌΠ΅), ΠΊΠΎΠ΅Ρ‚ΠΎ Π½ΠΈ Π΄Π°Π΄Π΅ ускорСниС Π½Π° компилацията ΠΎΡ‚ ΠΎΠΊΠΎΠ»ΠΎ 20%. ВпослСдствиС Π½ΠΈ сС Π½Π°Π»ΠΎΠΆΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΎ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Boost. Boost Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΏΠΎΡ‚ΠΎΡ†ΠΈ, ΠΏΠΎ-спСциално Π² своитС сСрвисни API (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π·Π° Π»ΠΎΠ³Π²Π°Π½Π΅), Π·Π°Ρ‚ΠΎΠ²Π° Π½ΠΈ сС Π½Π°Π»ΠΎΠΆΠΈ Π΄Π° Π³ΠΎ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°ΠΌΠ΅, ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π²Π°ΠΉΠΊΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΠΎΡ‚ΠΎΡ†ΠΈ ΠΎΡ‚ Π½Π΅Π³ΠΎ. Π’ΠΎΠ²Π°, ΠΎΡ‚ своя страна, Π·Π°Ρ‚Ρ€ΡƒΠ΄Π½ΡΠ²Π°ΡˆΠ΅ ΠΏΡ€Π΅Ρ…ΠΎΠ΄Π° Π½ΠΈ към Π½ΠΎΠ²ΠΈ вСрсии Π½Π° Boost.

ВрСтият ΠΏΡŠΡ‚

ΠŸΡ€ΠΈ ΠΏΡ€Π΅Ρ…ΠΎΠ΄Π° към стандарта C++14 Ρ€Π°Π·Π³Π»Π΅ΠΆΠ΄Π°Ρ…ΠΌΠ΅ слСднитС ΠΎΠΏΡ†ΠΈΠΈ:

  1. Π”Π° ΠΏΠΎΠ²Π΄ΠΈΠ³Π½Π΅ΠΌ модифицирания ΠΎΡ‚ нас STLPort Π΄ΠΎ стандарта C++14. ΠžΠΏΡ†ΠΈΡΡ‚Π° Π΅ ΠΌΠ½ΠΎΠ³ΠΎ слоТна, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ°Ρ‚Π° Π½Π° STLPort бСшС ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‚Π΅Π½Π° ΠΏΡ€Π΅Π· 2010 Π³. ΠΈ Ρ‰Π΅ΡˆΠ΅ Π΄Π° трябва Π΄Π° ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°ΠΌΠ΅ цСлия ΠΌΡƒ ΠΊΠΎΠ΄ сами.
  2. ΠŸΡ€Π΅Ρ…ΠΎΠ΄ Π½Π° Π΄Ρ€ΡƒΠ³Π° рСализация Π½Π° STL, ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠ° с C++14. Π‘ΠΈΠ»Π½ΠΎ ΠΆΠ΅Π»Π°Ρ‚Π΅Π»Π½ΠΎ Π΅ Ρ‚Π°Π·ΠΈ рСализация Π΄Π° бъдС Π·Π° Windows ΠΈ Linux.
  3. Π”Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π²Π³Ρ€Π°Π΄Π΅Π½Π° Π² ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡ ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΏΡ€ΠΈ компилация Π·Π° всяка ОБ.

ΠŸΡŠΡ€Π²ΠΈΡΡ‚ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ бСшС ΠΎΡ‚Ρ…Π²ΡŠΡ€Π»Π΅Π½ Π²Π΅Π΄Π½Π°Π³Π° ΠΏΠΎΡ€Π°Π΄ΠΈ ΠΏΡ€Π΅ΠΊΠ°Π»Π΅Π½ΠΎ голям ΠΎΠ±Π΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°.

Няколко Π²Ρ€Π΅ΠΌΠ΅ мислСхмС ΠΏΠΎ втория Π²Π°Ρ€ΠΈΠ°Π½Ρ‚; ΠΊΠ°Ρ‚ΠΎ ΠΊΠ°Π½Π΄ΠΈΠ΄Π°Ρ‚ Ρ€Π°Π·Π³Π»Π΅ΠΆΠ΄Π°Ρ…ΠΌΠ΅ libc++, Π½ΠΎ ΠΏΠΎ ΠΎΠ½ΠΎΠ²Π° Π²Ρ€Π΅ΠΌΠ΅ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π΅ΡˆΠ΅ ΠΏΠΎΠ΄ Windows. Π—Π° Π΄Π° ΠΏΠΎΡ€Ρ‚Π½Π΅ΠΌ libc++ Π½Π° Windows, Ρ‰Π΅ΡˆΠ΅ Π΄Π° трябва Π΄Π° ΡΠ²ΡŠΡ€ΡˆΠΈΠΌ ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π±ΠΎΡ‚Π° β€” Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄Π° пишСм сами всичко, ΡΠ²ΡŠΡ€Π·Π°Π½ΠΎ с ΠΏΠΎΡ‚ΠΎΡ†ΠΈΡ‚Π΅, синхронизацията Π½Π° ΠΏΠΎΡ‚ΠΎΠΊΠΈΡ‚Π΅ ΠΈ атомарността, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π² libc++ Π² Ρ‚Π΅Π·ΠΈ области сС използвашС POSIX API.

И Π½ΠΈΠ΅ ΠΈΠ·Π±Ρ€Π°Ρ…ΠΌΠ΅ трСтия ΠΏΡŠΡ‚.

ΠŸΡ€Π΅Ρ…ΠΎΠ΄

И Ρ‚Π°ΠΊΠ°, Π½ΠΈ ΠΏΡ€Π΅Π΄ΡΡ‚ΠΎΠ΅ΡˆΠ΅ Π΄Π° Π·Π°ΠΌΠ΅Π½ΠΈΠΌ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° STLPort с Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π½Π° ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€ΠΈ (Visual Studio 2015 Π·Π° Windows, gcc 7 Π·Π° Linux, clang 8 Π·Π° macOS).

Π—Π° щастиС, Π½Π°ΡˆΠΈΡΡ‚ ΠΊΠΎΠ΄ бСшС написан основно ΠΏΠΎ насоки ΠΈ Π½Π΅ използвашС всякакви Ρ…ΠΈΡ‚Ρ€ΠΈ Ρ‚Ρ€ΠΈΠΊΠΎΠ²Π΅, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ миграцията към Π½ΠΎΠ²ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΏΡ€ΠΎΡ‚Π΅Ρ‡Π΅ сравнитСлно Π³Π»Π°Π΄ΠΊΠΎ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° скриптовС, замСнящи Π² ΠΈΠ·Ρ…ΠΎΠ΄Π½ΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ ΠΈΠΌΠ΅Π½Π°Ρ‚Π° Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅, класовС, пространства ΠΎΡ‚ ΠΈΠΌΠ΅Π½Π° ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π²Π°Π½ΠΈΡ. ΠœΠΈΠ³Ρ€Π°Ρ†ΠΈΡΡ‚Π° засСгна 10 000 ΠΈΠ·Ρ…ΠΎΠ΄Π½ΠΈ Ρ„Π°ΠΉΠ»Π° (ΠΎΡ‚ 14 000). wchar_t бСшС Π·Π°ΠΌΠ΅Π½Π΅Π½ с char16_t; Ρ€Π΅ΡˆΠΈΡ…ΠΌΠ΅ Π΄Π° сС ΠΎΡ‚ΠΊΠ°ΠΆΠ΅ΠΌ ΠΎΡ‚ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° wchar_t, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ char16_t Π½Π° всички ОБ Π·Π°Π΅ΠΌΠ° 2 Π±Π°ΠΉΡ‚Π° ΠΈ Π½Π΅ разваля ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚Ρ‚Π° Π½Π° ΠΊΠΎΠ΄Π° ΠΌΠ΅ΠΆΠ΄Ρƒ Windows ΠΈ Linux.

НС ΠΌΠΈΠ½Π° ΠΈ Π±Π΅Π· ΠΌΠ°Π»ΠΊΠΈ ΠΏΡ€ΠΈΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ. НапримСр, Π² STLPort ΠΈΡ‚Π΅Ρ€ΠΎΡ‚ΠΎΡ€ΡŠΡ‚ моТСшС нСявно Π΄Π° сС каства Π² ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π» към Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚, ΠΈ Π² някои части Π½Π° нашия ΠΊΠΎΠ΄ Ρ‚ΠΎΠ²Π° бСшС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΎ. Π’ Π½ΠΎΠ²ΠΈΡ‚Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π° Π²Π΅Ρ‡Π΅ Π½Π΅ бСшС възмоТно, ΠΈ Ρ‚Π΅Π·ΠΈ мСста Ρ‚Ρ€ΡΠ±Π²Π°ΡˆΠ΅ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ ΠΈ прСнаписвани Ρ€ΡŠΡ‡Π½ΠΎ.

И Ρ‚Π°ΠΊΠ°, миграцията Π½Π° ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΈΠΊΠ»ΡŽΡ‡ΠΈ, ΠΊΠΎΠ΄ΡŠΡ‚ сС ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π° Π·Π° всички ОБ. Π’Ρ€Π΅ΠΌΠ΅ Π΅ Π·Π° тСстовС.

ВСстовСтС слСд ΠΏΡ€Π΅Ρ…ΠΎΠ΄Π° ΠΏΠΎΠΊΠ°Π·Π°Ρ…Π° спад Π² производитСлността (Π½Π° мСста Π΄ΠΎ 20-30%) ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚ (Π΄ΠΎ 10-15%) Π² сравнСниС с ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½Π°Ρ‚Π° вСрсия Π½Π° ΠΊΠΎΠ΄Π°. Π’ΠΎΠ²Π° бСшС, Π² частност, ΡΠ²ΡŠΡ€Π·Π°Π½ΠΎ с Π½Π΅ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»Π½Π°Ρ‚Π° Ρ€Π°Π±ΠΎΡ‚Π° Π½Π° стандартнитС Π½ΠΈΠ·ΠΎΠ²Π΅. Π—Π°Ρ‚ΠΎΠ²Π° ΠΎΡ‚Π½ΠΎΠ²ΠΎ Ρ‚Ρ€ΡΠ±Π²Π°ΡˆΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ наш собствСн, Π»Π΅ΠΊΠΎ ΠΏΡ€Π΅Ρ€Π°Π±ΠΎΡ‚Π΅Π½ Π½ΠΈΠ·.

Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° сС появи интСрСсна особСност Π½Π° рСализацията Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΡ‚Π΅ Π² Π²Π³Ρ€Π°Π΄Π΅Π½ΠΈΡ‚Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ: ΠΏΡ€Π°Π·Π½ΠΈΡ‚Π΅ (Π±Π΅Π· Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ) std::map ΠΈ std::set ΠΎΡ‚ Π²Π³Ρ€Π°Π΄Π΅Π½ΠΈΡ‚Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π°Π»ΠΎΠΊΠΈΡ€Π°Ρ…Π° ΠΏΠ°ΠΌΠ΅Ρ‚. А Π² нашия ΠΊΠΎΠ΄ ΠΏΠΎΡ€Π°Π΄ΠΈ особСноститС Π½Π° рСализацията Π½Π° мСста сС ΡΡŠΠ·Π΄Π°Π²Π°Ρ‚ доста ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€Π°Π·Π½ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² Ρ‚ΠΈΠΏΠ°. Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΠΈΡ‚Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ Π°Π»ΠΎΠΊΠΈΡ€Π°Ρ‚ ΠΌΠ°Π»ΠΊΠΎ ΠΏΠ°ΠΌΠ΅Ρ‚, Π·Π° Π΅Π΄ΠΈΠ½ ΠΊΠΎΡ€Π΅Π½ΠΎΠ² Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚, Π½ΠΎ Π·Π° нас Ρ‚ΠΎΠ²Π° сС ΠΎΠΊΠ°Π·Π° ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½ΠΎ – Π² Ρ€Π΅Π΄ΠΈΡ†Π° сцСнарии Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ Π½ΠΈ спадна производитСлността ΠΈ нарасна ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚ (Π² сравнСниС с STLPort). Π—Π°Ρ‚ΠΎΠ²Π° Π·Π°ΠΌΠ΅Π½ΠΈΡ…ΠΌΠ΅ Π² нашия ΠΊΠΎΠ΄ Ρ‚Π΅Π·ΠΈ Π΄Π²Π° Ρ‚ΠΈΠΏΠ° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ ΠΎΡ‚ Π²Π³Ρ€Π°Π΄Π΅Π½ΠΈΡ‚Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ с тяхната рСализация ΠΎΡ‚ Boost, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ Ρ‚Π΅Π·ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ нямат Ρ‚Π°ΠΊΠ°Π²Π° особСност, ΠΈ Ρ‚ΠΎΠ²Π° Ρ€Π΅ΡˆΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с забавянСто ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΎΡ‚ΠΎ ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚.

ΠšΠ°ΠΊΡ‚ΠΎ чСсто сС случва слСд ΠΌΠ°Ρ‰Π°Π±Π½ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π² Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ, ΠΏΡŠΡ€Π²Π°Ρ‚Π° итСрация Π½Π° ΠΈΠ·Ρ…ΠΎΠ΄Π½ΠΈΡ†ΠΈΡ‚Π΅ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π΅ΡˆΠ΅ Π±Π΅Π· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ, ΠΈ Ρ‚ΡƒΠΊ Π½ΠΈ бСшС ΠΎΡ‚ ΠΏΠΎΠ»Π·Π°, Π² частност, ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ°Ρ‚Π° Π½Π° ΠΎΡ‚Π»Π°Π΄ΡŠΡ‡Π½ΠΈ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΈ Π² Windows рСализцията. Π‘Ρ‚ΡŠΠΏΠΊΠ° ΠΏΠΎ ΡΡ‚ΡŠΠΏΠΊΠ° Π½Π°ΠΏΡ€Π΅Π΄Π²Π°Ρ…ΠΌΠ΅, ΠΈ Π΄ΠΎ ΠΏΡ€ΠΎΠ»Π΅Ρ‚Ρ‚Π° Π½Π° 2017 (вСрсия 8.3.11 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΡ) миграцията бСшС Π·Π°Π²ΡŠΡ€ΡˆΠ΅Π½Π°.

Π˜Ρ‚ΠΎΠ³

ΠŸΡ€Π΅Ρ…ΠΎΠ΄ΡŠΡ‚ към стандарт C++14 ΠΎΡ‚Π½Π΅ ΠΎΠΊΠΎΠ»ΠΎ 6 мСсСца. По-голямата част ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ ΠΏΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Ρ€Π°Π±ΠΎΡ‚Π΅ΡˆΠ΅ Π΅Π΄ΠΈΠ½ (Π½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠΏΠΈΡ‚Π΅Π½) Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ, Π° Π½Π° финалния Π΅Ρ‚Π°ΠΏ сС ΠΏΡ€ΠΈΡΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ…Π° прСдставитСли Π½Π° Π΅ΠΊΠΈΠΏΠΈΡ‚Π΅, ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€Π½ΠΈ Π·Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΈ области - UI, ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° Π½Π° ΡΡŠΡ€Π²ΡŠΡ€ΠΈΡ‚Π΅, инструмСнтитС Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈ администрация ΠΈ Ρ‚.Π½.

ΠŸΡ€Π΅Ρ…ΠΎΠ΄ΡŠΡ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ опрости Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π½ΠΈ ΠΏΠΎ миграцията към Π½Π°ΠΉ-Π½ΠΎΠ²ΠΈΡ‚Π΅ вСрсии Π½Π° стандарта. НапримСр, вСрсия 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ 8.3.14 (Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°, Ρ€Π΅Π»ΠΈΠ·ΡŠΡ‚ Π΅ ΠΏΠ»Π°Π½ΠΈΡ€Π°Π½ Π·Π° Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ Π½Π° слСдващата Π³ΠΎΠ΄ΠΈΠ½Π°) Π²Π΅Ρ‡Π΅ Π΅ ΠΏΡ€Π΅Π²Π΅Π΄Π΅Π½Π° Π½Π° стандарта C++17.

Π‘Π»Π΅Π΄ миграцията Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ…Π° ΠΏΠΎΠ²Π΅Ρ‡Π΅ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ. Ако ΠΏΡ€Π΅Π΄ΠΈ ΠΈΠΌΠ°Ρ…ΠΌΠ΅ своя Π΄ΠΎΡ€Π°Π±ΠΎΡ‚Π΅Π½Π° вСрсия Π½Π° STL ΠΈ Π΅Π΄Π½ΠΎ ΠΈΠΌΠ΅ пространство std, Ρ‚ΠΎ сСга Π² ΠΈΠΌΠ΅ пространството std сС Π½Π°ΠΌΠΈΡ€Π°Ρ‚ стандартнитС класовС ΠΎΡ‚ Π²Π³Ρ€Π°Π΄Π΅Π½ΠΈΡ‚Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€Π°, Π² ΠΈΠΌΠ΅ пространството stdx - Π½Π°ΡˆΠΈΡ‚Π΅, ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π°Π½ΠΈ Π·Π° Π½Π°ΡˆΠΈΡ‚Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ Π½ΠΈΠ·ΠΎΠ²Π΅ ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ, Π² boost - Π½ΠΎΠ²Π°Ρ‚Π° вСрсия Π½Π° boost. И Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡŠΡ‚ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° класовСтС, ΠΊΠΎΠΈΡ‚ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»Π½ΠΎ отговарят Π½Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΡΡ‚Π° Π½Π° Π·Π°Π΄Π°Ρ‡ΠΈΡ‚Π΅ си.

Помага Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° ΠΈ β€žΡ€ΠΎΠ΄Π½Π°Ρ‚Π°β€œ рСализация Π½Π° конструкторитС Π·Π° прСмСстванС (move constructors) Π·Π° Ρ€Π΅Π΄ΠΈΡ†Π° класовС. Ако ΠΊΠ»Π°ΡΡŠΡ‚ ΠΈΠΌΠ° конструктор Π·Π° прСмСстванС ΠΈ Ρ‚ΠΎΠ·ΠΈ клас сС постави Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, STL ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π° ΠΊΠΎΠΏΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΡŠΡ‚ сС Ρ€Π°Π·ΡˆΠΈΡ€ΡΠ²Π° ΠΈ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° сС ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ capacity ΠΈ Π΄Π° сС Ρ€Π΅Π°Π»ΠΎΡ†ΠΈΡ€Π° ΠΏΠ°ΠΌΠ΅Ρ‚).

Π›ΡŠΠΆΠΈΡ‡ΠΊΠ° ΠΊΠ°Ρ‚Ρ€Π°Π½

Най-вСроятно Π½Π°ΠΉ-Π½Π΅ΠΊΠΎΡˆΠ΅Ρ€Π½ΠΎΡ‚ΠΎ (Π½ΠΎ Π½Π΅ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½ΠΎ) послСдствиС ΠΎΡ‚ миграцията - срСщнахмС сС с ΡƒΠ²Π΅Π»ΠΈΡ‡Π°Π²Π°Π½Π΅ Π½Π° ΠΎΠ±Π΅ΠΌΠ° obj Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, ΠΈ крайният Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ ΠΎΡ‚ Π±ΠΈΠ»Π΄Π° със всички ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π½ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π·Π°ΠΏΠΎΡ‡Π½Π° Π΄Π° Π·Π°Π΅ΠΌΠ° ΠΎΠΊΠΎΠ»ΠΎ 60 - 70 Π“Π±. Π’Π°ΠΊΠΎΠ²Π° ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π΅ ΡΠ²ΡŠΡ€Π·Π°Π½ΠΎ със спСцифичнитС характСристики Π½Π° ΡΡŠΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΈΡ‚Π΅ стандартни Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ станаха ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½ΠΈ към ΠΎΠ±Π΅ΠΌΠ° Π½Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½ΠΈΡ‚Π΅ слуТСбни Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅. Π’ΠΎΠ²Π° Π½Π΅ влияС Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½ΠΎΡ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π½ΠΎ създава Ρ€Π΅Π΄ΠΈΡ†Π° нСудобства Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π°, ΠΏΠΎ-спСциално ΡƒΠ²Π΅Π»ΠΈΡ‡Π°Π²Π° Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π·Π° компилация. Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° сС ΡƒΠ²Π΅Π»ΠΈΡ‡Π°Π²Π°Ρ‚ изискванията Π·Π° свободно място Π½Π° диска Π½Π° Π±ΠΈΠ»Π΄ ΡΡŠΡ€Π²ΡŠΡ€ΠΈΡ‚Π΅ ΠΈ ΠΊΠΎΠΌΠΏΡŽΡ‚Ρ€ΠΈΡ‚Π΅ Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅. ΠΠ°ΡˆΠΈΡ‚Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ ΠΏΠ°Ρ€Π°Π»Π΅Π»Π½ΠΎ работят Π²ΡŠΡ€Ρ…Ρƒ няколко вСрсии Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°, ΠΈ стотици Π³ΠΈΠ³Π°Π±Π°ΠΉΡ‚ΠΈ ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π½ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ понякога ΡΡŠΠ·Π΄Π°Π²Π°Ρ‚ трудности Π² Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π°. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡŠΡ‚ Π΅ нСприятСн, Π½ΠΎ Π½Π΅ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π΅Π½, Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΌΡƒ Π·Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° ΠΎΡ‚Π»ΠΎΠΆΠΈΡ…ΠΌΠ΅. ΠšΠ°Ρ‚ΠΎ Π΅Π΄ΠΈΠ½ ΠΎΡ‚ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΈΡ‚Π΅ Π·Π° Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅ Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Ρ€Π°Π·Π³Π»Π΅ΠΆΠ΄Π°ΠΌΠ΅ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ°Ρ‚Π° unity build (я, Π² частност, я ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌ Google ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° Π½Π° Π±Ρ€Π°ΡƒΠ·ΡŠΡ€Π° Chrome).

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

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