ΠΠΊΠΎ Π² Π½Π°ΡΠ°Π»ΠΎΡΠΎ Π½Π° ΠΏΠΈΠ΅ΡΠ°ΡΠ° ΠΊΠ°ΠΆΠ΅ΡΠ΅, ΡΠ΅ Π½Π° ΡΡΠ΅Π½Π°ΡΠ° Π²ΠΈΡΠΈ C++ ΠΊΠΎΠ΄, ΡΠΎ ΠΊΡΠΌ ΠΊΡΠ°Ρ ΡΠΎΠΉ Π½Π΅ΠΏΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΡΠ΅ Π²ΠΈ ΠΏΡΠΎΡΡΡΠ΅Π»Ρ Π² ΠΊΡΠ°ΠΊΠ°.
ΠΡΡΠ½Π΅ Π‘ΡΡΠ°ΡΡΡΡΡΠΏ
ΠΡ 31 ΠΎΠΊΡΠΎΠΌΠ²ΡΠΈ Π΄ΠΎ 1 Π½ΠΎΠ΅ΠΌΠ²ΡΠΈ Π² Π‘Π°Π½ΠΊΡ ΠΠ΅ΡΠ΅ΡΠ±ΡΡΠ³ ΡΠ΅ ΠΏΡΠΎΠ²Π΅Π΄Π΅ ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΡΡΠ° C++ Russia Piter β Π΅Π΄Π½Π° ΠΎΡ ΠΌΠ°ΡΠ°Π±Π½ΠΈΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΠΈ ΠΏΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ Π² Π ΡΡΠΈΡ, ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ°Π½Π° ΠΎΡ JUG Ru Group. ΠΠΎΡΡ-Π»Π΅ΠΊΡΠΎΡΠΈ Π²ΠΊΠ»ΡΡΠ²Π°Ρ ΡΠ»Π΅Π½ΠΎΠ²Π΅ Π½Π° ΠΠΎΠΌΠΈΡΠ΅ΡΠ° ΠΏΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠΈΡΠ΅ Π½Π° C++, Π»Π΅ΠΊΡΠΎΡΠΈ Π½Π° CppCon, Π°Π²ΡΠΎΡΠΈ Π½Π° ΠΊΠ½ΠΈΠ³ΠΈ Π½Π° O'Reilly ΠΈ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°ΡΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΈ ΠΊΠ°ΡΠΎ LLVM, libc++ ΠΈ Boost. ΠΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΡΡΠ° Π΅ Π½Π°ΡΠΎΡΠ΅Π½Π° ΠΊΡΠΌ ΠΎΠΏΠΈΡΠ½ΠΈ C++ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΈΡΠΊΠ°Ρ Π΄Π° Π·Π°Π΄ΡΠ»Π±ΠΎΡΠ°Ρ ΡΠ²ΠΎΡΡΠ° Π΅ΠΊΡΠΏΠ΅ΡΡΠΈΠ·Π° ΠΈ Π΄Π° ΠΎΠ±ΠΌΠ΅Π½ΡΡ ΠΎΠΏΠΈΡ Π² ΠΎΠ±ΡΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΠΆΠΈΠ²ΠΎ. ΠΠ° ΡΡΡΠ΄Π΅Π½ΡΠΈ, ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°Π½ΡΠΈ ΠΈ ΡΠ½ΠΈΠ²Π΅ΡΡΠΈΡΠ΅ΡΡΠΊΠΈ ΠΏΡΠ΅ΠΏΠΎΠ΄Π°Π²Π°ΡΠ΅Π»ΠΈ ΡΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΡ ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΠΎΠ±ΡΠΈ ΠΎΡΡΡΡΠΏΠΊΠΈ.
ΠΠΎΡΠΊΠΎΠ²ΡΠΊΠΎΡΠΎ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΡΡΠ° ΡΠ΅ Π±ΡΠ΄Π΅ Π΄ΠΎΡΡΡΠΏΠ½ΠΎ Π·Π° ΠΏΠΎΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΎΡΠ΅ ΠΏΡΠ΅Π· Π°ΠΏΡΠΈΠ» ΡΠ»Π΅Π΄Π²Π°ΡΠ°ΡΠ° Π³ΠΎΠ΄ΠΈΠ½Π°, Π½ΠΎ ΠΌΠ΅ΠΆΠ΄ΡΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π½Π°ΡΠΈΡΠ΅ ΡΡΡΠ΄Π΅Π½ΡΠΈ ΡΠ΅ Π²ΠΈ ΡΠ°Π·ΠΊΠ°ΠΆΠ°Ρ ΠΊΠ°ΠΊΠ²ΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ ΡΠ° Π½Π°ΡΡΠΈΠ»ΠΈ Π½Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΎΡΠΎ ΡΡΠ±ΠΈΡΠΈΠ΅.
Π‘Π½ΠΈΠΌΠΊΠ° ΠΎΡ
ΠΠ° Π½Π°Ρ
ΠΠ° ΡΠ°Π·ΠΈ Π΄Π»ΡΠΆΠ½ΠΎΡΡ ΡΠ° ΡΠ°Π±ΠΎΡΠΈΠ»ΠΈ Π΄Π²Π°ΠΌΠ° ΡΡΡΠ΄Π΅Π½ΡΠΈ ΠΎΡ ΠΠ°ΡΠΈΠΎΠ½Π°Π»Π½ΠΈΡ ΠΈΠ·ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠΊΠΈ ΡΠ½ΠΈΠ²Π΅ΡΡΠΈΡΠ΅Ρ βΠΠΈΡΡΠ΅ ΡΡΠΈΠ»ΠΈΡΠ΅ ΠΏΠΎ ΠΈΠΊΠΎΠ½ΠΎΠΌΠΈΠΊΠ°β β Π‘Π°Π½ΠΊΡ ΠΠ΅ΡΠ΅ΡΠ±ΡΡΠ³:
- ΠΠΈΠ·Π° ΠΠ°ΡΠΈΠ»Π΅Π½ΠΊΠΎ Π΅ ΡΡΡΠ΄Π΅Π½ΡΠΊΠ° ΠΎΡ 4-ΡΠ° Π³ΠΎΠ΄ΠΈΠ½Π°, ΠΈΠ·ΡΡΠ°Π²Π°ΡΠ° ΠΠ·ΠΈΡΠΈ Π·Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ ΠΊΠ°ΡΠΎ ΡΠ°ΡΡ ΠΎΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° Π·Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ½Π° ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΠΊΠ° ΠΈ ΠΊΠΎΠΌΠΏΡΡΡΡΠ½ΠΈ Π½Π°ΡΠΊΠΈ. Π‘Π»Π΅Π΄ ΠΊΠ°ΡΠΎ ΡΠ΅ Π·Π°ΠΏΠΎΠ·Π½Π°Ρ Ρ Π΅Π·ΠΈΠΊΠ° C++ ΠΏΡΠ΅Π· ΠΏΡΡΠ²Π°ΡΠ° ΡΠΈ Π³ΠΎΠ΄ΠΈΠ½Π° Π² ΡΠ½ΠΈΠ²Π΅ΡΡΠΈΡΠ΅ΡΠ°, Π²ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠ΅ Π½Π°ΡΡΡΠΏΠ°Ρ ΠΎΠΏΠΈΡ Π² ΡΠ°Π±ΠΎΡΠ°ΡΠ° Ρ Π½Π΅Π³ΠΎ ΡΡΠ΅Π· ΡΡΠ°ΠΆΠΎΠ²Π΅ Π² ΠΈΠ½Π΄ΡΡΡΡΠΈΡΡΠ°. Π‘ΡΡΠ°ΡΡΡΠ° ΠΌΠΈ ΠΊΡΠΌ Π΅Π·ΠΈΡΠΈΡΠ΅ Π·Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ ΠΊΠ°ΡΠΎ ΡΡΠ»ΠΎ ΠΈ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ Π² ΡΠ°ΡΡΠ½ΠΎΡΡ ΠΎΡΡΠ°Π²ΠΈ ΡΠ²ΠΎΡ ΠΎΡΠΏΠ΅ΡΠ°ΡΡΠΊ Π²ΡΡΡ Ρ ΠΏΠΎΠ΄Π±ΠΎΡΠ° Π½Π° Π΄ΠΎΠΊΠ»Π°Π΄ΠΈΡΠ΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΡΡΠ°.
- ΠΠ°Π½Ρ Π‘ΠΌΠΈΡΠ½ΠΎΠ² Π΅ ΡΡΡΠ΄Π΅Π½Ρ 1-Π²Π° Π³ΠΎΠ΄ΠΈΠ½Π° Π² ΠΌΠ°Π³ΠΈΡΡΡΡΡΠΊΠ°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° βΠΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ ΠΈ Π°Π½Π°Π»ΠΈΠ· Π½Π° Π΄Π°Π½Π½ΠΈβ. ΠΠΎΠΊΠ°ΡΠΎ Π±ΡΡ ΠΎΡΠ΅ Π² ΡΡΠΈΠ»ΠΈΡΠ΅, ΠΏΠΈΡΠ°Ρ Π·Π°Π΄Π°ΡΠΈ Π·Π° ΠΎΠ»ΠΈΠΌΠΏΠΈΠ°Π΄Π° Π½Π° C++ ΠΈ ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° Π½ΡΠΊΠ°ΠΊ ΡΠΈ ΡΠ΅ ΡΠ»ΡΡΠΈ, ΡΠ΅ Π΅Π·ΠΈΠΊΡΡ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ ΡΠ΅ ΠΏΠΎΡΠ²ΡΠ²Π°ΡΠ΅ Π² ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΈΡΠ΅ Π΄Π΅ΠΉΠ½ΠΎΡΡΠΈ ΠΈ Π² ΠΊΡΠ°ΠΉΠ½Π° ΡΠΌΠ΅ΡΠΊΠ° ΡΡΠ°Π½Π° ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡΡ ΡΠ°Π±ΠΎΡΠ΅Π½ Π΅Π·ΠΈΠΊ. Π Π΅ΡΠΈΡ Π΄Π° ΡΡΠ°ΡΡΠ²Π°ΠΌ Π² ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΡΡΠ°, Π·Π° Π΄Π° ΠΏΠΎΠ΄ΠΎΠ±ΡΡ Π·Π½Π°Π½ΠΈΡΡΠ° ΡΠΈ ΠΈ Π΄Π° Π½Π°ΡΡΠ° Π·Π° Π½ΠΎΠ²ΠΈ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ.
Π Π±ΡΠ»Π΅ΡΠΈΠ½Π° ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎΡΠΎ Π½Π° ΡΠ°ΠΊΡΠ»ΡΠ΅ΡΠ° ΡΠ΅ΡΡΠΎ ΡΠΏΠΎΠ΄Π΅Π»Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΈ ΡΡΠ±ΠΈΡΠΈΡ, ΡΠ²ΡΡΠ·Π°Π½ΠΈ Ρ Π½Π°ΡΠ°ΡΠ° ΡΠΏΠ΅ΡΠΈΠ°Π»Π½ΠΎΡΡ. ΠΡΠ΅Π· ΡΠ΅ΠΏΡΠ΅ΠΌΠ²ΡΠΈ Π²ΠΈΠ΄ΡΡ ΠΌΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° C++ Π ΡΡΠΈΡ ΠΈ ΡΠ΅ΡΠΈΡ ΠΌΠ΅ Π΄Π° ΡΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠ°ΠΌΠ΅ ΠΊΠ°ΡΠΎ ΡΠ»ΡΡΠ°ΡΠ΅Π»ΠΈ. ΠΠ° ΠΏΡΡΠ²ΠΈ ΠΏΡΡ ΡΡΠ°ΡΡΠ²Π°ΠΌΠ΅ Π² ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΠΈ.
Π‘ΡΡΡΠΊΡΡΡΠ° Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΡΡΠ°
-
ΠΠΎΠΊΠ»Π°Π΄ΠΈ
Π ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½Π° Π΄Π²Π° Π΄Π½ΠΈ Π΅ΠΊΡΠΏΠ΅ΡΡΠΈΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΠΎΡ Π° 30 Π΄ΠΎΠΊΠ»Π°Π΄Π°, ΠΎΠ±Ρ Π²Π°ΡΠ°ΡΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π³ΠΎΡΠ΅ΡΠΈ ΡΠ΅ΠΌΠΈ: Π³Π΅Π½ΠΈΠ°Π»Π½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Π΅Π·ΠΈΠΊΠΎΠ²ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π·Π° ΡΠ΅ΡΠ°Π²Π°Π½Π΅ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ½ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ, ΠΏΡΠ΅Π΄ΡΡΠΎΡΡΠΈ Π΅Π·ΠΈΠΊΠΎΠ²ΠΈ Π°ΠΊΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π²ΡΠ² Π²ΡΡΠ·ΠΊΠ° Ρ Π½ΠΎΠ²ΠΈΡ ΡΡΠ°Π½Π΄Π°ΡΡ, ΠΊΠΎΠΌΠΏΡΠΎΠΌΠΈΡΠΈ Π² Π΄ΠΈΠ·Π°ΠΉΠ½Π° Π½Π° C++ ΠΈ ΠΏΡΠ΅Π΄ΠΏΠ°Π·Π½ΠΈ ΠΌΠ΅ΡΠΊΠΈ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ° Ρ ΡΠ΅Ρ Π½ΠΈΡΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΡ, ΠΏΡΠΈΠΌΠ΅ΡΠΈ Π½Π° ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Π° Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ°, ΠΊΠ°ΠΊΡΠΎ ΠΈ Π½ΡΠΊΠΎΠΈ Π΄Π΅ΡΠ°ΠΉΠ»ΠΈ ΠΏΠΎΠ΄ ΠΊΠ°ΠΏΠ°ΠΊΠ° Π½Π° Π΅Π·ΠΈΠΊΠΎΠ²Π°ΡΠ° ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ°. ΠΠ³ΡΠ°Ρ Π° ΡΠ΅ Π΅Π΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΡΡΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ, Π½Π°ΠΉ-ΡΠ΅ΡΡΠΎ Π΄Π²Π΅ Π½Π° ΡΡΡΠΊΠΈ ΠΈ Π΅Π΄Π½ΠΎ Π½Π° Π°Π½Π³Π»ΠΈΠΉΡΠΊΠΈ.
-
ΠΠΈΡΠΊΡΡΠΈΠΎΠ½Π½ΠΈ Π·ΠΎΠ½ΠΈ
Π‘Π»Π΅Π΄ ΠΈΠ·ΠΊΠ°Π·Π²Π°Π½Π΅ΡΠΎ Π²ΡΠΈΡΠΊΠΈ Π½Π΅Π·Π°Π΄Π°Π΄Π΅Π½ΠΈ Π²ΡΠΏΡΠΎΡΠΈ ΠΈ Π½Π΅Π΄ΠΎΠ²ΡΡΡΠ΅Π½ΠΈ Π΄ΠΈΡΠΊΡΡΠΈΠΈ Π±ΡΡ Π° ΠΏΡΠ΅Ρ Π²ΡΡΠ»Π΅Π½ΠΈ Π² ΡΠΏΠ΅ΡΠΈΠ°Π»Π½ΠΎ ΠΎΠ±ΠΎΡΠΎΠ±Π΅Π½ΠΈ Π·ΠΎΠ½ΠΈ Π·Π° ΠΊΠΎΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΡ Ρ Π»Π΅ΠΊΡΠΎΡΠΈΡΠ΅, ΠΎΠ±ΠΎΡΡΠ΄Π²Π°Π½ΠΈ Ρ ΠΌΠ°ΡΠΊΠ΅ΡΠ½ΠΈ ΡΠ°Π±Π»Π°. ΠΠΎΠ±ΡΡ Π½Π°ΡΠΈΠ½ Π΄Π° ΠΏΡΠ΅ΠΊΠ°ΡΠ°ΡΠ΅ ΠΏΠΎΡΠΈΠ²ΠΊΠ°ΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ΅ΡΠΈΡΠ΅ Ρ ΠΏΡΠΈΡΡΠ΅Π½ ΡΠ°Π·Π³ΠΎΠ²ΠΎΡ.
-
Π‘Π²Π΅ΡΠΊΠ°Π²ΠΈΡΠ½ΠΈ ΡΠ°Π·Π³ΠΎΠ²ΠΎΡΠΈ ΠΈ Π½Π΅ΡΠΎΡΠΌΠ°Π»Π½ΠΈ Π΄ΠΈΡΠΊΡΡΠΈΠΈ
ΠΠΊΠΎ ΠΈΡΠΊΠ°ΡΠ΅ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ ΠΊΡΠ°ΡΡΠΊ Π΄ΠΎΠΊΠ»Π°Π΄, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠ΅ Π·Π°ΠΏΠΈΡΠ΅ΡΠ΅ Π½Π° Π±ΡΠ»Π°ΡΠ° Π΄ΡΡΠΊΠ° Π·Π° Π²Π΅ΡΠ΅ΡΠ½ΠΈΡ Lightning Talk ΠΈ Π΄Π° ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΠΏΠ΅Ρ ΠΌΠΈΠ½ΡΡΠΈ Π²ΡΠ΅ΠΌΠ΅, Π·Π° Π΄Π° Π³ΠΎΠ²ΠΎΡΠΈΡΠ΅ Π·Π° Π²ΡΠΈΡΠΊΠΎ ΠΏΠΎ ΡΠ΅ΠΌΠ°ΡΠ° Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΡΡΠ°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΡΠ°ΡΠΊΠΎ Π²ΡΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² Π΄Π΅Π·ΠΈΠ½ΡΠ΅ΠΊΡΠ°Π½ΡΠΈΡΠ΅ Π·Π° C++ (Π·Π° Π½ΡΠΊΠΎΠΈ Π±Π΅ΡΠ΅ Π½ΠΎΠ²ΠΎ) ΠΈΠ»ΠΈ ΠΈΡΡΠΎΡΠΈΡ Π·Π° Π³ΡΠ΅ΡΠΊΠ° Π² Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΡΠΈΠ½ΡΡΠΎΠΈΠ΄Π°, ΠΊΠΎΡΡΠΎ ΠΌΠΎΠΆΠ΅ ΡΠ°ΠΌΠΎ Π΄Π° ΡΠ΅ ΡΡΠ΅, Π½ΠΎ Π½Π΅ ΠΈ Π΄Π° ΡΠ΅ Π²ΠΈΠ΄ΠΈ.
ΠΡΡΠ³ ΡΠΎΡΠΌΠ°Ρ Π΅ ΠΏΠ°Π½Π΅Π»Π½Π°ΡΠ° Π΄ΠΈΡΠΊΡΡΠΈΡ βΠ‘ ΠΊΠΎΠΌΠΈΡΠΈΡ ΠΎΡ ΡΡΡΡΠ΅ Π½Π° ΡΡΡΡΠ΅β. ΠΠ° ΡΡΠ΅Π½Π°ΡΠ° ΡΠ° Π½ΡΠΊΠΎΠΈ ΡΠ»Π΅Π½ΠΎΠ²Π΅ Π½Π° ΠΊΠΎΠΌΠΈΡΠΈΡΡΠ° ΠΏΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠΈΠ·Π°ΡΠΈΡ, Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠΎΡΠ° ΠΈΠΌΠ° ΠΊΠ°ΠΌΠΈΠ½Π° (ΠΎΡΠΈΡΠΈΠ°Π»Π½ΠΎ - Π·Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΈΡΠΊΡΠ΅Π½Π° Π°ΡΠΌΠΎΡΡΠ΅ΡΠ°, Π½ΠΎ ΠΏΡΠΈΡΠΈΠ½Π°ΡΠ° "Π·Π°ΡΠΎΡΠΎ ΠΠ‘ΠΠ§ΠΠ ΠΠΠ Π" ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΏΠΎ-ΡΠΌΠ΅ΡΠ½Π°), Π²ΡΠΏΡΠΎΡΠΈ Π·Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ° ΠΈ ΠΎΠ±ΡΠ°ΡΠ° Π²ΠΈΠ·ΠΈΡ Π½Π° C++ , Π±Π΅Π· ΡΠ°Π·Π³ΠΎΡΠ΅ΡΠ΅Π½ΠΈ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈ Π΄ΠΈΡΠΊΡΡΠΈΠΈ ΠΈ Ρ ΠΎΠ»ΠΈΠ²Π°ΡΠΈ. ΠΠΊΠ°Π·Π° ΡΠ΅, ΡΠ΅ Π² ΠΊΠΎΠΌΠΈΡΠΈΡΡΠ° ΠΈΠΌΠ° ΠΈ ΠΆΠΈΠ²ΠΈ Ρ ΠΎΡΠ°, ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π΅ ΡΠ° Π½Π°ΠΏΡΠ»Π½ΠΎ ΡΠΈΠ³ΡΡΠ½ΠΈ Π² Π½Π΅ΡΠΎ ΠΈΠ»ΠΈ Π΄Π° Π½Π΅ Π·Π½Π°ΡΡ Π½Π΅ΡΠΎ.
ΠΠ° ΡΠ΅Π½ΠΎΠ²Π΅ΡΠ΅ Π½Π° holivars ΡΡΠ΅ΡΠΎΡΠΎ ΡΡΠ±ΠΈΡΠΈΠ΅ ΠΎΡΡΠ°Π½Π° ΠΏΠΎ ΡΠ»ΡΡΠ°Ρ - BOF ΡΠ΅ΡΠΈΡΡΠ° βGo vs. C++β. ΠΠ·Π΅ΠΌΠ°ΠΌΠ΅ Π»ΡΠ±ΠΈΡΠ΅Π» Π½Π° Go, Π»ΡΠ±ΠΈΡΠ΅Π» Π½Π° C++, ΠΏΡΠ΅Π΄ΠΈ Π½Π°ΡΠ°Π»ΠΎΡΠΎ Π½Π° ΡΠ΅ΡΠΈΡΡΠ° ΡΠ΅ Π·Π°Π΅Π΄Π½ΠΎ ΠΏΠΎΠ΄Π³ΠΎΡΠ²ΡΡ 100500 XNUMX ΡΠ»Π°ΠΉΠ΄Π° ΠΏΠΎ ΡΠ΅ΠΌΠ° (ΠΊΠ°ΡΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ Ρ ΠΏΠ°ΠΊΠ΅ΡΠΈ Π² C++ ΠΈΠ»ΠΈ Π»ΠΈΠΏΡΠ°ΡΠ° Π½Π° Π³Π΅Π½Π΅ΡΠΈΡΠ½ΠΈ ΠΊΠΎΠ΄ΠΎΠ²Π΅ Π² Go), ΡΠ»Π΅Π΄ ΠΊΠΎΠ΅ΡΠΎ Π²ΠΎΠ΄ΡΡ ΠΎΠΆΠΈΠ²Π΅Π½Π° Π΄ΠΈΡΠΊΡΡΠΈΡ ΠΏΠΎΠΌΠ΅ΠΆΠ΄Ρ ΡΠΈ ΠΈ Ρ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠ°, Π° ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠ° ΡΠ΅ ΠΎΠΏΠΈΡΠ²Π° Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ Π΄Π²Π΅ Π³Π»Π΅Π΄Π½ΠΈ ΡΠΎΡΠΊΠΈ Π΅Π΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ. ΠΠΊΠΎ Ρ ΠΎΠ»ΠΈΠ²Π°ΡΡΡ Π·Π°ΠΏΠΎΡΠ½Π΅ ΠΈΠ·Π²ΡΠ½ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°, ΠΌΠΎΠ΄Π΅ΡΠ°ΡΠΎΡΡΡ ΡΠ΅ Π½Π°ΠΌΠ΅ΡΠ²Π° ΠΈ ΠΏΠΎΠΌΠΈΡΡΠ²Π° ΡΡΡΠ°Π½ΠΈΡΠ΅. Π’ΠΎΠ·ΠΈ ΡΠΎΡΠΌΠ°Ρ Π΅ ΠΏΡΠΈΡΡΡΠ°ΡΡΡΠ²Π°Ρ: Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΠ°ΡΠ° ΡΠ»Π΅Π΄ Π½Π°ΡΠ°Π»ΠΎΡΠΎ ΡΠ°ΠΌΠΎ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π°ΡΠ° ΠΎΡ ΡΠ»Π°ΠΉΠ΄ΠΎΠ²Π΅ΡΠ΅ Π±ΡΡ Π° Π·Π°Π²ΡΡΡΠ΅Π½ΠΈ. ΠΡΠ°ΡΡ ΡΡΡΠ±Π²Π°ΡΠ΅ Π΄Π° Π±ΡΠ΄Π΅ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΡΡΠΊΠΎΡΠ΅Π½.
-
ΠΠ°ΡΡΠ½ΡΠΎΡΡΠΊΠΈ ΡΡΠΎΠΉΠΊΠΈ
ΠΠ°ΡΡΠ½ΡΠΎΡΠΈΡΠ΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΡΡΠ° Π±ΡΡ Π° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π΅Π½ΠΈ Π² Π·Π°Π»ΠΈΡΠ΅ β Π½Π° ΡΠ°Π½Π΄ΠΎΠ²Π΅ΡΠ΅ ΡΠ΅ ΡΠ°Π·Π³ΠΎΠ²Π°ΡΡΡ Π° Π·Π° ΡΠ΅ΠΊΡΡΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΈ, ΠΏΡΠ΅Π΄Π»Π°Π³Π°Ρ Π° ΡΡΠ°ΠΆΠΎΠ²Π΅ ΠΈ ΡΠ°Π±ΠΎΡΠ°, ΠΏΡΠΎΠ²Π΅Π΄ΠΎΡ Π° Π²ΠΈΠΊΡΠΎΡΠΈΠ½ΠΈ ΠΈ ΠΌΠ°Π»ΠΊΠΈ ΡΡΡΡΠ΅Π·Π°Π½ΠΈΡ, Π° ΡΡΡΠΎ ΡΠ°ΠΊΠ° ΡΠ°Π·ΠΈΠ³ΡΠ°Ρ Π° Ρ ΡΠ±Π°Π²ΠΈ Π½Π°Π³ΡΠ°Π΄ΠΈ. Π ΡΡΡΠΎΡΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½ΡΠΊΠΎΠΈ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Π΄ΠΎΡΠΈ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈΡ Π° Π΄Π° ΠΏΡΠ΅ΠΌΠΈΠ½Π°Ρ ΠΏΡΠ΅Π· Π½Π°ΡΠ°Π»Π½ΠΈΡΠ΅ Π΅ΡΠ°ΠΏΠΈ Π½Π° ΠΈΠ½ΡΠ΅ΡΠ²ΡΡΠ°, ΠΊΠΎΠ΅ΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π·Π° ΠΎΠ½Π΅Π·ΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΈΠ΄Π²Π°Ρ Π½Π΅ ΡΠ°ΠΌΠΎ Π΄Π° ΡΠ»ΡΡΠ°Ρ Π΄ΠΎΠΊΠ»Π°Π΄ΠΈ.
Π’Π΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈ Π΄Π΅ΡΠ°ΠΉΠ»ΠΈ Π½Π° ΠΎΡΡΠ΅ΡΠΈΡΠ΅
Π Π΄Π²Π°ΡΠ° Π΄Π½ΠΈ ΡΠ»ΡΡΠ°Ρ ΠΌΠ΅ Π΄ΠΎΠΊΠ»Π°Π΄ΠΈ. ΠΠ° ΠΌΠΎΠΌΠ΅Π½ΡΠΈ Π±Π΅ΡΠ΅ ΡΡΡΠ΄Π½ΠΎ Π΄Π° ΠΈΠ·Π±Π΅ΡΠ΅ΠΌ Π΅Π΄ΠΈΠ½ Π΄ΠΎΠΊΠ»Π°Π΄ ΠΎΡ ΠΏΠ°ΡΠ°Π»Π΅Π»Π½ΠΈΡΠ΅ β ΡΠ°Π·Π±ΡΠ°Ρ ΠΌΠ΅ ΡΠ΅ Π΄Π° ΡΠ΅ ΡΠ°Π·Π΄Π΅Π»ΠΈΠΌ ΠΈ Π΄Π° ΠΎΠ±ΠΌΠ΅Π½ΠΈΠΌ Π½Π°ΡΡΡΠΏΠ°Π½ΠΈΡΠ΅ Π·Π½Π°Π½ΠΈΡ Π² ΠΏΠΎΡΠΈΠ²ΠΊΠΈΡΠ΅. Π Π²ΡΠΏΡΠ΅ΠΊΠΈ ΡΠΎΠ²Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π°, ΡΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ Π΅ ΠΏΡΠΎΠΏΡΡΠ½Π°ΡΠΎ. Π’ΡΠΊ Π±ΠΈΡ ΠΌΠ΅ ΠΈΡΠΊΠ°Π»ΠΈ Π΄Π° Π³ΠΎΠ²ΠΎΡΠΈΠΌ Π·Π° ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅ΡΠΎ Π½Π° Π½ΡΠΊΠΎΠΈ ΠΎΡ Π΄ΠΎΠΊΠ»Π°Π΄ΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ ΡΠΌΠ΅ΡΠ½Π°Ρ ΠΌΠ΅ Π·Π° Π½Π°ΠΉ-ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΈ
ΠΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈΡΡΠ° Π² C++ ΠΏΡΠ΅Π· ΠΏΡΠΈΠ·ΠΌΠ°ΡΠ° Π½Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈΡΠ΅ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠ°, Π ΠΎΠΌΠ°Π½ Π ΡΡΡΠ΅Π²
Π‘Π»Π°ΠΉΠ΄ ΠΎΡ
ΠΠ°ΠΊΡΠΎ ΠΏΠΎΠ΄ΡΠΊΠ°Π·Π²Π° Π·Π°Π³Π»Π°Π²ΠΈΠ΅ΡΠΎ, Π ΠΎΠΌΠ°Π½ ΡΠ°Π·Π³Π»Π΅Π΄Π° ΡΠ°Π±ΠΎΡΠ°ΡΠ° Ρ ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ LLVM ΠΊΠ°ΡΠΎ ΠΏΡΠΈΠΌΠ΅Ρ. Π ΡΡΡΠΎΡΠΎ Π²ΡΠ΅ΠΌΠ΅, Π·Π° ΡΠ΅Π·ΠΈ, ΠΊΠΎΠΈΡΠΎ Π½Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Clang Π² ΡΠ°Π±ΠΎΡΠ°ΡΠ° ΡΠΈ, Π΄ΠΎΠΊΠ»Π°Π΄ΡΡ Π²ΡΠ΅ ΠΎΡΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄Π°Π΄Π΅ Π½ΡΠΊΠ°ΠΊΠ²Π° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π° Π·Π° ΡΠΎΠ²Π° ΠΊΠ°ΠΊ ΠΊΠΎΠ΄ΡΡ ΠΌΠΎΠΆΠ΅ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»Π½ΠΎ Π΄Π° Π±ΡΠ΄Π΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½. Π’ΠΎΠ²Π° Π΅ ΡΠ°ΠΊΠ°, Π·Π°ΡΠΎΡΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠΈ ΠΈ ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΈΡΠ΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΊΠΎΠΌΡΠ½ΠΈΠΊΠΈΡΠ°Ρ ΠΏΠΎΠΌΠ΅ΠΆΠ΄Ρ ΡΠΈ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ ΡΡΠΏΠ΅ΡΠ½ΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΡΠ²ΠΏΠ°Π΄Π°Ρ.
Π’Π°ΠΊΠ° ΡΠ΅, Π·Π° Π΄Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΈΡΠ΅ ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, ΡΡΡΠ±Π²Π° Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ Π½Π΅ΡΠ°: Π΄Π° ΠΈΠ·Π²ΠΈΠΊΠ°ΡΠ΅ ΠΊΠΎΠ΄Π° Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° (Π°ΠΊΠΎ ΠΈΠΌΠ° ΡΠ°ΠΊΡΠ²) ΠΈΠ»ΠΈ Π΄Π° ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡΠ΅ ΡΠ΅ΡΡΡΡΠΈ Π½Π° ΡΠ΅ΠΊΡΡΠΎΡΠΎ Π½ΠΈΠ²ΠΎ ΠΈ Π΄Π° Π·Π°Π²ΡΡΡΠΈΡΠ΅ ΡΡΠ΅ΠΊΠ° ΠΏΠΎ-Π²ΠΈΡΠΎΠΊΠΎ. ΠΡΠΈΡΠΊΠΎ ΡΠΎΠ²Π° Π²ΠΎΠ΄ΠΈ Π΄ΠΎ ΡΠ°ΠΊΡΠ°, ΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΡΡ Π΄ΠΎΠ±Π°Π²Ρ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π·Π° ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½ΠΈΡ, ΠΊΠΎΠΈΡΠΎ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»Π½ΠΎ Ρ Π²ΡΡΠ»ΡΡ ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ. Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ, Π°ΠΊΠΎ ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΡΠΎ Π½Π΅ Π΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»Π½ΠΎ ΠΏΠΎΠ²Π΄ΠΈΠ³Π½Π°ΡΠΎ, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° ΡΠ΅ ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠΈ Π΄Π° ΠΈΠ·Π²ΡΡΡΠ²Π° Π½Π΅Π½ΡΠΆΠ½ΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ. ΠΠ° Π΄Π° Π½Π°ΠΌΠ°Π»ΠΈ ΠΏΠΎ Π½ΡΠΊΠ°ΠΊΡΠ² Π½Π°ΡΠΈΠ½ ΡΠ΅ΠΆΠΈΠΉΠ½ΠΈΡΠ΅ ΡΠ°Π·Ρ ΠΎΠ΄ΠΈ, LLVM ΠΈΠΌΠ° Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π΅Π²ΡΠΈΡΡΠΈΠΊΠΈ Π·Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π΅ Π½Π° ΡΠΈΡΡΠ°ΡΠΈΠΈ, ΠΏΡΠΈ ΠΊΠΎΠΈΡΠΎ Π½Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΡΠ΅ Π΄ΠΎΠ±Π°Π²Ρ ΠΊΠΎΠ΄ Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈΠ»ΠΈ Π±ΡΠΎΡΡ Π½Π° βΠ΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈΡΠ΅β ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ Π½Π°ΠΌΠ°Π»Π΅Π½.
ΠΠ΅ΠΊΡΠΎΡΡΡ ΡΠ°Π·Π³Π»Π΅ΠΆΠ΄Π° ΠΎΠΊΠΎΠ»ΠΎ Π΄ΡΠ·ΠΈΠ½Π° ΠΎΡ ΡΡΡ ΠΈ ΠΏΠΎΠΊΠ°Π·Π²Π° ΠΊΠ°ΠΊΡΠΎ ΡΠΈΡΡΠ°ΡΠΈΠΈ, Π² ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΠΏΠΎΠΌΠ°Π³Π°Ρ Π·Π° ΡΡΠΊΠΎΡΡΠ²Π°Π½Π΅ Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ°, ΡΠ°ΠΊΠ° ΠΈ ΡΠ΅Π·ΠΈ, Π² ΠΊΠΎΠΈΡΠΎ ΡΠ΅Π·ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΈ Π½Π΅ ΡΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠΈΠΌΠΈ.
ΠΠΎ ΡΠΎΠ·ΠΈ Π½Π°ΡΠΈΠ½ Π ΠΎΠΌΠ°Π½ Π ΡΡΡΠ΅Π² Π²ΠΎΠ΄ΠΈ ΡΡΠ΅Π½ΠΈΡΠΈΡΠ΅ Π΄ΠΎ Π·Π°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΡΠΎ, ΡΠ΅ ΠΊΠΎΠ΄ΡΡ, ΡΡΠ΄ΡΡΠΆΠ°Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ, Π½Π΅ Π²ΠΈΠ½Π°Π³ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ Ρ Π½ΡΠ»Π΅Π²ΠΈ ΡΠ°Π·Ρ ΠΎΠ΄ΠΈ ΠΈ Π΄Π°Π²Π° ΡΠ»Π΅Π΄Π½ΠΈΡ ΡΡΠ²Π΅Ρ:
- ΠΊΠΎΠ³Π°ΡΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ²Π°ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΠΏΠΎ ΠΏΡΠΈΠ½ΡΠΈΠΏ ΡΠΈ ΡΡΡΡΠ²Π° Π΄Π° ΠΈΠ·ΠΎΡΡΠ°Π²ΠΈΡΠ΅ ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈΡΡΠ°;
- Π°ΠΊΠΎ Π²ΡΠ΅ ΠΎΡΠ΅ ΡΠ° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈ ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ, ΡΠΎΠ³Π°Π²Π°, ΠΊΠΎΠ³Π°ΡΠΎ Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΠΈ ΡΡΡΡΠ²Π° Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡΠ΅ noexcept (ΠΈ const) ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΈ Π½Π°Π²ΡΡΠΊΡΠ΄Π΅, ΡΠ°ΠΊΠ° ΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΡΡ Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ° ΠΊΠΎΠ»ΠΊΠΎΡΠΎ Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ²Π΅ΡΠ΅.
ΠΠ°ΡΠΎ ΡΡΠ»ΠΎ ΠΎΡΠ°ΡΠΎΡΡΡ ΠΏΠΎΡΠ²ΡΡΠ΄ΠΈ ΠΌΠ½Π΅Π½ΠΈΠ΅ΡΠΎ, ΡΠ΅ ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈΡΡΠ° Π΅ Π½Π°ΠΉ-Π΄ΠΎΠ±ΡΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π΄ΠΎ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ ΠΈΠ»ΠΈ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΎΡΡΠ°Π²ΡΡ Π½Π°ΠΏΡΠ»Π½ΠΎ.
Π‘Π»Π°ΠΉΠ΄ΠΎΠ²Π΅ΡΠ΅ Π½Π° Π΄ΠΎΠΊΠ»Π°Π΄Π° ΡΠ° Π΄ΠΎΡΡΡΠΏΠ½ΠΈ Π½Π° ΡΠ»Π΅Π΄Π½Π°ΡΠ° Π²ΡΡΠ·ΠΊΠ°:
ΠΠ΅Π½Π΅ΡΠ°ΡΠΎΡΠΈ, ΡΡΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈ ΠΈ Π΄ΡΡΠ³ΠΈ ΡΠ»Π°Π΄ΠΎΡΡΠΈ Π·Π° ΡΠ°Π·Π²ΠΈΠ²Π°Π½Π΅ Π½Π° ΠΌΠΎΠ·ΡΠΊΠ°, ΠΠ΄ΠΈ Π¨Π°Π²ΠΈΡ
Π‘Π»Π°ΠΉΠ΄ ΠΎΡ
ΠΠ΄ΠΈΠ½ ΠΎΡ ΠΌΠ½ΠΎΠ³ΠΎΡΠΎ Π΄ΠΎΠΊΠ»Π°Π΄ΠΈ Π½Π° ΡΠ°Π·ΠΈ ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΡ, ΠΏΠΎΡΠ²Π΅ΡΠ΅Π½ΠΈ Π½Π° ΠΈΠ½ΠΎΠ²Π°ΡΠΈΠΈΡΠ΅ Π² C++20, Π±Π΅ΡΠ΅ Π·Π°ΠΏΠΎΠΌΠ½ΡΡ ΡΠ΅ Π½Π΅ ΡΠ°ΠΌΠΎ Ρ ΡΠ²Π΅ΡΠ½ΠΎΡΠΎ ΡΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ½Π΅, Π½ΠΎ ΠΈ Ρ ΡΡΠ½ΠΎΡΠΎ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΠ°Π½Π΅ Π½Π° ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°ΡΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ Ρ Π»ΠΎΠ³ΠΈΠΊΠ°ΡΠ° Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΠΊΠΎΠ»Π΅ΠΊΡΠΈΡΡΠ° (for ΡΠΈΠΊΡΠ», ΠΎΠ±ΡΠ°ΡΠ½ΠΈ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½ΠΈΡ).
ΠΠ΄ΠΈ Π¨Π°Π²ΠΈΡ ΠΏΠΎΠ΄ΡΠ΅ΡΡΠ°Π²Π° ΡΠ»Π΅Π΄Π½ΠΎΡΠΎ: Π½Π°Π»ΠΈΡΠ½ΠΈΡΠ΅ Π² ΠΌΠΎΠΌΠ΅Π½ΡΠ° ΠΌΠ΅ΡΠΎΠ΄ΠΈ ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π²Π°Ρ ΠΏΡΠ΅Π· ΡΡΠ»Π°ΡΠ° ΠΊΠΎΠ»Π΅ΠΊΡΠΈΡ ΠΈ Π½Π΅ ΠΎΡΠΈΠ³ΡΡΡΠ²Π°Ρ Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ Π½ΡΠΊΠ°ΠΊΠ²ΠΎ Π²ΡΡΡΠ΅ΡΠ½ΠΎ ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π½ΠΎ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ (ΠΈΠ»ΠΈ Π³ΠΎ ΠΏΡΠ°Π²ΡΡ Π² ΡΠ»ΡΡΠ°ΠΉ Π½Π° ΠΎΠ±ΡΠ°ΡΠ½ΠΈ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½ΠΈΡ, Π½ΠΎ Ρ Π³ΠΎΠ»ΡΠΌ Π±ΡΠΎΠΉ Π½Π΅ΠΏΡΠΈΡΡΠ½ΠΈ ΡΡΡΠ°Π½ΠΈΡΠ½ΠΈ Π΅ΡΠ΅ΠΊΡΠΈ, ΠΊΠ°ΡΠΎ Callback Hell) . ΠΠ·Π³Π»Π΅ΠΆΠ΄Π°, ΡΠ΅ ΠΈΠΌΠ° ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠΈ, Π½ΠΎ Π΄ΠΎΡΠΈ ΠΈ Ρ ΡΡΡ Π²ΡΠΈΡΠΊΠΎ Π½Π΅ Π΅ ΡΠΎΠ»ΠΊΠΎΠ²Π° Π³Π»Π°Π΄ΠΊΠΎ: Π½ΡΠΌΠ° ΠΎΠ±ΡΠΈ Π²Ρ ΠΎΠ΄Π½ΠΈ ΠΈ ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΈ ΡΠΎΡΠΊΠΈ (Π½Π°ΡΠ°Π»ΠΎ β ΠΊΡΠ°ΠΉ ΡΡΠ΅ΡΡ rbegin β ΡΠ°Π·ΠΊΡΡΠ²Π°Π½Π΅ ΠΈ Ρ.Π½.), Π½Π΅ Π΅ ΡΡΠ½ΠΎ ΠΊΠΎΠ»ΠΊΠΎ Π΄ΡΠ»Π³ΠΎ ΡΠ΅ ΠΏΠΎΠ²ΡΠΎΡΠΈΠΌ? ΠΠ°ΠΏΠΎΡΠ²Π°ΠΉΠΊΠΈ Ρ C++20, ΡΠ΅Π·ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ ΡΠ° ΡΠ΅ΡΠ΅Π½ΠΈ!
ΠΡΡΠ²ΠΈ Π²Π°ΡΠΈΠ°Π½Ρ: Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΈ. Π§ΡΠ΅Π· ΠΎΠΏΠ°ΠΊΠΎΠ²Π°Π½Π΅ Π½Π° ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠΈ, Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡΡΠ°Π²Π°ΠΌΠ΅ ΠΎΠ±Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π·Π° Π½Π°ΡΠ°Π»ΠΎΡΠΎ ΠΈ ΠΊΡΠ°Ρ Π½Π° ΠΈΡΠ΅ΡΠ°ΡΠΈΡ ΠΈ ΡΡΡΠΎ ΡΠ°ΠΊΠ° ΠΏΠΎΠ»ΡΡΠ°Π²Π°ΠΌΠ΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡΠ°Π½Π΅. ΠΡΠΈΡΠΊΠΎ ΡΠΎΠ²Π° ΡΠ»Π΅ΡΠ½ΡΠ²Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ΡΠΎ Π½Π° ΠΏΡΠ»Π½ΠΎΡΠ΅Π½Π½ΠΈ ΡΡΡΠ±ΠΎΠΏΡΠΎΠ²ΠΎΠ΄ΠΈ Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° Π΄Π°Π½Π½ΠΈ. ΠΠΎ Π½Π΅ Π²ΡΠΈΡΠΊΠΎ Π΅ ΡΠΎΠ»ΠΊΠΎΠ²Π° Π³Π»Π°Π΄ΠΊΠΎ: ΡΠ°ΡΡ ΠΎΡ Π»ΠΎΠ³ΠΈΠΊΠ°ΡΠ° Π½Π° ΠΈΠ·ΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ΡΠΎ ΡΠ΅ Π½Π°ΠΌΠΈΡΠ° Π²ΡΡΡΠ΅ Π² ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡΠ° Π½Π° ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ΅Π½ ΠΈΡΠ΅ΡΠ°ΡΠΎΡ, ΠΊΠΎΠ΅ΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΡΠ»ΠΎΠΆΠ½ΠΈ ΠΊΠΎΠ΄Π° Π·Π° ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ ΠΈ ΠΎΡΡΡΡΠ°Π½ΡΠ²Π°Π½Π΅ Π½Π° Π³ΡΠ΅ΡΠΊΠΈ.
Π‘Π»Π°ΠΉΠ΄ ΠΎΡ
Π, Π·Π° ΡΠΎΠ·ΠΈ ΡΠ»ΡΡΠ°ΠΉ C++20 Π΄ΠΎΠ±Π°Π²ΠΈ ΠΊΠΎΡΡΡΠΈΠ½ΠΈ (ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΠΈΠ΅ΡΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π΅ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Π½Π° Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠΈΡΠ΅ Π² Python): ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΎΡΠ»ΠΎΠΆΠ΅Π½ΠΎ ΡΡΠ΅Π· Π²ΡΡΡΠ°Π½Π΅ Π½Π° Π½ΡΠΊΠ°ΠΊΠ²Π° ΡΠ΅ΠΊΡΡΠ° ΡΡΠΎΠΉΠ½ΠΎΡΡ, ΠΊΠ°ΡΠΎ ΡΡΡΠ΅Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΡΠ΅ Π·Π°ΠΏΠ°Π·ΠΈ ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π½ΠΎ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅. ΠΠΎ ΡΠΎΠ·ΠΈ Π½Π°ΡΠΈΠ½ ΠΏΠΎΡΡΠΈΠ³Π°ΠΌΠ΅ Π½Π΅ ΡΠ°ΠΌΠΎ ΡΠ°Π±ΠΎΡΠ° Ρ Π΄Π°Π½Π½ΠΈ, ΠΊΠ°ΠΊΡΠΎ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π°Ρ, Π½ΠΎ ΠΈ ΠΊΠ°ΠΏΡΡΠ»ΠΈΡΠ°Π½Π΅ Π½Π° ΡΡΠ»Π°ΡΠ° Π»ΠΎΠ³ΠΈΠΊΠ° Π² ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½Π° ΡΡΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°.
ΠΠΎ ΠΈΠΌΠ° Π΅Π΄Π½Π° ΠΌΡΡ Π° Π² ΠΌΠ΅Ρ Π»Π΅ΠΌΠ°: Π² ΠΌΠΎΠΌΠ΅Π½ΡΠ° ΡΠ΅ ΡΠ΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Ρ ΡΠ°ΠΌΠΎ ΡΠ°ΡΡΠΈΡΠ½ΠΎ ΠΎΡ ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°ΡΠΈΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠΈ ΠΈ ΡΡΡΠΎ ΡΠ°ΠΊΠ° Π½Π΅ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Ρ ΡΠΎΠ»ΠΊΠΎΠ²Π° ΡΠΏΡΠ΅ΡΠ½Π°ΡΠΎ, ΠΊΠΎΠ»ΠΊΠΎΡΠΎ Π±ΠΈΡ ΠΌΠ΅ ΠΈΡΠΊΠ°Π»ΠΈ: Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΡΠ΅ ΠΎΡΠ΅ Π½Π΅ ΡΠΈ ΡΡΡΡΠ²Π° Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΠΏΡΠ΅ΠΏΡΠ°ΡΠΊΠΈ ΠΈ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΈ ΠΎΠ±Π΅ΠΊΡΠΈ Π² ΠΊΠΎΡΡΡΠΈΠ½ΠΈΡΠ΅. ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π° ΠΈΠΌΠ° Π½ΡΠΊΠΎΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π·Π° ΡΠΎΠ²Π° ΠΊΠ°ΠΊΠ²ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΡΡΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈΡΠ΅ constexpr, ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠΈΡΠ΅/Π΄Π΅ΡΡΡΡΠΊΡΠΎΡΠΈΡΠ΅ ΠΈ main Π½Π΅ ΡΠ° Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈ Π² ΡΠΎΠ·ΠΈ ΡΠΏΠΈΡΡΠΊ.
ΠΠΎ ΡΠΎΠ·ΠΈ Π½Π°ΡΠΈΠ½ ΡΡΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠ΅ ΡΠ΅ΡΠ°Π²Π°Ρ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½Π° ΡΠ°ΡΡ ΠΎΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈΡΠ΅ Ρ ΠΏΡΠΎΡΡΠΎΡΠ°ΡΠ° Π½Π° Π»ΠΎΠ³ΠΈΠΊΠ°ΡΠ° Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° Π΄Π°Π½Π½ΠΈ, Π½ΠΎ Π½Π°ΡΡΠΎΡΡΠΈΡΠ΅ ΠΈΠΌ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈΠ·ΠΈΡΠΊΠ²Π°Ρ ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΈΠ΅.
ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»ΠΈ:
- Π‘Π»Π°ΠΉΠ΄ΠΎΠ²Π΅ ΠΎΡ 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 ΡΠ°ΠΉΠ» Ρ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡΠ° ΠΈ ΡΡΡΠΎ ΡΠ°ΠΊΠ° ΠΏΠΎΠ»ΡΡΠ°Π²Π°ΠΌΠ΅ Π΄ΠΈΠ·Π°ΠΉΠ½, ΠΊΠΎΠΉΡΠΎ Π΅ ΠΏΠΎ-ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡ Π·Π° ΠΊΠ΅ΡΠΈΡΠ°Π½Π΅ ΠΎΡ ΠΏΡΠΎΡΠ΅ΡΠΎΡΠ°.
Π Π΅Π³ΠΈΡΡΡΠΈΡΠ°Π½Π΅ΡΠΎ ΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ΡΠΎ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π°Ρ Π° ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ Π²ΠΏΠ΅ΡΠ°ΡΠ»ΡΠ²Π°ΡΠΈ ΠΈ Π·Π°ΡΠΎΠ²Π° Π½ΡΠΌΠ° Π΄Π° Π±ΡΠ΄Π°Ρ ΡΠΏΠΎΠΌΠ΅Π½Π°ΡΠΈ Π² ΡΠΎΠ·ΠΈ ΠΏΡΠ΅Π³Π»Π΅Π΄.
Π‘Π»Π°ΠΉΠ΄ΠΎΠ²Π΅ΡΠ΅ Π½Π° Π΄ΠΎΠΊΠ»Π°Π΄Π° ΡΠ° Π΄ΠΎΡΡΡΠΏΠ½ΠΈ Π½Π° ΡΠ»Π΅Π΄Π½Π°ΡΠ° Π²ΡΡΠ·ΠΊΠ°:
Π‘ΡΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΈ ΡΠ΅Ρ Π½ΠΈΠΊΠΈ Π·Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Π½Π΅ Π½Π° Π²Π°ΡΠΈΡ ΠΊΠΎΠ΄ Π‘Π£Π₯, BjΓΆrn Fahller
Π ΡΠΎΠ·ΠΈ ΡΠ°Π·Π³ΠΎΠ²ΠΎΡ ΠΡΠΎΡΠ½ Π€Π°Π»Π΅Ρ ΠΏΠΎΠΊΠ°Π·Π²Π° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π½Π°ΡΠΈΠ½Π° Π·Π° Π±ΠΎΡΠ±Π° ΡΡΡ ΡΡΠΈΠ»ΠΈΡΡΠΈΡΠ½ΠΈΡ Π½Π΅Π΄ΠΎΡΡΠ°ΡΡΠΊ Π½Π° ΠΌΠ½ΠΎΠ³ΠΎΠΊΡΠ°ΡΠ½ΠΈΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π½Π° ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ΡΠΎ:
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));
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΡΠ΅ Π½Π° ΡΠ°Π±Π»ΠΎΠ½Π° Π±Π΅Π· ΡΠΈΠΏ ΡΠ΅ ΠΏΠΎΠΌΠΎΠ³Π½Π°Ρ Π·Π° ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎΠ΄ΠΎΠ±ΡΡΠ²Π°Π½Π΅ Π½Π° ΡΠΈΡΡΠ°ΡΠΈΡΡΠ°. Π‘ ΡΡΡ Π½Π° ΠΏΠΎΠΌΠΎΡ ΡΠ΅ ΠΏΡΠ΅Ρ Π²ΡΡΠ»ΠΈΠΌ ΠΈΠ·Π±ΡΠΎΠΈΠΌΠΈΡΠ΅ Π΅Π»Π΅ΠΌΠ΅Π½ΡΠΈ Π½Π° enum Π² ΡΠΏΠΈΡΡΠΊΠ° Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ Π½Π° ΡΠ°Π±Π»ΠΎΠ½Π°:
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, Π½ΠΎ ΠΈ Ρ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΠΈ ΡΠΈΠΏΠΎΠ²Π΅, ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΠΊΠ°ΡΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ Π½Π° ΡΠ°Π±Π»ΠΎΠ½ Π±Π΅Π· ΡΠΈΠΏ:
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) Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠΈ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅. (ΠΠ°, ΡΠ΅Π³Π° ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΡΡ Π½Π° Π»Π°ΠΌΠ±Π΄Π° Π΅ ΠΎΡΠ΅ ΠΏΠΎ-Π»Π΅ΡΠ΅Π½ Π·Π° Π·Π°ΠΏΠΎΠΌΠ½ΡΠ½Π΅ - ΡΠΎΠ²Π° ΡΠ° ΡΠ΅ΡΠΈΡΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΈ Π΄Π²ΠΎΠΉΠΊΠΈ ΡΠΊΠΎΠ±ΠΈ ΠΎΡ Π²ΡΡΠΊΠ°ΠΊΡΠ² Π²ΠΈΠ΄.) ΠΠΊΠΎΠ½ΡΠ°ΡΠ΅Π»Π½ΠΎΡΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΊΠ°ΡΠΎ Π΄Π΅ΡΠ°ΠΉΠ»ΠΈ Π½Π° ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ°, Π½Π°ΠΈΡΡΠΈΠ½Π° ΡΡΠΎΠΏΠ»Ρ Π΄ΡΡΠ°ΡΠ° ΠΌΠΈ, Π΄Π° Π½Π΅ Π³ΠΎΠ²ΠΎΡΠΈΠΌ Π·Π° ΠΊΠΎΡΡΠ΅ΠΆΠ° Π½Π° ΠΈΠ·ΡΠ°Π·Π° Π² Π½Π°ΠΉ-Π΄ΠΎΠ±ΡΠΈΡΠ΅ ΡΡΠ°Π΄ΠΈΡΠΈΠΈ Π½Π° Π»Π°ΠΌΠ±Π΄Π° ΡΠΌΡΡΠ°Π½Π΅.
ΠΠ°ΠΊΡΠ°Ρ Π½Π΅ Π·Π°Π±ΡΠ°Π²ΡΠΉΡΠ΅ Π΄Π° Π³ΠΎ ΠΈΠ·Π»ΡΡΠΊΠ°ΡΠ΅:
- ΠΠ΅ Π·Π°Π±ΡΠ°Π²ΡΠΉΡΠ΅, ΡΠ΅ lambdas ΡΠ° constexpr Π±Π΅Π·ΠΏΠ»Π°ΡΠ½ΠΎ;
- ΠΠ΅ΠΊΠ° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΏΠ΅ΡΡΠ΅ΠΊΡΠ½ΠΎ ΠΏΡΠ΅ΠΏΡΠ°ΡΠ°Π½Π΅ ΠΈ Π΄Π° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ Π½Π΅Π³ΠΎΠ²ΠΈΡ Π³ΡΠΎΠ·Π΅Π½ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Π²ΡΠ² Π²ΡΡΠ·ΠΊΠ° Ρ ΠΏΠ°ΠΊΠ΅ΡΠ° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ Π² Π»Π°ΠΌΠ±Π΄Π° Π·Π°ΡΠ²Π°ΡΡΠ½Π΅ΡΠΎ;
- ΠΠ΅ΠΊΠ° Π΄Π° Π΄Π°Π΄Π΅ΠΌ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠ° ΠΏΠΎΠ²Π΅ΡΠ΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π·Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Ρ ΡΡΠ»ΠΎΠ²Π½ΠΎ noexcept;
- ΠΠ΅ΠΊΠ° ΡΠ΅ ΠΏΠΎΠ³ΡΠΈΠΆΠΈΠΌ Π·Π° ΠΏΠΎ-ΡΠ°Π·Π±ΠΈΡΠ°Π΅ΠΌ ΠΈΠ·Ρ ΠΎΠ΄ Π·Π° Π³ΡΠ΅ΡΠΊΠΈ Π² ΡΠ°Π±Π»ΠΎΠ½ΠΈΡΠ΅, Π±Π»Π°Π³ΠΎΠ΄Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΈΠ·ΡΠΈΡΠ½ΠΈΡΠ΅ Π²ΡΡΠ½Π°ΡΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ Π½Π° Π»Π°ΠΌΠ±Π΄Π°. Π’ΠΎΠ²Π° ΡΠ΅ ΠΏΡΠΈΠ½ΡΠ΄ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠ° Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ, ΠΏΡΠ΅Π΄ΠΈ ΡΡΠ½ΠΊΡΠΈΡΡΠ° Π½Π° ΡΠ°Π±Π»ΠΎΠ½Π° Π΄Π° Π±ΡΠ΄Π΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»Π½ΠΎ ΠΈΠ·Π²ΠΈΠΊΠ°Π½Π° - Π½Π° Π΅ΡΠ°ΠΏΠ° Π½Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΡΠΈΠΏΠ°.
ΠΠ° ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ Π²ΠΈΠΆΡΠ΅ Π»Π΅ΠΊΡΠΈΠΎΠ½Π½ΠΈΡΠ΅ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»ΠΈ:
- ΠΠΎΠΊΠ»Π°Π΄Π²Π°ΠΉΡΠ΅ ΡΠ»Π°ΠΉΠ΄ΠΎΠ²Π΅:
[Π‘ΡΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΈ ΡΠ΅Ρ Π½ΠΈΠΊΠΈ Π·Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Π½Π΅ Π½Π° Π²Π°ΡΠΈΡ ΠΊΠΎΠ΄ Π‘Π£Π₯] ΠΠ·Ρ ΠΎΠ΄Π΅Π½ ΠΊΠΎΠ΄ Π² github Π‘ΡΠ°ΡΠΈΡ Π² Π±Π»ΠΎΠ³Π° Π½Π° Π°Π²ΡΠΎΡΠ°
ΠΠ°ΡΠΈΡΠ΅ Π²ΠΏΠ΅ΡΠ°ΡΠ»Π΅Π½ΠΈΡ
ΠΡΡΠ²ΠΎΡΠΎ Π½ΠΈ ΡΡΠ°ΡΡΠΈΠ΅ Π² C++ Russia Π±Π΅ΡΠ΅ Π·Π°ΠΏΠΎΠΌΠ½ΡΡΠΎ ΡΠ΅ ΡΡΡ ΡΠ²ΠΎΡΡΠ° ΠΈΠ½ΡΠ΅Π½Π·ΠΈΠ²Π½ΠΎΡΡ. ΠΡΡΠ°Π½Π°Ρ Ρ Π²ΠΏΠ΅ΡΠ°ΡΠ»Π΅Π½ΠΈΠ΅ΡΠΎ Π·Π° C++ Russia ΠΊΠ°ΡΠΎ ΠΈΡΠΊΡΠ΅Π½ΠΎ ΡΡΠ±ΠΈΡΠΈΠ΅, ΠΊΡΠ΄Π΅ΡΠΎ Π³ΡΠ°Π½ΠΈΡΠ°ΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ ΠΎΠ±ΡΡΠ΅Π½ΠΈΠ΅ ΠΈ ΠΎΠ±ΡΡΠ²Π°Π½Π΅ Π½Π° ΠΆΠΈΠ²ΠΎ Π΅ ΠΏΠΎΡΡΠΈ Π½Π΅Π·Π°Π±Π΅Π»Π΅ΠΆΠΈΠΌΠ°. ΠΡΠΈΡΠΊΠΎ, ΠΎΡ Π½Π°ΡΡΡΠΎΠ΅Π½ΠΈΠ΅ΡΠΎ Π½Π° Π»Π΅ΠΊΡΠΎΡΠΈΡΠ΅ Π΄ΠΎ ΡΡΡΡΠ΅Π·Π°Π½ΠΈΡΡΠ° ΠΎΡ ΠΏΠ°ΡΡΠ½ΡΠΎΡΠΈΡΠ΅ Π½Π° ΡΡΠ±ΠΈΡΠΈΠ΅ΡΠΎ, ΠΏΡΠ΅Π΄ΡΠ°Π·ΠΏΠΎΠ»Π°Π³Π° ΠΊΡΠΌ ΡΠ°Π·Π³ΠΎΡΠ΅ΡΠ΅Π½ΠΈ Π΄ΠΈΡΠΊΡΡΠΈΠΈ. Π‘ΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΡΡΠ°, ΡΡΡΡΠΎΡΡΠΎ ΡΠ΅ ΠΎΡ Π΄ΠΎΠΊΠ»Π°Π΄ΠΈ, ΠΎΠ±Ρ Π²Π°ΡΠ° Π΄ΠΎΡΡΠ° ΡΠΈΡΠΎΠΊ ΡΠΏΠ΅ΠΊΡΡΡ ΠΎΡ ΡΠ΅ΠΌΠΈ, Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ ΠΈΠ½ΠΎΠ²Π°ΡΠΈΠΈ Π² C++, ΠΊΠ°Π·ΡΡΠΈ Π½Π° Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΈ ΠΈ ΠΈΠ΄Π΅ΠΎΠ»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ½ΠΈ ΡΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ. ΠΠΎ Π±ΠΈ Π±ΠΈΠ»ΠΎ Π½Π΅ΡΠΏΡΠ°Π²Π΅Π΄Π»ΠΈΠ²ΠΎ Π΄Π° ΠΏΡΠ΅Π½Π΅Π±ΡΠ΅Π³Π½Π΅ΠΌ ΡΠΎΡΠΈΠ°Π»Π½ΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Π½Π° ΡΡΠ±ΠΈΡΠΈΠ΅ΡΠΎ, ΠΊΠΎΠΉΡΠΎ ΠΏΠΎΠΌΠ°Π³Π° Π·Π° ΠΏΡΠ΅ΠΎΠ΄ΠΎΠ»ΡΠ²Π°Π½Π΅ Π½Π° Π΅Π·ΠΈΠΊΠΎΠ²ΠΈΡΠ΅ Π±Π°ΡΠΈΠ΅ΡΠΈ Π½Π΅ ΡΠ°ΠΌΠΎ ΠΏΠΎ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ Π½Π° C++.
ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΠΈΠΌ Π½Π° ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΎΡΠΈΡΠ΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΡΡΠ° Π·Π° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠ° Π΄Π° ΡΡΠ°ΡΡΠ²Π°ΠΌΠ΅ Π² ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ ΡΡΠ±ΠΈΡΠΈΠ΅!
ΠΠΎΠΆΠ΅ Π±ΠΈ ΡΡΠ΅ Π²ΠΈΠ΄Π΅Π»ΠΈ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡΡΠ° Π½Π° ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΎΡΠΈΡΠ΅ Π·Π° ΠΌΠΈΠ½Π°Π»ΠΎΡΠΎ, Π½Π°ΡΡΠΎΡΡΠ΅ΡΠΎ ΠΈ Π±ΡΠ΄Π΅ΡΠ΅ΡΠΎ Π½Π° C++ Russia
ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΠΈΠΌ Π²ΠΈ, ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΠΎΡ
ΡΠ΅ ΠΈ ΡΠ΅ Π½Π°Π΄ΡΠ²Π°ΠΌΠ΅, ΡΠ΅ Π½Π°ΡΠΈΡΡ ΠΏΡΠ΅ΡΠ°Π·ΠΊΠ°Π· Π½Π° ΡΡΠ±ΠΈΡΠΈΡΡΠ° Π΅ Π±ΠΈΠ» ΠΏΠΎΠ»Π΅Π·Π΅Π½!
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: www.habr.com