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

НСкотороС врСмя Π½Π°Π·Π°Π΄ (осСнью 2016), ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ вСрсии тСхнологичСской ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ встал вопрос ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ стандарта C++14 Π² нашСм ΠΊΠΎΠ΄Π΅. ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π½Π° Π½ΠΎΠ²Ρ‹ΠΉ стандарт, ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π»ΠΈ, ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ» Π±Ρ‹ Π½Π°ΠΌ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π²Π΅Ρ‰ΠΈ элСгантнСй, ΠΏΡ€ΠΎΡ‰Π΅ ΠΈ Π½Π°Π΄Π΅ΠΆΠ½Π΅ΠΉ, ΡƒΠΏΡ€ΠΎΡ‰Π°Π» ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΈ сопровоТдСниС ΠΊΠΎΠ΄Π°. И Π² ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π΅ Π²Ρ€ΠΎΠ΄Π΅ Π±Ρ‹ Π½Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ экстраординарного, Ссли Π±Ρ‹ Π½Π΅ ΠΌΠ°ΡΡˆΡ‚Π°Π±Ρ‹ ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·Ρ‹ ΠΈ спСцифичСскиС особСнности нашСго ΠΊΠΎΠ΄Π°.

Для Ρ‚Π΅Ρ… ΠΊΡ‚ΠΎ Π½Π΅ Π·Π½Π°Π΅Ρ‚, 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ – это срСда для быстрой Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ кросс-ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½Ρ‹Ρ… бизнСс-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈ runtime для ΠΈΡ… выполнСния Π² Ρ€Π°Π·Π½Ρ‹Ρ… ОБ ΠΈ Π‘Π£Π‘Π”. Π’ ΠΎΠ±Ρ‰ΠΈΡ… Ρ‡Π΅Ρ€Ρ‚Π°Ρ… Π² состав ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π° входят:

ΠœΡ‹ стараСмся ΠΏΠΎ максимуму ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠ΄ для Ρ€Π°Π·Π½Ρ‹Ρ… ОБ β€” кодовая Π±Π°Π·Π° сСрвСра общая Π½Π° 99%, ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° β€” ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Π½Π° 95%. ВСхнологичСская ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ прСимущСствСнно написана Π½Π° C++ ΠΈ Π½ΠΈΠΆΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ характСристики ΠΊΠΎΠ΄Π°:

  • 10 ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ΠΎΠ² строк Π‘++ ΠΊΠΎΠ΄Π°,
  • 14 тысяч Ρ„Π°ΠΉΠ»ΠΎΠ²,
  • 60 тысяч классов,
  • ΠΏΠΎΠ»ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ².

И всС это хозяйство Π½Π°Π΄ΠΎ Π±Ρ‹Π»ΠΎ пСрСвСсти Π½Π° C++14. О Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΌΡ‹ это Π΄Π΅Π»Π°Π»ΠΈ ΠΈ с Ρ‡Π΅ΠΌ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΠ»ΠΈΡΡŒ Π² процСссС, ΠΌΡ‹ сСгодня ΠΈ расскаТСм.

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

ДисклСймСр

ВсС написанноС Π½ΠΈΠΆΠ΅ ΠΎ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠΉ/быстрой Ρ€Π°Π±ΠΎΡ‚Π΅, (Π½Π΅)большом ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠΈ памяти рСализациями стандартных классов Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ… ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΎΠ΄Π½ΠΎ: это справСдливо Π”Π›Π― НАБ. Π’ΠΏΠΎΠ»Π½Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, для Π²Π°ΡˆΠΈΡ… Π·Π°Π΄Π°Ρ‡ стандартныС Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠΎΠ΄ΠΎΠΉΠ΄ΡƒΡ‚ Π½Π°ΠΈΠ»ΡƒΡ‡ΡˆΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. ΠœΡ‹ ΠΆΠ΅ ΠΎΡ‚Ρ‚Π°Π»ΠΊΠΈΠ²Π°Π»ΠΈΡΡŒ ΠΎΡ‚ своих Π·Π°Π΄Π°Ρ‡: Π±Ρ€Π°Π»ΠΈ Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ для Π½Π°ΡˆΠΈΡ… ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² Π΄Π°Π½Π½Ρ‹Π΅, прогоняли Π½Π° Π½ΠΈΡ… Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ сцСнарии, смотрСли Π½Π° быстродСйствиС, объСм потрСбляСмой памяти ΠΈ Ρ‚.ΠΏ., ΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ – ΡƒΡΡ‚Ρ€Π°ΠΈΠ²Π°ΡŽΡ‚ Π»ΠΈ нас ΠΈ Π½Π°ΡˆΠΈΡ… ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² Ρ‚Π°ΠΊΠΈΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΠΈΠ»ΠΈ Π½Π΅Ρ‚. И поступали Π² зависимости ΠΎΡ‚.

Π§Ρ‚ΠΎ Ρƒ нас Π±Ρ‹Π»ΠΎ

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

vector<vector<int> > IntV;

Π’ 2006 Π³ΠΎΠ΄Ρƒ, с Π²Ρ‹Ρ…ΠΎΠ΄ΠΎΠΌ вСрсии ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ 8.1, ΠΌΡ‹ Π½Π°Ρ‡Π°Π»ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ Linux ΠΈ ΠΏΠ΅Ρ€Π΅ΡˆΠ»ΠΈ Π½Π° ΡΡ‚ΠΎΡ€ΠΎΠ½Π½ΡŽΡŽ ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ STLPort. Одной ΠΈΠ· ΠΏΡ€ΠΈΡ‡ΠΈΠ½ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° Π±Ρ‹Π»Π° Ρ€Π°Π±ΠΎΡ‚Π° с ΡˆΠΈΡ€ΠΎΠΊΠΈΠΌΠΈ строками. Π’ нашСм ΠΊΠΎΠ΄Π΅ ΠΌΡ‹ повсСмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ std::wstring, основанный Π½Π° Ρ‚ΠΈΠΏΠ΅ wchar_t. Π•Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π² Windows 2 Π±Π°ΠΉΡ‚Π°, Π° Π² Linux ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ 4 Π±Π°ΠΉΡ‚Π°. Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠ»ΠΎ ΠΊ нСсовмСстимости Π½Π°ΡˆΠΈΡ… Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Ρ… ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ ΠΈ сСрвСром, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… пСрсистСнтных Π΄Π°Π½Π½Ρ‹Ρ…. ΠžΠΏΡ†ΠΈΡΠΌΠΈ gcc ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·ΠΌΠ΅Ρ€ wchar_t ΠΏΡ€ΠΈ компиляции Π±Ρ‹Π» Ρ‚ΠΎΠΆΠ΅ 2 Π±Π°ΠΉΡ‚Π°, Π½ΠΎ Ρ‚ΠΎΠ³Π΄Π° ΠΎΠ± использовании стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΎΡ‚ компилятора ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ·Π°Π±Ρ‹Ρ‚ΡŒ, Ρ‚.ΠΊ. ΠΎΠ½Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ glibc, Π° Ρ‚Π° Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ скомпилирована ΠΏΠΎΠ΄ 4-Π±Π°ΠΉΡ‚Π½Ρ‹ΠΉ wchar_t. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌΠΈ Π±Ρ‹Π»ΠΈ Π±ΠΎΠ»Π΅Π΅ качСствСнная рСализация стандартных классов, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Ρ…Π΅Ρˆ-Ρ‚Π°Π±Π»ΠΈΡ† ΠΈ Π΄Π°ΠΆΠ΅ эмуляция сСмантики пСрСмСщСния Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΡ‹ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ пользовались. И Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ, ΠΊΠ°ΠΊ говорится last but not least, Π±Ρ‹Π»Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ строк. Π£ нас Π±Ρ‹Π» свой класс для строк, Ρ‚.ΠΊ. Ρƒ нас Π² силу спСцифики нашСго софта строковыС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΎΡ‡Π΅Π½ΡŒ ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈ для нас это ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½ΠΎ.

Наша строка основана Π½Π° идСях ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ строк, высказанных Π΅Ρ‰Ρ‘ Π² Π½Π°Ρ‡Π°Π»Π΅ 2000-Ρ… АндрССм АлСксандрСску. ПозднСС, ΠΊΠΎΠ³Π΄Π° АлСксандрСску Ρ€Π°Π±ΠΎΡ‚Π°Π» Π² Facebook, с Π΅Π³ΠΎ ΠΏΠΎΠ΄Π°Ρ‡ΠΈ Π² Π΄Π²ΠΈΠΆΠΊΠ΅ Facebook Π±Ρ‹Π»Π° использована строка, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π°Ρ Π½Π° схоТих ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ°Ρ… (см. Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ folly).

Π’ нашСй строкС использовались Π΄Π²Π΅ основныС Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ:

  1. Для ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ Π±ΡƒΡ„Π΅Ρ€ Π² самом ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ строки (Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΠΉ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Π°Π»Π»ΠΎΠΊΠ°Ρ†ΠΈΠΈ памяти).
  2. Для всСх ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΌΠ΅Ρ…Π°Π½ΠΈΠΊΠ° Copy On Write. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ строки хранится Π² ΠΎΠ΄Π½ΠΎΠΌ мСстС, ΠΏΡ€ΠΈ присвоСнии/ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ счСтчик ссылок.

Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹, ΠΌΡ‹ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΠ»ΠΈ ΠΈΠ· своСго Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° STLPort Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ stream (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Π½Π΅ использовали), это Π΄Π°Π»ΠΎ Π½Π°ΠΌ ускорСниС компиляции ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Π½Π° 20%. ВпослСдствии Π½Π°ΠΌ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Boost. Boost Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ stream, Π² частности, Π² своих сСрвисных API (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для логирования), поэтому Π½Π°ΠΌ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ, ΠΈΡΠΊΠ»ΡŽΡ‡Π°Ρ ΠΈΠ· Π½Π΅Π³ΠΎ использованиС stream. Π­Ρ‚ΠΎ, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, затрудняло Π½Π°ΠΌ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π½Π° Π½ΠΎΠ²Ρ‹Π΅ вСрсии 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Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΡ) миграция Π±Ρ‹Π»Π° Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π°.

Π˜Ρ‚ΠΎΠ³ΠΈ

ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π½Π° стандарт Π‘++14 занял Ρƒ нас ΠΎΠΊΠΎΠ»ΠΎ 6 мСсяцСв. Π‘ΠžΠ»ΡŒΡˆΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π°Π΄ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Π» ΠΎΠ΄ΠΈΠ½ (Π½ΠΎ ΠΎΡ‡Π΅Π½ΡŒ высококвалифицированный) Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ, Π° Π½Π° Ρ„ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΉ стадии ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΠ»ΠΈΡΡŒ прСдставитСли ΠΊΠΎΠΌΠ°Π½Π΄, отвСтствСнных Π·Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ области β€” UI, кластСр сСрвСров, срСдства Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ администрирования ΠΈ Ρ‚.Π΄.

ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ сильно упростил Π½Π°ΠΌ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΏΠΎ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ Π½Π° новСйшиС вСрсии стандарта. Π’Π°ΠΊ, вСрсия 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ 8.3.14 (Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅, Ρ€Π΅Π»ΠΈΠ· Π·Π°ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½ Π½Π° Π½Π°Ρ‡Π°Π»ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ Π³ΠΎΠ΄Π°) ΡƒΠΆΠ΅ ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Π΅Π½Π° Π½Π° стандарт Π‘++17.

ПослС ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ Ρƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² появилось большС возмоТностСй. Если Ρ€Π°Π½ΡŒΡˆΠ΅ Ρƒ нас Π±Ρ‹Π»Π° своя доработанная вСрсия STL ΠΈ ΠΎΠ΄ΠΈΠ½ нСймспСйс std, Ρ‚ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρƒ нас Π² нСймспСйсС std находятся стандартныС классы ΠΈΠ· встроСнных Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ компилятора, Π² нСймспСйсС stdx – наши, ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ для Π½Π°ΡˆΠΈΡ… Π·Π°Π΄Π°Ρ‡ строки ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹, Π² boost – свСТая вСрсия boost. И Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ‚Π΅ классы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎ подходят для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π΅Π³ΠΎ Π·Π°Π΄Π°Ρ‡.

ΠŸΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈ «родная» рСализация конструкторов пСрСмСщСния (move constructors) для ряда классов. Если Ρƒ класса Π΅ΡΡ‚ΡŒ конструктор пСрСмСщСния ΠΈ этот класс помСщаСтся Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, Ρ‚ΠΎ STL ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ элСмСнтов Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ΡΡ ΠΈ Π½Π°Π΄ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ capacity ΠΈ Ρ€Π΅Π°Π»Π»ΠΎΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ).

Π›ΠΎΠΆΠΊΠ° дСгтя

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

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

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