ΠΠΊΠΎ Π½Π° ΠΏΠΎΡΠ΅ΡΠΎΠΊΠΎΡ Π½Π° ΠΏΡΠ΅ΡΡΡΠ°Π²Π°ΡΠ° ΠΊΠ°ΠΆΠ΅ΡΠ΅ Π΄Π΅ΠΊΠ° Π½Π° ΡΠΈΠ΄ΠΎΡ Π²ΠΈΡΠΈ ΡΠΈΡΡΠ° C++, ΡΠΎΠ³Π°Ρ Π΄ΠΎ ΠΊΡΠ°ΡΠΎΡ Π΅ ΠΎΠ±Π²ΡΠ·Π°Π½Π° Π΄Π° Π²ΠΈ ΠΏΡΠΊΠ° Π²ΠΎ Π½ΠΎΠ³Π°.
ΠΡΠ°ΡΠ½Π΅ Π‘ΡΡΡΡΡΡΡΠΏ
ΠΠ΄ 31 ΠΎΠΊΡΠΎΠΌΠ²ΡΠΈ Π΄ΠΎ 1 Π½ΠΎΠ΅ΠΌΠ²ΡΠΈ, Π²ΠΎ Π‘Π°Π½ΠΊΡ ΠΠ΅ΡΠ΅ΡΠ±ΡΡΠ³ ΡΠ΅ ΠΎΠ΄ΡΠΆΠ° ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΡΠ°ΡΠ° C++ Russia Piter - Π΅Π΄Π½Π° ΠΎΠ΄ Π³ΠΎΠ»Π΅ΠΌΠΈΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΡΠΊΠΈ ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΠΈ Π²ΠΎ Π ΡΡΠΈΡΠ°, ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ°Π½Π° ΠΎΠ΄ JUG Ru Group. ΠΠΎΡΡΠΈΡΠ΅ Π³ΠΎΠ²ΠΎΡΠ½ΠΈΡΠΈ Π²ΠΊΠ»ΡΡΡΠ²Π°Π°Ρ ΡΠ»Π΅Π½ΠΎΠ²ΠΈ Π½Π° ΠΠΎΠΌΠΈΡΠ΅ΡΠΎΡ Π·Π° ΡΡΠ°Π½Π΄Π°ΡΠ΄ΠΈ Π½Π° C++, Π·Π²ΡΡΠ½ΠΈΡΠΈ Π½Π° CppCon, Π°Π²ΡΠΎΡΠΈ Π½Π° ΠΊΠ½ΠΈΠ³ΠΈ Π½Π° Π'Π Π°ΡΠ»ΠΈ ΠΈ ΠΎΠ΄ΡΠΆΡΠ²Π°ΡΠΈ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠΈ ΠΊΠ°ΠΊΠΎ ΡΡΠΎ ΡΠ΅ LLVM, libc++ ΠΈ Boost. ΠΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΡΠ°ΡΠ° Π΅ Π½Π°ΠΌΠ΅Π½Π΅ΡΠ° Π·Π° ΠΈΡΠΊΡΡΠ½ΠΈ ΡΠ°Π·Π²ΠΈΠ²Π°ΡΠΈ Π½Π° C++ ΠΊΠΎΠΈ ΡΠ°ΠΊΠ°Π°Ρ Π΄Π° ΡΠ° ΠΏΡΠΎΠ΄Π»Π°Π±ΠΎΡΠ°Ρ ΡΠ²ΠΎΡΠ°ΡΠ° Π΅ΠΊΡΠΏΠ΅ΡΡΠΈΠ·Π° ΠΈ Π΄Π° ΡΠ°Π·ΠΌΠ΅Π½Π°Ρ ΠΈΡΠΊΡΡΡΠ²Π° Π²ΠΎ ΠΊΠΎΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ° Π²ΠΎ ΠΆΠΈΠ²ΠΎ. ΠΠ° ΡΡΡΠ΄Π΅Π½ΡΠΈΡΠ΅, Π΄ΠΈΠΏΠ»ΠΎΠΌΠΈΡΠ°Π½ΠΈΡΠ΅ ΡΡΡΠ΄Π΅Π½ΡΠΈ ΠΈ ΡΠ½ΠΈΠ²Π΅ΡΠ·ΠΈΡΠ΅ΡΡΠΊΠΈΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΠΎΡΠΈ ΠΈΠΌ ΡΠ΅ ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡΠ²Π°Π°Ρ ΠΌΠ½ΠΎΠ³Ρ ΡΠ±Π°Π²ΠΈ ΠΏΠΎΠΏΡΡΡΠΈ.
ΠΠΎΡΠΊΠΎΠ²ΡΠΊΠΎΡΠΎ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΡΠ°ΡΠ° ΡΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΠΎΡΠ΅ΡΠΈ Π²Π΅ΡΠ΅ Π²ΠΎ Π°ΠΏΡΠΈΠ» ΡΠ»Π΅Π΄Π½Π°ΡΠ° Π³ΠΎΠ΄ΠΈΠ½Π°, Π½ΠΎ Π²ΠΎ ΠΌΠ΅ΡΡΠ²ΡΠ΅ΠΌΠ΅ Π½Π°ΡΠΈΡΠ΅ ΡΡΡΠ΄Π΅Π½ΡΠΈ ΡΠ΅ Π²ΠΈ ΠΊΠ°ΠΆΠ°Ρ ΠΊΠ°ΠΊΠ²ΠΈ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΈ ΡΠ°Π±ΠΎΡΠΈ Π½Π°ΡΡΠΈΠ»Π΅ Π½Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΎΡ Π½Π°ΡΡΠ°Π½.
Π€ΠΎΡΠΎΠ³ΡΠ°ΡΠΈΡΠ° ΠΎΠ΄
Π·Π° Π½Π°Ρ
ΠΠ²Π°ΡΡΠ° ΡΡΡΠ΄Π΅Π½ΡΠΈ ΠΎΠ΄ Π²ΠΈΡΠΎΠΊΠΎΡΠΎ Π΅ΠΊΠΎΠ½ΠΎΠΌΡΠΊΠΎ ΡΡΠΈΠ»ΠΈΡΡΠ΅ Π·Π° Π½Π°ΡΠΈΠΎΠ½Π°Π»Π½ΠΈΠΎΡ ΠΈΡΡΡΠ°ΠΆΡΠ²Π°ΡΠΊΠΈ ΡΠ½ΠΈΠ²Π΅ΡΠ·ΠΈΡΠ΅Ρ - Π‘Π°Π½ΠΊΡ ΠΠ΅ΡΠ΅ΡΠ±ΡΡΠ³ ΡΠ°Π±ΠΎΡΠ΅Π° Π½Π° ΠΎΠ²ΠΎΡ ΠΏΠΎΡΡ:
- ΠΠΈΠ·Π° ΠΠ°ΡΠΈΠ»Π΅Π½ΠΊΠΎ Π΅ ΡΡΡΠ΄Π΅Π½ΡΠΊΠ° Π½Π° 4-ΡΠ° Π³ΠΎΠ΄ΠΈΠ½Π° Π½Π° Π΄ΠΎΠ΄ΠΈΠΏΠ»ΠΎΠΌΡΠΊΠΈ ΡΡΡΠ΄ΠΈΠΈ ΠΊΠΎΡΠ° ΡΡΡΠ΄ΠΈΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΡΠΊΠΈ ΡΠ°Π·ΠΈΡΠΈ ΠΊΠ°ΠΊΠΎ Π΄Π΅Π» ΠΎΠ΄ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° Π·Π° ΠΏΡΠΈΠΌΠ΅Π½Π΅ΡΠ° ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΠΊΠ° ΠΈ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΡΠΊΠΈ Π½Π°ΡΠΊΠΈ. ΠΡΠΊΠ°ΠΊΠΎ ΡΠ΅ Π·Π°ΠΏΠΎΠ·Π½Π°Π² ΡΠΎ ΡΠ°Π·ΠΈΠΊΠΎΡ C++ Π²ΠΎ ΠΌΠΎΡΠ°ΡΠ° ΠΏΡΠ²Π° Π³ΠΎΠ΄ΠΈΠ½Π° Π½Π° ΡΠ½ΠΈΠ²Π΅ΡΠ·ΠΈΡΠ΅Ρ, ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ ΡΡΠ΅ΠΊΠ½Π°Π² ΠΈΡΠΊΡΡΡΠ²ΠΎ ΡΠ°Π±ΠΎΡΠ΅ΡΡΠΈ ΡΠΎ Π½Π΅Π³ΠΎ ΠΏΡΠ΅ΠΊΡ ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°Π½ΡΠΈ Π²ΠΎ ΠΈΠ½Π΄ΡΡΡΡΠΈΡΠ°ΡΠ°. Π‘ΡΡΠ°ΡΡΠ° ΠΊΠΎΠ½ ΠΏΡΠΎΠ³ΡΠ°ΠΌΡΠΊΠΈΡΠ΅ ΡΠ°Π·ΠΈΡΠΈ Π²ΠΎΠΎΠΏΡΡΠΎ ΠΈ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°ΡΠ΅ ΠΎΡΡΠ°Π²ΠΈ ΡΠ²ΠΎΡ Π±Π΅Π»Π΅Π³ Π½Π° ΠΈΠ·Π±ΠΎΡΠΎΡ Π½Π° ΠΈΠ·Π²Π΅ΡΡΠ°ΠΈ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΡΠ°ΡΠ°.
- ΠΠ°ΡΠ° Π‘ΠΌΠΈΡΠ½ΠΎΠ² Π΅ ΡΡΡΠ΄Π΅Π½Ρ Π²ΠΎ ΠΏΡΠ²Π° Π³ΠΎΠ΄ΠΈΠ½Π° Π½Π° ΠΌΠ°Π³ΠΈΡΡΠ΅ΡΡΠΊΠ°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° βΠΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°ΡΠ΅ ΠΈ Π°Π½Π°Π»ΠΈΠ·Π° Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈβ. Π£ΡΡΠ΅ Π΄ΠΎΠ΄Π΅ΠΊΠ° Π±Π΅Π² Π½Π° ΡΡΠΈΠ»ΠΈΡΡΠ΅ ΠΏΠΈΡΡΠ²Π°Π² ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ Π½Π° ΠΠ»ΠΈΠΌΠΏΠΈΡΠ°Π΄Π°ΡΠ° Π½Π° C++, Π° ΠΏΠΎΡΠΎΠ° Π½Π΅ΠΊΠ°ΠΊΠΎ ΡΠ΅ ΡΠ»ΡΡΠΈ ΡΠ°Π·ΠΈΠΊΠΎΡ ΠΏΠΎΡΡΠΎΡΠ°Π½ΠΎ Π΄Π° ΡΠ΅ ΠΏΠΎΡΠ°Π²ΡΠ²Π° Π²ΠΎ ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π½ΠΈΡΠ΅ Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ ΠΈ Π½Π° ΠΊΡΠ°ΡΠΎΡ Π΄Π° ΡΡΠ°Π½Π΅ Π³Π»Π°Π²Π΅Π½ ΡΠ°Π±ΠΎΡΠ΅Π½ ΡΠ°Π·ΠΈΠΊ. Π Π΅ΡΠΈΠ² Π΄Π° ΡΡΠ΅ΡΡΠ²ΡΠ²Π°ΠΌ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΡΠ°ΡΠ° Π·Π° Π΄Π° Π³ΠΎ ΠΏΠΎΠ΄ΠΎΠ±ΡΠ°ΠΌ ΠΌΠΎΠ΅ΡΠΎ Π·Π½Π°Π΅ΡΠ΅ ΠΈ Π΄Π° Π½Π°ΡΡΠ°ΠΌ Π·Π° Π½ΠΎΠ²ΠΈΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ.
ΠΠΎ Π±ΠΈΠ»ΡΠ΅Π½ΠΎΡ, ΡΠ°ΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎΡΠΎ Π½Π° ΡΠ°ΠΊΡΠ»ΡΠ΅ΡΠΎΡ ΡΠ΅ΡΡΠΎ ΡΠΏΠΎΠ΄Π΅Π»ΡΠ²Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π·Π° Π΅Π΄ΡΠΊΠ°ΡΠΈΠ²Π½ΠΈ Π½Π°ΡΡΠ°Π½ΠΈ ΠΏΠΎΠ²ΡΠ·Π°Π½ΠΈ ΡΠΎ Π½Π°ΡΠ°ΡΠ° ΡΠΏΠ΅ΡΠΈΡΠ°Π»Π½ΠΎΡΡ. ΠΠΎ ΡΠ΅ΠΏΡΠ΅ΠΌΠ²ΡΠΈ Π²ΠΈΠ΄ΠΎΠ²ΠΌΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π·Π° C++ Π ΡΡΠΈΡΠ° ΠΈ ΡΠ΅ΡΠΈΠ²ΠΌΠ΅ Π΄Π° ΡΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠ°ΠΌΠ΅ ΠΊΠ°ΠΊΠΎ ΡΠ»ΡΡΠ°ΡΠ΅Π»ΠΈ. ΠΠ²Π° Π΅ Π½Π°ΡΠ΅ ΠΏΡΠ²ΠΎ ΠΈΡΠΊΡΡΡΠ²ΠΎ ΠΎΠ΄ ΡΡΠ΅ΡΡΠ²ΠΎ Π½Π° Π²Π°ΠΊΠ²ΠΈ ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΠΈ.
ΠΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΡΠΊΠ° ΡΡΡΡΠΊΡΡΡΠ°
-
ΠΠ·Π²Π΅ΡΡΠ°ΠΈ
ΠΠΎ ΡΠ΅ΠΊΠΎΡ Π½Π° Π΄Π²Π° Π΄Π΅Π½Π°, Π΅ΠΊΡΠΏΠ΅ΡΡΠΈΡΠ΅ ΠΏΡΠΎΡΠΈΡΠ°Π° 30 ΠΈΠ·Π²Π΅ΡΡΠ°ΠΈ, ΠΏΠΎΠΊΡΠΈΠ²Π°ΡΡΠΈ ΠΌΠ½ΠΎΠ³Ρ ΠΆΠ΅ΡΠΊΠΈ ΡΠ΅ΠΌΠΈ: Π³Π΅Π½ΠΈΡΠ°Π»Π½Π° ΡΠΏΠΎΡΡΠ΅Π±Π° Π½Π° ΡΠ°Π·ΠΈΡΠ½ΠΈΡΠ΅ ΠΊΠ°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ Π·Π° ΡΠ΅ΡΠ°Π²Π°ΡΠ΅ ΠΏΡΠΈΠΌΠ΅Π½Π΅ΡΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ, ΠΏΡΠ΅ΡΡΡΠΎΡΠ½ΠΈ ΡΠ°Π·ΠΈΡΠ½ΠΈ Π°ΠΆΡΡΠΈΡΠ°ΡΠ° Π²ΠΎ Π²ΡΡΠΊΠ° ΡΠΎ Π½ΠΎΠ²ΠΈΠΎΡ ΡΡΠ°Π½Π΄Π°ΡΠ΄, ΠΊΠΎΠΌΠΏΡΠΎΠΌΠΈΡΠΈ Π²ΠΎ Π΄ΠΈΠ·Π°ΡΠ½ΠΎΡ Π½Π° C++ ΠΈ ΠΌΠ΅ΡΠΊΠΈ Π½Π° ΠΏΡΠ΅ΡΠΏΠ°Π·Π»ΠΈΠ²ΠΎΡΡ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ° ΡΠΎ Π½ΠΈΠ²Π½ΠΈΡΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΈΡΠΈ, ΠΏΡΠΈΠΌΠ΅ΡΠΈ Π½Π° ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ½Π° Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ°, ΠΊΠ°ΠΊΠΎ ΠΈ Π½Π΅ΠΊΠΎΠΈ Π΄Π΅ΡΠ°Π»ΠΈ ΠΏΠΎΠ΄ ΠΊΠ°ΠΏΠ°ΠΊΠΎΡ Π½Π° ΡΠ°Π·ΠΈΡΠ½Π°ΡΠ° ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ°. Π’ΡΠΈ ΠΏΡΠ΅ΡΡΡΠ°Π²ΠΈ ΡΠ΅ ΠΎΠ΄ΡΠΆΠ°Π° ΠΈΡΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½ΠΎ, Π½Π°ΡΡΠ΅ΡΡΠΎ Π΄Π²Π΅ Π½Π° ΡΡΡΠΊΠΈ ΠΈ Π΅Π΄Π½Π° Π½Π° Π°Π½Π³Π»ΠΈΡΠΊΠΈ ΡΠ°Π·ΠΈΠΊ.
-
ΠΠΎΠ½ΠΈ Π·Π° Π΄ΠΈΡΠΊΡΡΠΈΡΠ°
ΠΠΎ Π·Π°Π²ΡΡΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° Π³ΠΎΠ²ΠΎΡΠΎΡ, ΡΠΈΡΠ΅ Π½Π΅ΠΏΠΎΡΡΠ°Π²Π΅Π½ΠΈ ΠΏΡΠ°ΡΠ°ΡΠ° ΠΈ Π½Π΅Π΄ΠΎΠ²ΡΡΠ΅Π½ΠΈ Π΄ΠΈΡΠΊΡΡΠΈΠΈ Π±Π΅Π° ΠΏΡΠ΅ΡΡΠ»Π΅Π½ΠΈ Π²ΠΎ ΡΠΏΠ΅ΡΠΈΡΠ°Π»Π½ΠΎ ΠΎΠ΄ΡΠ΅Π΄Π΅Π½ΠΈ ΠΎΠ±Π»Π°ΡΡΠΈ Π·Π° ΠΊΠΎΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΡΠ° ΡΠΎ Π³ΠΎΠ²ΠΎΡΠ½ΠΈΡΠΈΡΠ΅, ΠΎΠΏΡΠ΅ΠΌΠ΅Π½ΠΈ ΡΠΎ ΡΠ°Π±Π»ΠΈ Π·Π° ΠΌΠ°ΡΠΊΠ΅ΡΠΈ. ΠΠΎΠ±Π°Ρ Π½Π°ΡΠΈΠ½ Π΄Π° ΡΠ° ΠΎΠ΄Π΄Π°Π»Π΅ΡΠΈΡΠ΅ ΠΏΠ°ΡΠ·Π°ΡΠ° ΠΏΠΎΠΌΠ΅ΡΡ Π³ΠΎΠ²ΠΎΡΠΈΡΠ΅ ΡΠΎ ΠΏΡΠΈΡΠ°ΡΠ΅Π½ ΡΠ°Π·Π³ΠΎΠ²ΠΎΡ.
-
ΠΠΎΠ»ΡΠ° ΡΠ°Π·Π³ΠΎΠ²ΠΎΡΠΈ ΠΈ Π½Π΅ΡΠΎΡΠΌΠ°Π»Π½ΠΈ Π΄ΠΈΡΠΊΡΡΠΈΠΈ
ΠΠΊΠΎ ΡΠ°ΠΊΠ°ΡΠ΅ Π΄Π° Π΄Π°Π΄Π΅ΡΠ΅ ΠΊΡΠ°ΡΠΎΠΊ ΠΈΠ·Π²Π΅ΡΡΠ°Ρ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠ΅ ΠΏΡΠΈΡΠ°Π²ΠΈΡΠ΅ Π½Π° ΡΠ°Π±Π»Π°ΡΠ° Π·Π° Π²Π΅ΡΠ΅ΡΠ½ΠΈΠΎΡ ΡΠ°Π·Π³ΠΎΠ²ΠΎΡ ΡΠΎ ΠΌΠΎΠ»ΡΠ° ΠΈ Π΄Π° Π΄ΠΎΠ±ΠΈΠ΅ΡΠ΅ ΠΏΠ΅Ρ ΠΌΠΈΠ½ΡΡΠΈ Π²ΡΠ΅ΠΌΠ΅ Π΄Π° ΡΠ°Π·Π³ΠΎΠ²Π°ΡΠ°ΡΠ΅ Π·Π° ΡΡΠΎ Π±ΠΈΠ»ΠΎ Π½Π° ΡΠ΅ΠΌΠ°ΡΠ° Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΡΠ°ΡΠ°. ΠΠ° ΠΏΡΠΈΠΌΠ΅Ρ, Π±ΡΠ· Π²ΠΎΠ²Π΅Π΄ Π²ΠΎ ΡΡΠ΅Π΄ΡΡΠ²Π° Π·Π° Π΄Π΅Π·ΠΈΠ½ΡΠ΅ΠΊΡΠΈΡΠ° Π·Π° C++ (Π·Π° Π½Π΅ΠΊΠΎΠΈ ΡΠΎΠ° Π±Π΅ΡΠ΅ Π½ΠΎΠ²ΠΎ) ΠΈΠ»ΠΈ ΠΏΡΠΈΠΊΠ°Π·Π½Π° Π·Π° Π³ΡΠ΅ΡΠΊΠ° Π²ΠΎ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡΠ°ΡΠ° Π½Π° ΡΠΈΠ½ΡΡΠ΅Π½ Π±ΡΠ°Π½ ΡΡΠΎ ΠΌΠΎΠΆΠ΅ ΡΠ°ΠΌΠΎ Π΄Π° ΡΠ΅ ΡΠ»ΡΡΠ½Π΅, Π½ΠΎ Π½Π΅ ΠΈ Π΄Π° ΡΠ΅ Π²ΠΈΠ΄ΠΈ.
ΠΡΡΠ³ ΡΠΎΡΠΌΠ°Ρ Π΅ ΠΏΠ°Π½Π΅Π» Π΄ΠΈΡΠΊΡΡΠΈΡΠ°ΡΠ° βΠ‘ΠΎ ΠΊΠΎΠΌΠΈΡΠΈΡΠ° ΠΎΠ΄ ΡΡΡΠ΅ Π΄ΠΎ ΡΡΡΠ΅β. ΠΠ° ΡΡΠ΅Π½Π°ΡΠ° ΡΠ΅ Π½Π΅ΠΊΠΎΠΈ ΡΠ»Π΅Π½ΠΎΠ²ΠΈ Π½Π° ΠΊΠΎΠΌΠΈΡΠΈΡΠ°ΡΠ° Π·Π° ΡΡΠ°Π½Π΄Π°ΡΠ΄ΠΈΠ·Π°ΡΠΈΡΠ°, Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠΎΡΠΎΡ Π΅ ΠΊΠ°ΠΌΠΈΠ½ΠΎΡ (ΠΎΡΠΈΡΠΈΡΠ°Π»Π½ΠΎ - Π·Π° Π΄Π° ΡΠ΅ ΡΠΎΠ·Π΄Π°Π΄Π΅ ΠΈΡΠΊΡΠ΅Π½Π° Π°ΡΠΌΠΎΡΡΠ΅ΡΠ°, Π½ΠΎ ΠΏΡΠΈΡΠΈΠ½Π°ΡΠ° βΠ±ΠΈΠ΄Π΅ΡΡΠΈ Π‘Π ΠΠΠ Πβ ΠΈΠ·Π³Π»Π΅Π΄Π° ΠΏΠΎΡΠΌΠ΅ΡΠ½Π°), ΠΏΡΠ°ΡΠ°ΡΠ° Π·Π° ΡΡΠ°Π½Π΄Π°ΡΠ΄ΠΎΡ ΠΈ ΠΎΠΏΡΡΠ°ΡΠ° Π²ΠΈΠ·ΠΈΡΠ° Π½Π° C++ , Π±Π΅Π· ΠΆΠ΅ΡΡΠΎΠΊΠΈ ΡΠ΅Ρ Π½ΠΈΡΠΊΠΈ Π΄ΠΈΡΠΊΡΡΠΈΠΈ ΠΈ Ρ ΠΎΠ»ΠΈΠ²Π°ΡΠΈ. Π‘Π΅ ΠΈΡΠΏΠΎΡΡΠ°Π²ΠΈ Π΄Π΅ΠΊΠ° ΠΊΠΎΠΌΠΈΡΠ΅ΡΠΎΡ ΡΠΎΠ΄ΡΠΆΠΈ ΠΈ ΠΆΠΈΠ²ΠΈ Π»ΡΡΠ΅ ΠΊΠΎΠΈ ΠΌΠΎΠΆΠ΅Π±ΠΈ Π½Π΅ ΡΠ΅ ΡΠ΅Π»ΠΎΡΠ½ΠΎ ΡΠΈΠ³ΡΡΠ½ΠΈ Π²ΠΎ Π½Π΅ΡΡΠΎ ΠΈΠ»ΠΈ ΠΌΠΎΠΆΠ΅Π±ΠΈ Π½Π΅ Π·Π½Π°Π°Ρ Π½Π΅ΡΡΠΎ.
ΠΠ° ΡΡΠ±ΠΈΡΠ΅Π»ΠΈΡΠ΅ Π½Π° Ρ ΠΎΠ»ΠΈΠ²Π°ΡΠΈΡΠ΅, ΡΡΠ΅ΡΠΈΠΎΡ Π½Π°ΡΡΠ°Π½ ΠΎΡΡΠ°Π½Π° Π½Π° ΡΠ»ΡΡΠ°ΡΠΎΡ - ΡΠ΅ΡΠΈΡΠ°ΡΠ° Π½Π° ΠΠΠ€ βΠΠ΄ΠΈ Π½Π°ΡΠΏΡΠΎΡΠΈ C++β. ΠΠ΅ΠΌΠ°ΠΌΠ΅ Go lover, ΡΡΠ±ΠΈΡΠ΅Π» Π½Π° C++, ΠΏΡΠ΅Π΄ ΠΏΠΎΡΠ΅ΡΠΎΠΊΠΎΡ Π½Π° ΡΠ΅ΡΠΈΡΠ°ΡΠ° Π·Π°Π΅Π΄Π½ΠΎ ΠΏΠΎΠ΄Π³ΠΎΡΠ²ΡΠ²Π°Π°Ρ 100500 ΡΠ»Π°ΡΠ΄ΠΎΠ²ΠΈ Π½Π° ΡΠ΅ΠΌΠ° (ΠΊΠ°ΠΊΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ ΡΠΎ ΠΏΠ°ΠΊΠ΅ΡΠΈΡΠ΅ Π²ΠΎ C++ ΠΈΠ»ΠΈ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΠΊΠΎΡ Π½Π° Π³Π΅Π½Π΅ΡΠΈΠΊΠΈ Π²ΠΎ Go), Π° ΠΏΠΎΡΠΎΠ° ΠΈΠΌΠ°Π°Ρ ΠΆΠΈΠ²Π° Π΄ΠΈΡΠΊΡΡΠΈΡΠ° ΠΌΠ΅ΡΡ ΡΠ΅Π±Π΅ ΠΈ ΡΠΎ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠ°, Π° ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠ° ΡΠ΅ ΠΎΠ±ΠΈΠ΄ΡΠ²Π° Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ Π΄Π²Π΅ Π³Π»Π΅Π΄ΠΈΡΡΠ° ΠΎΠ΄Π΅Π΄Π½Π°Ρ. ΠΠΊΠΎ Ρ ΠΎΠ»ΠΈΠ²Π°ΡΠΎΡ ΠΏΠΎΡΠ½Π΅ Π½Π°Π΄Π²ΠΎΡ ΠΎΠ΄ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ, ΠΌΠΎΠ΄Π΅ΡΠ°ΡΠΎΡΠΎΡ ΠΈΠ½ΡΠ΅ΡΠ²Π΅Π½ΠΈΡΠ° ΠΈ Π³ΠΈ ΠΏΠΎΠΌΠΈΡΡΠ²Π° ΡΡΡΠ°Π½ΠΈΡΠ΅. ΠΠ²ΠΎΡ ΡΠΎΡΠΌΠ°Ρ ΠΏΡΠ΅Π΄ΠΈΠ·Π²ΠΈΠΊΡΠ²Π° Π·Π°Π²ΠΈΡΠ½ΠΎΡΡ: Π½Π΅ΠΊΠΎΠ»ΠΊΡ ΡΠ°ΡΠ° ΠΏΠΎ ΠΏΠΎΡΠ΅ΡΠΎΠΊΠΎΡ, ΡΠ°ΠΌΠΎ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π° ΠΎΠ΄ ΡΠ»Π°ΡΠ΄ΠΎΠ²ΠΈΡΠ΅ Π±Π΅Π° Π·Π°Π²ΡΡΠ΅Π½ΠΈ. ΠΡΠ°ΡΠΎΡ ΠΌΠΎΡΠ°ΡΠ΅ ΠΌΠ½ΠΎΠ³Ρ Π΄Π° ΡΠ΅ Π·Π°Π±ΡΠ·Π°.
-
ΠΠ°ΡΡΠ½Π΅Ρ ΡΡΠΎΠΈ
ΠΠ°ΡΡΠ½Π΅ΡΠΈΡΠ΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΡΠ°ΡΠ° Π±Π΅Π° Π·Π°ΡΡΠ°ΠΏΠ΅Π½ΠΈ Π²ΠΎ ΡΠ°Π»ΠΈΡΠ΅ - Π½Π° ΡΡΠ°Π½Π΄ΠΎΠ²ΠΈΡΠ΅ Π·Π±ΠΎΡΡΠ²Π°Π° Π·Π° ΡΠ΅ΠΊΠΎΠ²Π½ΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΈ, Π½ΡΠ΄Π΅Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°Π½ΡΠΈ ΠΈ Π²ΡΠ°Π±ΠΎΡΡΠ²Π°ΡΠ΅, ΠΎΠ΄ΡΠΆΡΠ²Π°Π° ΠΊΠ²ΠΈΠ·ΠΎΠ²ΠΈ ΠΈ ΠΌΠ°Π»ΠΈ Π½Π°ΡΠΏΡΠ΅Π²Π°ΡΠΈ, Π° Π½Π°Π³ΡΠ°Π΄ΡΠ²Π°Π° ΠΈ ΡΠ±Π°Π²ΠΈ Π½Π°Π³ΡΠ°Π΄ΠΈ. ΠΠΎ ΠΈΡΡΠΎ Π²ΡΠ΅ΠΌΠ΅, Π½Π΅ΠΊΠΎΠΈ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Π΄ΡΡΠΈ ΠΏΠΎΠ½ΡΠ΄ΠΈΡΠ° Π΄Π° ΠΏΠΎΠΌΠΈΠ½Π°Ρ Π½ΠΈΠ· ΠΏΠΎΡΠ΅ΡΠ½ΠΈΡΠ΅ ΡΠ°Π·ΠΈ Π½Π° ΠΈΠ½ΡΠ΅ΡΠ²ΡΡΠ°, ΡΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΠΈΠ΄Π΅ ΠΊΠΎΡΠΈΡΠ½ΠΎ Π·Π° ΠΎΠ½ΠΈΠ΅ ΠΊΠΎΠΈ Π΄ΠΎΡΠ΄ΠΎΠ° Π½Π΅ ΡΠ°ΠΌΠΎ Π΄Π° ΡΠ»ΡΡΠ°Π°Ρ ΠΈΠ·Π²Π΅ΡΡΠ°ΠΈ.
Π’Π΅Ρ Π½ΠΈΡΠΊΠΈ Π΄Π΅ΡΠ°Π»ΠΈ Π·Π° ΠΈΠ·Π²Π΅ΡΡΠ°ΠΈΡΠ΅
Π‘Π»ΡΡΠ°Π²ΠΌΠ΅ ΠΈΠ·Π²Π΅ΡΡΠ°ΠΈ Π΄Π²Π°ΡΠ° Π΄Π΅Π½Π°. ΠΠ° ΠΌΠΎΠΌΠ΅Π½ΡΠΈ Π±Π΅ΡΠ΅ ΡΠ΅ΡΠΊΠΎ Π΄Π° ΡΠ΅ ΠΈΠ·Π±Π΅ΡΠ΅ Π΅Π΄Π΅Π½ ΠΈΠ·Π²Π΅ΡΡΠ°Ρ ΠΎΠ΄ ΠΏΠ°ΡΠ°Π»Π΅Π»Π½ΠΈΡΠ΅ - ΡΠ΅ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠ²ΠΌΠ΅ Π΄Π° ΡΠ΅ ΡΠ°Π·Π΄Π΅Π»ΠΈΠΌΠ΅ ΠΈ Π΄Π° Π³ΠΎ ΡΠ°Π·ΠΌΠ΅Π½ΠΈΠΌΠ΅ Π·Π½Π°Π΅ΡΠ΅ΡΠΎ ΡΡΠ΅ΠΊΠ½Π°ΡΠΎ Π·Π° Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΏΠ°ΡΠ·ΠΈΡΠ΅. Π ΠΏΠΎΠΊΡΠ°Ρ ΡΠΎΠ°, ΡΠ΅ ΡΠΈΠ½ΠΈ Π΄Π΅ΠΊΠ° ΠΌΠ½ΠΎΠ³Ρ Π΅ ΠΈΠ·ΠΎΡΡΠ°Π²Π΅Π½ΠΎ. ΠΠ²Π΄Π΅ Π±ΠΈ ΡΠ°ΠΊΠ°Π»Π΅ Π΄Π° Π·Π±ΠΎΡΡΠ²Π°ΠΌΠ΅ Π·Π° ΡΠΎΠ΄ΡΠΆΠΈΠ½Π°ΡΠ° Π½Π° Π½Π΅ΠΊΠΎΠΈ ΠΎΠ΄ ΠΈΠ·Π²Π΅ΡΡΠ°ΠΈΡΠ΅ ΠΊΠΎΠΈ Π½ΠΈ ΡΠ΅ Π½Π°ΡΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΈ
ΠΡΠΊΠ»ΡΡΠΎΡΠΈ Π²ΠΎ C++ Π½ΠΈΠ· ΠΏΡΠΈΠ·ΠΌΠ°ΡΠ° Π½Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈΡΠ΅ Π½Π° ΠΊΠΎΠΌΠΏΠ°ΡΠ»Π΅ΡΠΈΡΠ΅, Π ΠΎΠΌΠ°Π½ Π ΡΡΡΠ°Π΅Π²
ΠΠΈΠ·Π³Π°ΡΡΠ΅ ΠΎΠ΄
ΠΠ°ΠΊΠΎ ΡΡΠΎ ΡΡΠ³Π΅ΡΠΈΡΠ° Π½Π°ΡΠ»ΠΎΠ²ΠΎΡ, Π ΠΎΠΌΠ°Π½ Π³Π»Π΅Π΄Π°Π» Π½Π° ΡΠ°Π±ΠΎΡΠ° ΡΠΎ ΠΈΡΠΊΠ»ΡΡΠΎΡΠΈ ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ Π³ΠΎ LLVM ΠΊΠ°ΠΊΠΎ ΠΏΡΠΈΠΌΠ΅Ρ. ΠΠΎ ΠΈΡΡΠΎ Π²ΡΠ΅ΠΌΠ΅, Π·Π° ΠΎΠ½ΠΈΠ΅ ΠΊΠΎΠΈ Π½Π΅ ΠΊΠΎΡΠΈΡΡΠ°Ρ Clang Π²ΠΎ ΡΠ²ΠΎΡΠ°ΡΠ° ΡΠ°Π±ΠΎΡΠ°, ΠΈΠ·Π²Π΅ΡΡΠ°ΡΠΎΡ ΡΓ¨ ΡΡΡΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄Π°Π΄Π΅ ΠΎΠ΄ΡΠ΅Π΄Π΅Π½Π° ΠΈΠ΄Π΅ΡΠ° Π·Π° ΡΠΎΠ° ΠΊΠ°ΠΊΠΎ ΠΊΠΎΠ΄ΠΎΡ ΠΏΠΎΡΠ΅Π½ΡΠΈΡΠ°Π»Π½ΠΎ Π±ΠΈ ΠΌΠΎΠΆΠ΅Π» Π΄Π° ΡΠ΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°. Π’ΠΎΠ° Π΅ ΡΠ°ΠΊΠ° Π·Π°ΡΠΎΠ° ΡΡΠΎ ΡΠ°Π·Π²ΠΈΠ²Π°ΡΠΈΡΠ΅ Π½Π° ΠΊΠΎΠΌΠΏΠ°ΡΠ»Π΅ΡΠΈ ΠΈ ΡΠΎΠΎΠ΄Π²Π΅ΡΠ½ΠΈΡΠ΅ ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΊΠΎΠΌΡΠ½ΠΈΡΠΈΡΠ°Π°Ρ Π΅Π΄Π½ΠΈ ΡΠΎ Π΄ΡΡΠ³ΠΈ ΠΈ ΠΌΠ½ΠΎΠ³Ρ ΡΡΠΏΠ΅ΡΠ½ΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΡΠΎΠ²ΠΏΠ°Π΄Π½Π°Ρ.
ΠΠ½Π°ΡΠΈ, Π·Π° Π΄Π° ΡΠ΅ ΡΠΏΡΠ°Π²ΠΈΡΠ΅ ΡΠΎ ΠΈΡΠΊΠ»ΡΡΠΎΠΊ, ΡΡΠ΅Π±Π° Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ ΠΌΠ½ΠΎΠ³Ρ ΡΠ°Π±ΠΎΡΠΈ: ΠΏΠΎΠ²ΠΈΠΊΠ°ΡΡΠ΅ Π³ΠΎ ΠΊΠΎΠ΄ΠΎΡ Π·Π° ΡΠ°ΠΊΡΠ²Π°ΡΠ΅ (Π°ΠΊΠΎ ΠΈΠΌΠ°) ΠΈΠ»ΠΈ Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΠΈ ΡΠ΅ΡΡΡΡΠΈ Π½Π° ΡΠ΅ΠΊΠΎΠ²Π½ΠΎΡΠΎ Π½ΠΈΠ²ΠΎ ΠΈ Π²ΡΡΠ΅ΡΠ΅ Π³ΠΎ ΠΎΡΠ°ΠΊΠΎΡ ΠΏΠΎΠ²ΠΈΡΠΎΠΊΠΎ. Π‘Π΅ΡΠΎ ΠΎΠ²Π° Π²ΠΎΠ΄ΠΈ Π΄ΠΎ ΡΠ°ΠΊΡΠΎΡ Π΄Π΅ΠΊΠ° ΠΊΠΎΠΌΠΏΠ°ΡΠ»Π΅ΡΠΎΡ Π΄ΠΎΠ΄Π°Π²Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π·Π° ΠΏΠΎΠ²ΠΈΡΠΈ ΠΊΠΎΠΈ ΠΏΠΎΡΠ΅Π½ΡΠΈΡΠ°Π»Π½ΠΎ ΡΡΠ»Π°Π°Ρ ΠΈΡΠΊΠ»ΡΡΠΎΡΠΈ. ΠΠ°ΡΠΎΠ°, Π°ΠΊΠΎ ΠΈΡΠΊΠ»ΡΡΠΎΠΊΠΎΡ Π²ΡΡΡΠ½ΠΎΡΡ Π½Π΅ ΡΠ΅ ΠΏΠΎΠ΄ΠΈΠ³Π½Π΅, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° ΡΠ΅ΠΏΠ°ΠΊ ΡΠ΅ Π²ΡΡΠΈ Π½Π΅ΠΏΠΎΡΡΠ΅Π±Π½ΠΈ Π΄Π΅ΡΡΡΠ²Π°. Π‘ΠΎ ΡΠ΅Π» Π½Π΅ΠΊΠ°ΠΊΠΎ Π΄Π° Π³ΠΈ Π½Π°ΠΌΠ°Π»ΠΈ ΡΡΠΎΡΠΎΡΠΈΡΠ΅, LLVM ΠΈΠΌΠ° Π½Π΅ΠΊΠΎΠ»ΠΊΡ Ρ Π΅ΡΡΠΈΡΡΠΈΠΊΠΈ Π·Π° ΠΎΠ΄ΡΠ΅Π΄ΡΠ²Π°ΡΠ΅ ΡΠΈΡΡΠ°ΡΠΈΠΈ ΠΊΠΎΠ³Π° ΠΊΠΎΠ΄ΠΎΡ Π·Π° ΡΠ°ΠΊΡΠ²Π°ΡΠ΅ ΡΠΎ ΠΈΡΠΊΠ»ΡΡΠΎΡΠΈ Π½Π΅ ΡΡΠ΅Π±Π° Π΄Π° ΡΠ΅ Π΄ΠΎΠ΄Π°Π²Π° ΠΈΠ»ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π½Π°ΠΌΠ°Π»ΠΈ Π±ΡΠΎΡΠΎΡ Π½Π° βΠ΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈβ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ.
ΠΠΎΠ²ΠΎΡΠ½ΠΈΠΊΠΎΡ ΠΈΡΠΏΠΈΡΡΠ²Π° ΠΎΠΊΠΎΠ»Ρ Π΄Π΅ΡΠ΅ΡΠΈΠ½Π° ΠΎΠ΄ Π½ΠΈΠ² ΠΈ Π³ΠΈ ΠΏΡΠΈΠΊΠ°ΠΆΡΠ²Π° Π΄Π²Π΅ΡΠ΅ ΡΠΈΡΡΠ°ΡΠΈΠΈ ΠΊΠ°Π΄Π΅ ΡΡΠΎ ΠΏΠΎΠΌΠ°Π³Π°Π°Ρ Π΄Π° ΡΠ΅ Π·Π°Π±ΡΠ·Π° ΠΈΠ·Π²ΡΡΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° ΠΈ ΠΎΠ½ΠΈΠ΅ ΠΊΠ°Π΄Π΅ ΡΡΠΎ ΠΎΠ²ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄ΠΈ Π½Π΅ ΡΠ΅ ΠΏΡΠΈΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ.
Π’Π°ΠΊΠ°, Π ΠΎΠΌΠ°Π½ Π ΡΡΡΠ°Π΅Π² Π³ΠΈ Π½Π°Π²Π΅Π΄ΡΠ²Π° ΡΡΡΠ΄Π΅Π½ΡΠΈΡΠ΅ Π΄ΠΎ Π·Π°ΠΊΠ»ΡΡΠΎΠΊ Π΄Π΅ΠΊΠ° ΠΊΠΎΠ΄ΠΎΡ ΡΡΠΎ ΡΠΎΠ΄ΡΠΆΠΈ ΡΠ°ΠΊΡΠ²Π°ΡΠ΅ ΡΠΎ ΠΈΡΠΊΠ»ΡΡΠΎΡΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅ ΡΠ΅ΠΊΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΠΈΠ·Π²ΡΡΠΈ ΡΠΎ Π½ΡΠ»Π° Π½Π°Π΄Π·Π΅ΠΌΠ½ΠΈ ΡΡΠΎΡΠΎΡΠΈ ΠΈ Π³ΠΎ Π΄Π°Π²Π° ΡΠ»Π΅Π΄Π½ΠΈΠΎΡ ΡΠΎΠ²Π΅Ρ:
- ΠΊΠΎΠ³Π° ΡΠ΅ ΡΠ°Π·Π²ΠΈΠ²Π°Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, Π²ΡΠ΅Π΄ΠΈ Π΄Π° ΡΠ΅ Π½Π°ΠΏΡΡΡΠ°Ρ ΠΈΡΠΊΠ»ΡΡΠΎΡΠΈΡΠ΅ Π²ΠΎ ΠΏΡΠΈΠ½ΡΠΈΠΏ;
- Π°ΠΊΠΎ ΡΓ¨ ΡΡΡΠ΅ ΡΠ΅ ΠΏΠΎΡΡΠ΅Π±Π½ΠΈ ΠΈΡΠΊΠ»ΡΡΠΎΡΠΈ, ΡΠΎΠ³Π°Ρ ΡΠ΅ΠΊΠΎΠ³Π°Ρ ΠΊΠΎΠ³Π° Π΅ ΠΌΠΎΠΆΠ½ΠΎ, Π²ΡΠ΅Π΄ΠΈ Π΄Π° ΡΠ΅ Π΄ΠΎΠ΄Π°Π²Π°Π°Ρ noexcept (ΠΈ const) ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΈ Π½Π°ΡΠ΅ΠΊΠ°Π΄Π΅ Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅ ΠΊΠΎΠΌΠΏΠ°ΡΠ»Π΅ΡΠΎΡ Π΄Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ° ΡΡΠΎ Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ²Π΅ΡΠ΅.
ΠΠ΅Π½Π΅ΡΠ°Π»Π½ΠΎ, Π³ΠΎΠ²ΠΎΡΠ½ΠΈΠΊΠΎΡ Π³ΠΎ ΠΏΠΎΡΠ²ΡΠ΄ΠΈ ΡΡΠ°Π²ΠΎΡ Π΄Π΅ΠΊΠ° ΠΈΡΠΊΠ»ΡΡΠΎΡΠΈΡΠ΅ Π½Π°ΡΠ΄ΠΎΠ±ΡΠΎ ΡΠ΅ ΠΈΡΠΊΠΎΡΠΈΡΡΡΠ²Π°Π°Ρ Π½Π° ΠΌΠΈΠ½ΠΈΠΌΡΠΌ ΠΈΠ»ΠΈ ΡΠ΅Π»ΠΎΡΠ½ΠΎ ΡΠ΅ Π½Π°ΠΏΡΡΡΠ°Π°Ρ.
Π‘Π»Π°ΡΠ΄ΠΎΠ²ΠΈΡΠ΅ ΠΎΠ΄ ΠΈΠ·Π²Π΅ΡΡΠ°ΡΠΎΡ ΡΠ΅ Π΄ΠΎΡΡΠ°ΠΏΠ½ΠΈ Π½Π° ΡΠ»Π΅Π΄Π½ΠΈΠΎΡ Π»ΠΈΠ½ΠΊ:
ΠΠ΅Π½Π΅ΡΠ°ΡΠΎΡΠΈ, ΠΊΠΎΡΡΡΠΈΠ½ΠΈ ΠΈ Π΄ΡΡΠ³Π° ΡΠ»Π°Π΄ΠΎΡΡ ΡΡΠΎ Π³ΠΎ ΠΎΠ΄Π²ΠΈΡΠΊΡΠ²Π° ΠΌΠΎΠ·ΠΎΠΊΠΎΡ, ΠΠ΄ΠΈ Π¨Π°Π²ΠΈΡ
ΠΠΈΠ·Π³Π°ΡΡΠ΅ ΠΎΠ΄
ΠΠ΄Π΅Π½ ΠΎΠ΄ ΠΌΠ½ΠΎΠ³ΡΡΠ΅ ΠΈΠ·Π²Π΅ΡΡΠ°ΠΈ Π½Π° ΠΎΠ²Π°Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΡΠ° ΠΏΠΎΡΠ²Π΅ΡΠ΅Π½Π° Π½Π° ΠΈΠ½ΠΎΠ²Π°ΡΠΈΠΈΡΠ΅ Π²ΠΎ C++20 Π±Π΅ΡΠ΅ Π·Π°ΠΏΠ°ΠΌΠ΅ΡΠ΅Π½ Π½Π΅ ΡΠ°ΠΌΠΎ ΠΏΠΎ Π½Π΅ΡΠ·ΠΈΠ½Π°ΡΠ° ΠΆΠΈΠ²ΠΎΠΏΠΈΡΠ½Π° ΠΏΡΠ΅Π·Π΅Π½ΡΠ°ΡΠΈΡΠ°, ΡΡΠΊΡ ΠΈ ΠΏΠΎ ΡΠ°ΡΠ½ΠΎΡΠΎ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΡΠ²Π°ΡΠ΅ Π½Π° ΠΏΠΎΡΡΠΎΠ΅ΡΠΊΠΈΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ ΡΠΎ Π»ΠΎΠ³ΠΈΠΊΠ°ΡΠ° Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΠΊΠΎΠ»Π΅ΠΊΡΠΈΡΠ°ΡΠ° (Π·Π° ΡΠ°ΠΌΠΊΠ°, ΠΏΠΎΠ²ΡΠ°ΡΠ½ΠΈ ΠΏΠΎΠ²ΠΈΡΠΈ).
ΠΠ΄ΠΈ Π¨Π°Π²ΠΈΡ Π³ΠΎ ΠΈΡΡΠ°ΠΊΠ½ΡΠ²Π° ΡΠ»Π΅Π΄Π½ΠΎΠ²ΠΎ: ΠΌΠΎΠΌΠ΅Π½ΡΠ°Π»Π½ΠΎ Π΄ΠΎΡΡΠ°ΠΏΠ½ΠΈΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄ΠΈ ΠΌΠΈΠ½ΡΠ²Π°Π°Ρ Π½ΠΈΠ· ΡΠ΅Π»Π°ΡΠ° ΠΊΠΎΠ»Π΅ΠΊΡΠΈΡΠ° ΠΈ Π½Π΅ ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡΠ²Π°Π°Ρ ΠΏΡΠΈΡΡΠ°ΠΏ Π΄ΠΎ Π½Π΅ΠΊΠΎΡΠ° Π²Π½Π°ΡΡΠ΅ΡΠ½Π° ΡΡΠ΅Π΄Π½Π° ΡΠΎΡΡΠΎΡΠ±Π° (ΠΈΠ»ΠΈ ΡΠΈΠ΅ Π³ΠΎ ΠΏΡΠ°Π²Π°Ρ Π²ΠΎ ΡΠ»ΡΡΠ°Ρ Π½Π° ΠΏΠΎΠ²ΡΠ°ΡΠ½ΠΈ ΠΏΠΎΠ²ΠΈΡΠΈ, Π½ΠΎ ΡΠΎ Π³ΠΎΠ»Π΅ΠΌ Π±ΡΠΎΡ Π½Π΅ΠΏΡΠΈΡΠ°ΡΠ½ΠΈ Π½Π΅ΡΠ°ΠΊΠ°Π½ΠΈ Π΅ΡΠ΅ΠΊΡΠΈ, ΠΊΠ°ΠΊΠΎ ΡΡΠΎ Π΅ ΠΠΎΠ²ΡΠ°ΡΠ΅Π½ ΠΏΠΎΠ²ΠΈΠΊ ΠΏΠ΅ΠΊΠΎΠ») . Π‘Π΅ ΡΠΈΠ½ΠΈ Π΄Π΅ΠΊΠ° ΠΈΠΌΠ° ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠΈ, Π½ΠΎ Π΄ΡΡΠΈ ΠΈ ΡΠΎ Π½ΠΈΠ² ΡΓ¨ Π½Π΅ Π΅ ΡΠΎΠ»ΠΊΡ ΠΌΠ°Π·Π½ΠΎ: Π½Π΅ΠΌΠ° Π·Π°Π΅Π΄Π½ΠΈΡΠΊΠΈ Π²Π»Π΅Π·Π½ΠΈ ΠΈ ΠΈΠ·Π»Π΅Π·Π½ΠΈ ΡΠΎΡΠΊΠΈ (ΠΏΠΎΡΠ΅ΡΠΎΠΊ β ΠΊΡΠ°Ρ Π½Π°ΡΠΏΡΠΎΡΠΈ rbegin β rend ΠΈ ΡΠ°ΠΊΠ° Π½Π°ΡΠ°ΠΌΡ), Π½Π΅ Π΅ ΡΠ°ΡΠ½ΠΎ ΠΊΠΎΠ»ΠΊΡ Π΄ΠΎΠ»Π³ΠΎ ΡΠ΅ ΠΏΠΎΠ²ΡΠΎΡΡΠ²Π°ΠΌΠ΅? ΠΠΎΡΠ½ΡΠ²Π°ΡΡΠΈ ΠΎΠ΄ C++20, ΠΎΠ²ΠΈΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ ΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈ!
ΠΡΠ²Π° ΠΎΠΏΡΠΈΡΠ°: ΠΎΠΏΡΠ΅Π·ΠΈ. Π‘ΠΎ Π·Π°Π²ΠΈΡΠΊΡΠ²Π°ΡΠ΅ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠΈ, Π΄ΠΎΠ±ΠΈΠ²Π°ΠΌΠ΅ Π·Π°Π΅Π΄Π½ΠΈΡΠΊΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΡΡ Π·Π° ΠΏΠΎΡΠ΅ΡΠΎΠΊΠΎΡ ΠΈ ΠΊΡΠ°ΡΠΎΡ Π½Π° ΠΈΡΠ΅ΡΠ°ΡΠΈΡΠ°ΡΠ°, Π° Π΄ΠΎΠ±ΠΈΠ²Π°ΠΌΠ΅ ΠΈ ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΊΠΎΠΌΠΏΠΎΠ½ΠΈΡΠ°ΡΠ΅. Π‘Π΅ΡΠΎ ΠΎΠ²Π° Π³ΠΎ ΠΎΠ»Π΅ΡΠ½ΡΠ²Π° ΠΈΠ·Π³ΡΠ°Π΄Π±Π°ΡΠ° Π½Π° ΠΏΠΎΠ»Π½ΠΎΠΏΡΠ°Π²Π½ΠΈ ΡΠ΅Π²ΠΊΠΎΠ²ΠΎΠ΄ΠΈ Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ. ΠΠΎ, Π½Π΅ Π΅ ΡΓ¨ ΡΠΎΠ»ΠΊΡ ΠΌΠ°Π·Π½ΠΎ: Π΄Π΅Π» ΠΎΠ΄ Π»ΠΎΠ³ΠΈΠΊΠ°ΡΠ° Π·Π° ΠΏΡΠ΅ΡΠΌΠ΅ΡΠΊΠ° ΡΠ΅ Π½Π°ΠΎΡΠ° Π²ΠΎ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ°ΡΠ° Π½Π° ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅Π½ ΠΈΡΠ΅ΡΠ°ΡΠΎΡ, ΡΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π³ΠΎ ΠΊΠΎΠΌΠΏΠ»ΠΈΡΠΈΡΠ° ΠΊΠΎΠ΄ΠΎΡ Π·Π° ΡΠ°Π·Π±ΠΈΡΠ°ΡΠ΅ ΠΈ Π΄Π΅Π±Π°Π³ΠΈΡΠ°ΡΠ΅.
ΠΠΈΠ·Π³Π°ΡΡΠ΅ ΠΎΠ΄
ΠΠ°, Π·Π° ΠΎΠ²ΠΎΡ ΡΠ»ΡΡΠ°Ρ, C++20 Π΄ΠΎΠ΄Π°Π΄Π΅ ΠΊΠΎΡΡΡΠΈΠ½ΠΈ (ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠΈΠ΅ ΠΎΠ΄Π½Π΅ΡΡΠ²Π°ΡΠ΅ Π΅ ΡΠ»ΠΈΡΠ½ΠΎ Π½Π° Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠΈΡΠ΅ Π²ΠΎ Python): ΠΈΠ·Π²ΡΡΡΠ²Π°ΡΠ΅ΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΎΠ΄Π»ΠΎΠΆΠΈ ΡΠΎ Π²ΡΠ°ΡΠ°ΡΠ΅ Π½Π° Π½Π΅ΠΊΠΎΡΠ° ΡΠ΅ΠΊΠΎΠ²Π½Π° Π²ΡΠ΅Π΄Π½ΠΎΡΡ Π΄ΠΎΠ΄Π΅ΠΊΠ° ΡΠ΅ Π·Π°ΡΡΠ²Π° ΡΡΠ΅Π΄Π½Π°ΡΠ° ΡΠΎΡΡΠΎΡΠ±Π°. Π’Π°ΠΊΠ°, ΠΏΠΎΡΡΠΈΠ³Π½ΡΠ²Π°ΠΌΠ΅ Π½Π΅ ΡΠ°ΠΌΠΎ Π΄Π° ΡΠ°Π±ΠΎΡΠΈΠΌΠ΅ ΡΠΎ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΠΊΠ°ΠΊΠΎ ΡΡΠΎ ΠΈΠ·Π³Π»Π΅Π΄Π°Π°Ρ, ΡΡΠΊΡ ΠΈ Π΄Π° ΡΠ° ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»ΠΈΡΠ°ΠΌΠ΅ ΡΠ΅Π»Π°ΡΠ° Π»ΠΎΠ³ΠΈΠΊΠ° Π²ΠΎ ΠΎΠ΄ΡΠ΅Π΄Π΅Π½Π° ΠΊΠΎΡΡΡΠΈΠ½Π°.
ΠΠΎ, ΠΈΠΌΠ° ΠΌΡΠ²Π° Π²ΠΎ ΠΌΠ°ΡΡ: Π²ΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠΎΡ ΡΠΈΠ΅ ΡΠ΅ ΡΠ°ΠΌΠΎ Π΄Π΅Π»ΡΠΌΠ½ΠΎ ΠΏΠΎΠ΄Π΄ΡΠΆΠ°Π½ΠΈ ΠΎΠ΄ ΠΏΠΎΡΡΠΎΡΠ½ΠΈΡΠ΅ ΠΊΠΎΠΌΠΏΠ°ΡΠ»Π΅ΡΠΈ, Π° ΠΈΡΡΠΎ ΡΠ°ΠΊΠ° Π½Π΅ ΡΠ΅ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ°Π½ΠΈ ΡΠΎΠ»ΠΊΡ ΡΡΠ΅Π΄Π½ΠΎ ΠΊΠ°ΠΊΠΎ ΡΡΠΎ Π±ΠΈ ΡΠ°ΠΊΠ°Π»Π΅: Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ, ΡΓ¨ ΡΡΡΠ΅ Π½Π΅ Π²ΡΠ΅Π΄ΠΈ Π΄Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ°Ρ ΡΠ΅ΡΠ΅ΡΠ΅Π½ΡΠΈ ΠΈ ΠΏΡΠΈΠ²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠΈ Π²ΠΎ ΠΊΠΎΡΡΡΠΈΠ½ΠΈΡΠ΅. ΠΠ»ΡΡ, ΠΈΠΌΠ° Π½Π΅ΠΊΠΎΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΡΠ²Π°ΡΠ° Π·Π° ΡΠΎΠ° ΡΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΠΈΠ΄Π΅ ΠΊΠΎΡΡΡΠΈΠ½ΠΈ, Π° ΡΡΠ½ΠΊΡΠΈΠΈΡΠ΅ Π½Π° constexpr, ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠΈΡΠ΅/Π΄Π΅ΡΡΡΡΠΊΡΠΎΡΠΈΡΠ΅ ΠΈ Π³Π»Π°Π²Π½ΠΈΡΠ΅ Π½Π΅ ΡΠ΅ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈ Π²ΠΎ ΠΎΠ²Π°Π° Π»ΠΈΡΡΠ°.
Π’Π°ΠΊΠ°, ΠΊΠΎΡΡΡΠΈΠ½ΠΈΡΠ΅ ΡΠ΅ΡΠ°Π²Π°Π°Ρ Π·Π½Π°ΡΠΈΡΠ΅Π»Π΅Π½ Π΄Π΅Π» ΠΎΠ΄ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈΡΠ΅ ΡΠΎ Π΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΎΡΡΠ° Π½Π° Π»ΠΎΠ³ΠΈΠΊΠ°ΡΠ° Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ, Π½ΠΎ Π½ΠΈΠ²Π½ΠΈΡΠ΅ ΠΌΠΎΠΌΠ΅Π½ΡΠ°Π»Π½ΠΈ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Π±Π°ΡΠ°Π°Ρ ΠΏΠΎΠ΄ΠΎΠ±ΡΡΠ²Π°ΡΠ΅.
ΠΠ°ΡΠ΅ΡΠΈΡΠ°Π»ΠΈ:
- Π‘Π»Π°ΡΠ΄ΠΎΠ²ΠΈ ΠΎΠ΄ C++ Π ΡΡΠΈΡΠ° -
[βΠΠ΅Π½Π΅ΡΠ°ΡΠΎΡΠΈ, ΠΊΠΎΡΡΡΠΈΠ½ΠΈ ΠΈ Π΄ΡΡΠ³Π° ΡΠ»Π°Π΄ΠΎΡΡ ΡΡΠΎ Π³ΠΎ ΠΎΠ΄Π²ΠΈΡΠΊΡΠ²Π° ΠΌΠΎΠ·ΠΎΠΊΠΎΡβ] ΠΠΈΠ΄Π΅ΠΎ ΡΠ½ΠΈΠΌΠΊΠ° ΠΎΠ΄ ΠΈΠ·Π²Π΅ΡΡΠ°ΡΠΎΡ ΠΎΠ΄ CppCon 2019 Π³ΠΎΠ΄ΠΈΠ½Π°
C++ ΡΡΠΈΠΊΠΎΠ²ΠΈ ΠΎΠ΄ Yandex.Taxi, ΠΠ½ΡΠΎΠ½ ΠΠΎΠ»ΡΡ ΠΈΠ½
ΠΠΎ ΠΌΠΎΠΈΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΠΈΠΎΠ½Π°Π»Π½ΠΈ Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ, ΠΏΠΎΠ½Π΅ΠΊΠΎΠ³Π°Ρ ΠΌΠΎΡΠ°ΠΌ Π΄Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ°ΠΌ ΡΠΈΡΡΠΎ ΠΏΠΎΠΌΠΎΡΠ½ΠΈ ΡΠ°Π±ΠΎΡΠΈ: ΠΎΠ±Π²ΠΈΠ²ΠΊΠ° ΠΏΠΎΠΌΠ΅ΡΡ Π²Π½Π°ΡΡΠ΅ΡΠ½ΠΈΠΎΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΡΡ ΠΈ API Π½Π° Π½Π΅ΠΊΠΎΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°, Π»ΠΎΠ³ΠΈΡΠ°ΡΠ΅ ΠΈΠ»ΠΈ ΠΏΠ°ΡΡΠΈΡΠ°ΡΠ΅. ΠΠΎ ΠΎΠ²ΠΎΡ ΡΠ»ΡΡΠ°Ρ, ΠΎΠ±ΠΈΡΠ½ΠΎ Π½Π΅ΠΌΠ° ΠΏΠΎΡΡΠ΅Π±Π° ΠΎΠ΄ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Π½Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡΠ°. ΠΠΎ, ΡΡΠΎ Π°ΠΊΠΎ ΠΎΠ²ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ°Ρ Π²ΠΎ Π½Π΅ΠΊΠΎΠΈ ΠΎΠ΄ Π½Π°ΡΠΏΠΎΠΏΡΠ»Π°ΡΠ½ΠΈΡΠ΅ ΡΡΠ»ΡΠ³ΠΈ Π½Π° RuNet? ΠΠΎ ΡΠ°ΠΊΠ²Π° ΡΠΈΡΡΠ°ΡΠΈΡΠ°, ΡΠ΅ ΡΡΠ΅Π±Π° ΡΠ°ΠΌΠΈ Π΄Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠ²Π°ΡΠ΅ ΡΠ΅ΡΠ°Π±Π°ΡΡΠΈ Π½Π° ΡΠ°Ρ Π΄Π½Π΅Π²Π½ΠΈΡΠΈ! Π’ΠΎΠ³Π°Ρ ΡΠ΅ΠΊΠΎΡΠ° ΠΌΠΈΠ»ΠΈΡΠ΅ΠΊΡΠ½Π΄Π° Π΅ Π²Π°ΠΆΠ½Π° ΠΈ Π·Π°ΡΠΎΠ° ΡΡΠ΅Π±Π° Π΄Π° ΠΏΡΠΈΠ±Π΅Π³Π½ΡΠ²Π°ΡΠ΅ ΠΊΠΎΠ½ ΡΠ°Π·Π½ΠΈ ΡΡΠΈΠΊΠΎΠ²ΠΈ - Π·Π±ΠΎΡΡΠ²Π°ΡΠ΅ Π·Π° Π½ΠΈΠ² ΠΠ½ΡΠΎΠ½ ΠΠΎΠ»ΡΡ ΠΈΠ½.
ΠΠΎΠΆΠ΅Π±ΠΈ Π½Π°ΡΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΈΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ Π±Π΅ΡΠ΅ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ°ΡΠ° Π½Π° ΡΠ°Π±Π»ΠΎΠ½ΠΎΡ ΠΏΠΎΠΊΠ°ΠΆΡΠ²Π°Ρ-Π΄ΠΎ-ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ° (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: Π½ΠΈ ΡΡΠ΅Π±Π° Π½Π°ΠΏΡΠ΅Π΄-Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΡΠ° Π½Π° Π·Π°Π²ΠΈΡΠΊΠ°Π½ΠΈΠΎΡ 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 ΡΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ , Π΄Π° ΠΊΠΎΡΠΈΡΡΠΈΠΌΠ΅ Π½Π΅ΠΊΠΎΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΈ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ ΠΈ Π΄Π° Π΄ΠΎΠ΄Π°Π΄Π΅ΠΌΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° Π΄Π΅ΡΡΡΡΠΊΡΠΎΡΠΎΡ Π΄Π΅ΠΊΠ° ΡΠΌΠ΅ ΠΏΠΎΠ³ΠΎΠ΄ΠΈΠ»Π΅ ΡΓ¨ ΠΊΠ°ΠΊΠΎ ΡΡΠΎ ΡΡΠ΅Π±Π° :
~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 ΡΠΎ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ°ΡΠ°, Π° ΠΈΡΡΠΎ ΡΠ°ΠΊΠ° Π΄ΠΎΠ±ΠΈΠ²Π°ΠΌΠ΅ Π΄ΠΈΠ·Π°ΡΠ½ ΠΊΠΎΡ Π΅ ΠΏΠΎΡΠΎΠΎΠ΄Π²Π΅ΡΠ΅Π½ Π·Π° ΠΊΠ΅ΡΠΈΡΠ°ΡΠ΅ ΠΎΠ΄ ΠΏΡΠΎΡΠ΅ΡΠΎΡΠΎΡ.
ΠΠ²ΠΈΠ΄Π΅Π½ΡΠΈΡΠ°ΡΠ° ΠΈ ΠΏΠ°ΡΡΠΈΡΠ°ΡΠ΅ΡΠΎ ΠΈΠ·Π³Π»Π΅Π΄Π°Π° ΠΏΠΎΠΌΠ°Π»ΠΊΡ ΠΈΠΌΠΏΡΠ΅ΡΠΈΠ²Π½ΠΈ ΠΈ Π·Π°ΡΠΎΠ° Π½Π΅ΠΌΠ° Π΄Π° Π±ΠΈΠ΄Π°Ρ ΡΠΏΠΎΠΌΠ΅Π½Π°ΡΠΈ Π²ΠΎ ΠΎΠ²ΠΎΡ ΠΏΡΠ΅Π³Π»Π΅Π΄.
Π‘Π»Π°ΡΠ΄ΠΎΠ²ΠΈΡΠ΅ ΠΎΠ΄ ΠΈΠ·Π²Π΅ΡΡΠ°ΡΠΎΡ ΡΠ΅ Π΄ΠΎΡΡΠ°ΠΏΠ½ΠΈ Π½Π° ΡΠ»Π΅Π΄Π½ΠΈΠΎΡ Π»ΠΈΠ½ΠΊ:
Π‘ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΡΠ΅Ρ Π½ΠΈΠΊΠΈ Π·Π° ΡΡΠ²Π°ΡΠ΅ Π½Π° Π²Π°ΡΠΈΠΎΡ ΠΊΠΎΠ΄ Π‘Π£ΠΠ, ΠΡΠΎΡΠ½ Π€Π°Π»Π΅Ρ
ΠΠΎ ΠΎΠ²ΠΎΡ Π³ΠΎΠ²ΠΎΡ, ΠΡΠΎΡΠ½ Π€Π°Π»Π΅Ρ ΠΏΠΎΠΊΠ°ΠΆΡΠ²Π° Π½Π΅ΠΊΠΎΠ»ΠΊΡ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π½Π°ΡΠΈΠ½ΠΈ Π·Π° Π±ΠΎΡΠ±Π° ΠΏΡΠΎΡΠΈΠ² ΡΡΠΈΠ»ΡΠΊΠΈΠΎΡ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΠΊ Π½Π° ΠΏΠΎΠ²ΡΠΎΡΠ΅Π½ΠΈΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π½Π° ΡΠΎΡΡΠΎΡΠ±Π°ΡΠ°:
assert(a == IDLE || a == CONNECTED || a == DISCONNECTED);
ΠΠ²ΡΡΠΈ ΠΏΠΎΠ·Π½Π°ΡΠΎ? Π‘ΠΎ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ Π½Π° Π½Π΅ΠΊΠΎΠ»ΠΊΡ ΠΌΠΎΡΠ½ΠΈ C++ ΡΠ΅Ρ Π½ΠΈΠΊΠΈ Π²ΠΎΠ²Π΅Π΄Π΅Π½ΠΈ Π²ΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ ΡΡΠ°Π½Π΄Π°ΡΠ΄ΠΈ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΅Π»Π΅Π³Π°Π½ΡΠ½ΠΎ Π΄Π° ΡΠ° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ°ΡΠ΅ ΠΈΡΡΠ°ΡΠ° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡ Π±Π΅Π· Π½ΠΈΠΊΠ°ΠΊΠ²Π° ΠΊΠ°Π·Π½Π° Π·Π° ΠΈΠ·Π²Π΅Π΄Π±Π°ΡΠ°. Π‘ΠΏΠΎΡΠ΅Π΄ΠΈ:
assert(a == any_of(IDLE, CONNECTED, DISCONNECTED));
ΠΠ° Π΄Π° ΡΠ΅ ΡΠΏΡΠ°Π²ΠΈΡΠ΅ ΡΠΎ Π½Π΅ΡΠΈΠΊΡΠΈΡΠ°Π½ Π±ΡΠΎΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ, Π²Π΅Π΄Π½Π°Ρ ΡΡΠ΅Π±Π° Π΄Π° ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ Π²Π°ΡΠΈΡΠ°Π΄Π½ΠΈ ΡΠ°Π±Π»ΠΎΠ½ΠΈ ΠΈ ΠΈΠ·ΡΠ°Π·ΠΈ Π·Π° ΠΏΡΠ΅ΠΊΠ»ΠΎΠΏΡΠ²Π°ΡΠ΅. ΠΠ° ΠΏΡΠ΅ΡΠΏΠΎΡΡΠ°Π²ΠΈΠΌΠ΅ Π΄Π΅ΠΊΠ° ΡΠ°ΠΊΠ°ΠΌΠ΅ Π΄Π° ΡΠ° ΠΏΡΠΎΠ²Π΅ΡΠΈΠΌΠ΅ Π΅Π΄Π½Π°ΠΊΠ²ΠΎΡΡΠ° Π½Π° Π½Π΅ΠΊΠΎΠ»ΠΊΡ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ ΡΠΎ Π΅Π»Π΅ΠΌΠ΅Π½ΡΠΎΡ state_type Π½Π° enum. ΠΡΠ²ΠΎΡΠΎ Π½Π΅ΡΡΠΎ ΡΡΠΎ ΠΌΠΈ ΠΏΠ°ΡΠ° Π½Π° ΡΠΌ Π΅ Π΄Π° Π½Π°ΠΏΠΈΡΠ΅ΡΠ΅ ΠΏΠΎΠΌΠΎΡΠ½Π° ΡΡΠ½ΠΊΡΠΈΡΠ° 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));
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΡΠ΅ Π½Π° ΡΠ°Π±Π»ΠΎΠ½ΠΎΡ Π±Π΅Π· ΡΠΈΠΏ ΡΠ΅ ΠΏΠΎΠΌΠΎΠ³Π½Π°Ρ ΠΌΠ°Π»ΠΊΡ Π΄Π° ΡΠ΅ ΠΏΠΎΠ΄ΠΎΠ±ΡΠΈ ΡΠΈΡΡΠ°ΡΠΈΡΠ°ΡΠ°. Π‘ΠΎ Π½ΠΈΠ²Π½Π° ΠΏΠΎΠΌΠΎΡ, ΡΠ΅ Π³ΠΈ ΠΏΡΠ΅Π½Π΅ΡΠ΅ΠΌΠ΅ Π±ΡΠΎΡΠ½ΠΈΡΠ΅ Π΅Π»Π΅ΠΌΠ΅Π½ΡΠΈ Π½Π° Π΅Π½ΡΠΌΠΎΡ Π½Π° ΡΠΏΠΈΡΠΎΠΊΠΎΡ ΡΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ Π½Π° ΡΠ°Π±Π»ΠΎΠ½ΠΎΡ:
template <state_type ... states>
bool is_any_of(state_type t) {
return ((t == states) | ...);
}
assert(is_any_of<IDLE, DISCONNECTING, DISCONNECTED>(state));
Π‘ΠΎ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ Π½Π° Π°Π²ΡΠΎΠΌΠ°ΡΡΠΊΠΎ Π²ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΠ°Ρ Π½Π° ΡΠ°Π±Π»ΠΎΠ½ ΡΡΠΎ Π½Π΅ Π΅ ΡΠΈΠΏ (C++17), ΠΏΡΠΈΡΡΠ°ΠΏΠΎΡ Π΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΎ ΡΠ΅ Π³Π΅Π½Π΅ΡΠ°Π»ΠΈΠ·ΠΈΡΠ° Π½Π° ΡΠΏΠΎΡΠ΅Π΄Π±ΠΈΡΠ΅ Π½Π΅ ΡΠ°ΠΌΠΎ ΡΠΎ Π΅Π»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ΅ ΠΎΠ΄ ΡΠΈΠΏΠΎΡ Π½Π° ΡΠΎΡΡΠΎΡΠ±Π°, ΡΡΠΊΡ ΠΈ ΡΠΎ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΠΈΡΠ΅ ΡΠΈΠΏΠΎΠ²ΠΈ ΠΊΠΎΠΈ ΠΌΠΎΠΆΠ°Ρ Π΄Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ°Ρ ΠΊΠ°ΠΊΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ Π½Π° ΡΠ°Π±Π»ΠΎΠ½ΠΈΡΠ΅ ΡΡΠΎ Π½Π΅ ΡΠ΅ ΡΠΈΠΏΠΎΠ²ΠΈ:
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);
ΠΠΎ ΠΎΠ²ΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΠΎΠ΄ΠΈΡΠΎΡ Π·Π° Π΄Π΅Π΄ΡΠΊΡΠΈΡΠ° ΡΠ»ΡΠΆΠΈ Π·Π° ΡΡΠ³Π΅ΡΠΈΡΠ°ΡΠ΅ Π½Π° ΡΠ°ΠΊΠ°Π½ΠΈΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ Π½Π° ΡΠ°Π±Π»ΠΎΠ½ΠΎΡ Π·Π° ΡΡΡΡΠΊΡΡΡΠ° Π½Π° ΠΊΠΎΠΌΠΏΠ°ΡΠ»Π΅ΡΠΎΡ, ΠΊΠΎΡ Π³ΠΈ Π·Π½Π°Π΅ ΡΠΈΠΏΠΎΠ²ΠΈΡΠ΅ Π½Π° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΈΡΠ΅ Π½Π° ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠΎΡ.
ΠΠΎΠ½Π°ΡΠ°ΠΌΡ - ΠΏΠΎΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ. ΠΡΠΎΡΠ½ ΡΡΠΈ ΠΊΠ°ΠΊΠΎ Π΄Π° ΡΠ΅ Π³Π΅Π½Π΅ΡΠ°Π»ΠΈΠ·ΠΈΡΠ° Π΄ΠΎΠ±ΠΈΠ΅Π½ΠΈΠΎΡ ΠΊΠΎΠ΄ Π·Π° ΡΠΏΠΎΡΠ΅Π΄Π±Π΅Π½ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΈ Π½Π°Π΄Π²ΠΎΡ ΠΎΠ΄ ==, Π° ΠΏΠΎΡΠΎΠ° ΠΈ Π·Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ. ΠΠ°ΡΠ΅ΠΌ, ΠΊΠ°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈΡΠ΅ ΠΊΠ°ΠΊΠΎ Π°ΡΡΠΈΠ±ΡΡΠΎΡ no_unique_address (C++20) ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΡΠ΅ Π½Π° ΡΠ°Π±Π»ΠΎΠ½ΠΎΡ Π²ΠΎ Π»Π°ΠΌΠ±Π΄Π° ΡΡΠ½ΠΊΡΠΈΠΈΡΠ΅ (C++20) ΡΠ΅ ΠΎΠ±ΡΠ°ΡΠ½Π΅ΡΠΈ ΡΠΎ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠΈ Π·Π° ΡΠΏΠΎΡΡΠ΅Π±Π°. (ΠΠ°, ΡΠ΅Π³Π° ΡΠΈΠ½ΡΠ°ΠΊΡΠ°ΡΠ° Π»Π°ΠΌΠ±Π΄Π° Π΅ ΡΡΡΠ΅ ΠΏΠΎΠ»Π΅ΡΠ½Π° Π·Π° Π·Π°ΠΏΠΎΠΌΠ½ΡΠ²Π°ΡΠ΅ - ΠΎΠ²Π° ΡΠ΅ ΡΠ΅ΡΠΈΡΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΈ ΠΏΠ°ΡΠ° Π·Π°Π³ΡΠ°Π΄ΠΈ ΠΎΠ΄ ΡΠΈΡΠ΅ Π²ΠΈΠ΄ΠΎΠ²ΠΈ.) ΠΠΎΠ½Π΅ΡΠ½ΠΎΡΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΊΠ°ΠΊΠΎ Π΄Π΅ΡΠ°Π»ΠΈ Π·Π° ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ Π½Π°Π²ΠΈΡΡΠΈΠ½Π° ΠΌΠΈ ΡΠ° Π·Π°Π³ΡΠ΅Π²Π° Π΄ΡΡΠ°ΡΠ°, Π° Π΄Π° Π½Π΅ Π³ΠΎ ΡΠΏΠΎΠΌΠ½ΡΠ²Π°ΠΌΠ΅ ΠΈΠ·ΡΠ°Π·ΠΎΡ ΡΠΎΡΠΊΠ° Π²ΠΎ Π½Π°ΡΠ΄ΠΎΠ±ΡΠΈΡΠ΅ ΡΡΠ°Π΄ΠΈΡΠΈΠΈ Π½Π° Π»Π°ΠΌΠ±Π΄Π° ΠΊΠ°Π»ΠΊΡΠ»ΡΡ.
ΠΠ° ΠΊΡΠ°ΡΠΎΡ, Π½Π΅ Π·Π°Π±ΠΎΡΠ°Π²Π°ΡΡΠ΅ Π΄Π° Π³ΠΎ ΠΏΠΎΠ»ΠΈΡΠ°ΡΠ΅:
- ΠΠ°ΠΏΠΎΠΌΠ½Π΅ΡΠ΅ Π΄Π΅ΠΊΠ° Π»Π°ΠΌΠ±Π΄ΠΈΡΠ΅ ΡΠ΅ constexpr Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΠΎ;
- ΠΡΠ΄Π΅ Π΄Π° Π΄ΠΎΠ΄Π°Π΄Π΅ΠΌΠ΅ ΡΠΎΠ²ΡΡΠ΅Π½ΠΎ ΠΏΡΠ΅ΠΏΡΠ°ΡΠ°ΡΠ΅ ΠΈ Π΄Π° ΡΠ° ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌΠ΅ Π½Π΅Π³ΠΎΠ²Π°ΡΠ° Π³ΡΠ΄Π° ΡΠΈΠ½ΡΠ°ΠΊΡΠ° Π²ΠΎ ΠΎΠ΄Π½ΠΎΡ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΎΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ Π²ΠΎ Π»Π°ΠΌΠ±Π΄Π° Π·Π°ΡΠ²ΠΎΡΠ°ΡΠ΅ΡΠΎ;
- ΠΠ° ΠΌΡ Π΄Π°Π΄Π΅ΠΌΠ΅ Π½Π° ΠΊΠΎΠΌΠΏΠ°ΡΠ»Π΅ΡΠΎΡ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π·Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΡΠΎ ΡΡΠ»ΠΎΠ²Π½ΠΎ noexcept;
- ΠΡΠ΄Π΅ Π΄Π° ΡΠ΅ Π³ΡΠΈΠΆΠΈΠΌΠ΅ Π·Π° ΠΏΠΎΡΠ°Π·Π±ΠΈΡΠ»ΠΈΠ² ΠΈΠ·Π»Π΅Π· Π½Π° Π³ΡΠ΅ΡΠΊΠΈ Π²ΠΎ ΡΠ°Π±Π»ΠΎΠ½ΠΈΡΠ΅ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π° Π΅ΠΊΡΠΏΠ»ΠΈΡΠΈΡΠ½ΠΈΡΠ΅ ΠΏΠΎΠ²ΡΠ°ΡΠ½ΠΈ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ Π½Π° Π»Π°ΠΌΠ±Π΄Π°. ΠΠ²Π° ΡΠ΅ Π³ΠΎ ΠΏΡΠΈΠ½ΡΠ΄ΠΈ ΠΊΠΎΠΌΠΏΠ°ΡΠ»Π΅ΡΠΎΡ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΏΡΠ΅Π΄ Π²ΡΡΡΠ½ΠΎΡΡ Π΄Π° ΡΠ΅ ΠΏΠΎΠ²ΠΈΠΊΠ° ΡΡΠ½ΠΊΡΠΈΡΠ°ΡΠ° Π½Π° ΡΠ°Π±Π»ΠΎΠ½ΠΎΡ - Π²ΠΎ ΡΠ°Π·Π°ΡΠ° Π½Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΡΠΈΠΏΠΎΡ.
ΠΠ° Π΄Π΅ΡΠ°Π»ΠΈ, ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΡΠ΅ Π³ΠΈ ΠΌΠ°ΡΠ΅ΡΠΈΡΠ°Π»ΠΈΡΠ΅ ΠΎΠ΄ ΠΏΡΠ΅Π΄Π°Π²Π°ΡΠ΅ΡΠΎ:
- ΠΡΠΈΡΠ°Π²ΠΈ ΡΠ»Π°ΡΠ΄ΠΎΠ²ΠΈ:
[Π‘ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΡΠ΅Ρ Π½ΠΈΠΊΠΈ Π·Π° ΡΡΠ²Π°ΡΠ΅ Π½Π° Π²Π°ΡΠΈΠΎΡ ΠΊΠΎΠ΄ Π½Π° ΡΡΠ²ΠΎ] ΠΠ·Π²ΠΎΡΠ½ΠΈΠΎΡ ΠΊΠΎΠ΄ Π½Π° github Π‘ΡΠ°ΡΠΈΡΠ° Π½Π° Π±Π»ΠΎΠ³ Π½Π° Π°Π²ΡΠΎΡΠΎΡ
ΠΠ°ΡΠΈΡΠ΅ Π²ΠΏΠ΅ΡΠ°ΡΠΎΡΠΈ
ΠΠ°ΡΠ΅ΡΠΎ ΠΏΡΠ²ΠΎ ΡΡΠ΅ΡΡΠ²ΠΎ Π²ΠΎ C++ Π ΡΡΠΈΡΠ° Π±Π΅ΡΠ΅ Π½Π΅Π·Π°Π±ΠΎΡΠ°Π²Π½ΠΎ ΠΏΠΎ ΡΠ²ΠΎΡΠΎΡ ΠΈΠ½ΡΠ΅Π½Π·ΠΈΡΠ΅Ρ. ΠΠΎΠ±ΠΈΠ² Π²ΠΏΠ΅ΡΠ°ΡΠΎΠΊ Π·Π° C++ Π ΡΡΠΈΡΠ° ΠΊΠ°ΠΊΠΎ ΠΈΡΠΊΡΠ΅Π½ Π½Π°ΡΡΠ°Π½, ΠΊΠ°Π΄Π΅ ΡΡΠΎ Π³ΡΠ°Π½ΠΈΡΠ°ΡΠ° ΠΏΠΎΠΌΠ΅ΡΡ ΠΎΠ±ΡΠΊΠ°ΡΠ° ΠΈ ΠΊΠΎΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ° Π²ΠΎ ΠΆΠΈΠ²ΠΎ Π΅ ΡΠ΅ΡΠΈΡΠΈ Π½Π΅Π·Π°Π±Π΅Π»Π΅ΠΆΠ»ΠΈΠ²Π°. Π‘Γ¨, ΠΎΠ΄ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π½Π° Π³ΠΎΠ²ΠΎΡΠ½ΠΈΡΠΈΡΠ΅ Π΄ΠΎ Π½Π°ΡΠΏΡΠ΅Π²Π°ΡΠΈΡΠ΅ ΠΎΠ΄ ΠΏΠ°ΡΡΠ½Π΅ΡΠΈΡΠ΅ Π½Π° Π½Π°ΡΡΠ°Π½ΠΎΡ, Π΅ ΠΏΠΎΠ³ΠΎΠ΄Π½ΠΎ Π·Π° ΠΆΠ΅ΡΡΠΎΠΊΠΈ Π΄ΠΈΡΠΊΡΡΠΈΠΈ. Π‘ΠΎΠ΄ΡΠΆΠΈΠ½Π°ΡΠ° Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΡΠ°ΡΠ°, ΡΠΎΡΡΠ°Π²Π΅Π½Π° ΠΎΠ΄ ΠΈΠ·Π²Π΅ΡΡΠ°ΠΈ, ΠΎΠΏΡΠ°ΡΠ° ΠΏΡΠΈΠ»ΠΈΡΠ½ΠΎ ΡΠΈΡΠΎΠΊ ΠΎΠΏΡΠ΅Π³ Π½Π° ΡΠ΅ΠΌΠΈ, Π²ΠΊΠ»ΡΡΡΠ²Π°ΡΡΠΈ ΠΈΠ½ΠΎΠ²Π°ΡΠΈΠΈ Π²ΠΎ C++, ΡΡΡΠ΄ΠΈΠΈ Π½Π° ΡΠ»ΡΡΠ°Ρ Π½Π° Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΈ ΠΈ ΠΈΠ΄Π΅ΠΎΠ»ΠΎΡΠΊΠΈ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΠΎΠ½ΡΠΊΠΈ ΡΠ°Π·ΠΌΠΈΡΠ»ΡΠ²Π°ΡΠ°. ΠΠΎ, Π±ΠΈ Π±ΠΈΠ»ΠΎ Π½Π΅ΠΏΡΠ°Π²Π΅Π΄Π½ΠΎ Π΄Π° ΡΠ΅ ΠΈΠ³Π½ΠΎΡΠΈΡΠ° ΡΠΎΡΠΈΡΠ°Π»Π½Π°ΡΠ° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° Π½Π° Π½Π°ΡΡΠ°Π½ΠΎΡ, ΡΡΠΎ ΠΏΠΎΠΌΠ°Π³Π° Π΄Π° ΡΠ΅ Π½Π°Π΄ΠΌΠΈΠ½Π°Ρ ΡΠ°Π·ΠΈΡΠ½ΠΈΡΠ΅ Π±Π°ΡΠΈΠ΅ΡΠΈ Π²ΠΎ ΠΎΠ΄Π½ΠΎΡ Π½Π΅ ΡΠ°ΠΌΠΎ ΡΠΎ C++.
ΠΠΌ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΠΈΠΌΠ΅ Π½Π° ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΎΡΠΈΡΠ΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΡΠ°ΡΠ° Π·Π° ΠΌΠΎΠΆΠ½ΠΎΡΡΠ° Π΄Π° ΡΡΠ΅ΡΡΠ²ΡΠ²Π°ΠΌΠ΅ Π½Π° Π²Π°ΠΊΠΎΠ² Π½Π°ΡΡΠ°Π½!
ΠΠΎΠΆΠ΅Π±ΠΈ ΡΡΠ΅ ΡΠ° Π²ΠΈΠ΄Π΅Π»Π΅ ΠΎΠ±ΡΠ°Π²Π°ΡΠ° Π½Π° ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΎΡΠΈΡΠ΅ Π·Π° ΠΌΠΈΠ½Π°ΡΠΎΡΠΎ, ΡΠ΅Π³Π°ΡΠ½ΠΎΡΡΠ° ΠΈ ΠΈΠ΄Π½ΠΈΠ½Π°ΡΠ° Π½Π° C++ Π ΡΡΠΈΡΠ°
ΠΠΈ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΠΈΠΌΠ΅ Π·Π° ΡΠΈΡΠ°ΡΠ΅ΡΠΎ ΠΈ ΡΠ΅ Π½Π°Π΄Π΅Π²Π°ΠΌΠ΅ Π΄Π΅ΠΊΠ° Π½Π°ΡΠ΅ΡΠΎ ΠΏΡΠ΅ΡΠ°ΡΠΊΠ°ΠΆΡΠ²Π°ΡΠ΅ Π½Π° Π½Π°ΡΡΠ°Π½ΠΈ Π±Π΅ΡΠ΅ ΠΊΠΎΡΠΈΡΠ½ΠΎ!
ΠΠ·Π²ΠΎΡ: www.habr.com