ΠΠΊΠΎ Π² Π½Π°ΡΠ°Π»ΠΎΡΠΎ Π½Π° ΠΏΠΈΠ΅ΡΠ°ΡΠ° ΠΊΠ°Π·Π²Π°ΡΠ΅, ΡΠ΅ Π½Π° ΡΡΠ΅Π½Π°ΡΠ° Π²ΠΈΡΡΠ²Π° ΠΊΠΎΠ΄ Π½Π° C++, ΡΠΎ Π² ΠΊΡΠ°Ρ ΡΠΎΠΉ Π½Π΅ΠΏΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΡΡΡΠ±Π²Π° Π΄Π° Π²ΠΈ ΡΡΡΠ΅Π»Ρ Π² ΠΊΡΠ°ΠΊΠ°.
ΠΡΡΠ½Π΅ Π‘ΡΡΠΎΡΡΡΡΡΠΏ
ΠΡ 31 ΠΎΠΊΡΠΎΠΌΠ²ΡΠΈ Π΄ΠΎ 1 Π½ΠΎΠ΅ΠΌΠ²ΡΠΈ Π² Π‘Π°Π½ΠΊΡ ΠΠ΅ΡΠ΅ΡΠ±ΡΡΠ³ ΡΠ΅ ΠΏΡΠΎΠ²Π΅Π΄Π΅ ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΡΡΠ° C++ Russia Piter β Π΅Π΄Π½ΠΎ ΠΎΡ ΠΌΠ°ΡΠ°Π±Π½ΠΈΡΠ΅ ΡΡΠ±ΠΈΡΠΈΡ ΠΏΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ Π² Π ΡΡΠΈΡ, ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ°Π½ΠΎ ΠΎΡ JUG Ru Group. Π‘ΡΠ΅Π΄ ΠΏΠΎΠΊΠ°Π½Π΅Π½ΠΈΡΠ΅ Π»Π΅ΠΊΡΠΎΡΠΈ ΡΠ° ΡΠ»Π΅Π½ΠΎΠ²Π΅ Π½Π° ΠΊΠΎΠΌΠΈΡΠ΅ΡΠ° ΠΏΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠΈΠ·Π°ΡΠΈΡ Π½Π° C++, Π΄ΠΎΠΊΠ»Π°Π΄ΡΠΈΡΠΈ ΠΎΡ CppCon, Π°Π²ΡΠΎΡΠΈ Π½Π° ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΡ ΠΈΠ·Π΄Π°ΡΠ΅Π»ΡΡΠ²ΠΎ OβReilly, ΠΊΠ°ΠΊΡΠΎ ΠΈ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°ΡΠ΅Π»ΠΈ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠΈ ΠΊΠ°ΡΠΎ LLVM, libc++ ΠΈ Boost. ΠΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΡΡΠ° Π΅ Π½Π°ΡΠΎΡΠ΅Π½Π° ΠΊΡΠΌ ΠΎΠΏΠΈΡΠ½ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈ Π½Π° C++, ΠΊΠΎΠΈΡΠΎ ΠΈΡΠΊΠ°Ρ Π΄Π° Π·Π°Π΄ΡΠ»Π±ΠΎΡΠ°Ρ Π΅ΠΊΡΠΏΠ΅ΡΡΠΈΠ·Π°ΡΠ° ΡΠΈ ΠΈ Π΄Π° ΠΎΠ±ΠΌΠ΅Π½ΡΡ ΠΎΠΏΠΈΡ Π² ΠΆΠΈΠ²Π° ΠΊΠΎΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΡ. Π‘ΡΡΠ΄Π΅Π½ΡΠΈΡΠ΅, Π°ΡΠΏΠΈΡΠ°Π½ΡΠΈΡΠ΅ ΠΈ ΠΏΡΠ΅ΠΏΠΎΠ΄Π°Π²Π°ΡΠ΅Π»ΠΈΡΠ΅ Π² ΡΠ½ΠΈΠ²Π΅ΡΡΠΈΡΠ΅ΡΠΈΡΠ΅ ΠΏΠΎΠ»ΡΡΠ°Π²Π°Ρ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΡΡΠ½ΠΈ ΠΎΡΡΡΡΠΏΠΊΠΈ.
ΠΠΎΡΠΊΠΎΠ²ΡΠΊΠΎΡΠΎ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΡΡΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΏΠΎΡΠ΅ΡΠ°Π²Π°Π½ΠΎ ΠΎΡΠ΅ ΠΏΡΠ΅Π· Π°ΠΏΡΠΈΠ» ΡΠ»Π΅Π΄Π²Π°ΡΠ°ΡΠ° Π³ΠΎΠ΄ΠΈΠ½Π°, Π° ΠΌΠ΅ΠΆΠ΄ΡΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π½Π°ΡΠΈΡΠ΅ ΡΡΡΠ΄Π΅Π½ΡΠΈ ΡΠ΅ ΡΠ°Π·ΠΊΠ°ΠΆΠ°Ρ ΠΊΠ°ΠΊΠ²ΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ ΡΠ·Π½Π°Π»ΠΈ Π½Π° ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π»ΠΎΡΠΎ ΡΡΠ±ΠΈΡΠΈΠ΅.Β

Π‘Π½ΠΈΠΌΠΊΠ° ΠΎΡ
ΠΠ° Π½Π°Ρ
ΠΠΎ ΡΠΎΠ·ΠΈ ΠΏΠΎΡΡ ΡΠ°Π±ΠΎΡΠΈΡ Π° Π΄Π²Π΅ ΡΡΡΠ΄Π΅Π½ΡΠΊΠΈ ΠΎΡ ΠΠΠ£ ΠΠ¨Π β Π‘Π°Π½ΠΊΡ ΠΠ΅ΡΠ΅ΡΠ±ΡΡΠ³:
- ΠΠΈΠ·Π° ΠΠ°ΡΠΈΠ»Π΅Π½ΠΊΠΎ β ΡΡΡΠ΄Π΅Π½ΡΠΊΠ° ΠΎΡ 4-ΡΠΈ ΠΊΡΡΡ Π±Π°ΠΊΠ°Π»Π°Π²ΡΠΈΠ°Ρ, ΠΈΠ·ΡΡΠ°Π²Π°ΡΠ° Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ βΠΠ·ΠΈΡΠΈ Π·Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅β Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° βΠΡΠΈΠ»ΠΎΠΆΠ½Π° ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΠΊΠ° ΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΊΠ°β. ΠΠ°ΠΏΠΎΠ·Π½Π°Π²Π°ΠΉΠΊΠΈ ΡΠ΅ Ρ Π΅Π·ΠΈΠΊΠ° C++ ΠΎΡΠ΅ Π½Π° ΠΏΡΡΠ²Π°ΡΠ° Π³ΠΎΠ΄ΠΈΠ½Π° Π² ΡΠ½ΠΈΠ²Π΅ΡΡΠΈΡΠ΅ΡΠ°, ΠΏΠΎ-ΠΊΡΡΠ½ΠΎ ΠΏΡΠΈΠ΄ΠΎΠ±ΠΈΠ»Π° ΠΎΠΏΠΈΡ Ρ Π½Π΅Π³ΠΎ Π½Π° ΡΡΠ°ΠΆΠΎΠ²Π΅ Π² ΠΈΠ½Π΄ΡΡΡΡΠΈΡΡΠ°. Π£Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΏΠΎ Π΅Π·ΠΈΡΠΈ Π·Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ ΠΊΠ°ΡΠΎ ΡΡΠ»ΠΎ ΠΈ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ Π² ΡΠ°ΡΡΠ½ΠΎΡΡ ΠΏΠΎΠ²Π»ΠΈΡΠ»ΠΎ Π½Π° ΠΈΠ·Π±ΠΎΡΠ° Π½Π° ΡΠ΅ΠΌΠΈ Π·Π° Π΄ΠΎΠΊΠ»Π°Π΄ΠΈΡΠ΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΡΡΠ°.
- ΠΠ°Π½Ρ Π‘ΠΌΠΈΡΠ½ΠΎΠ² β ΡΡΡΠ΄Π΅Π½Ρ ΠΎΡ 1-Π²ΠΈ ΠΊΡΡΡ ΠΌΠ°Π³ΠΈΡΡΡΠ°ΡΡΡΠ° βΠΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ ΠΈ Π°Π½Π°Π»ΠΈΠ· Π½Π° Π΄Π°Π½Π½ΠΈβ. ΠΡΠ΅ Π² ΡΡΠΈΠ»ΠΈΡΠ΅ ΡΠ΅ΡΠ°Π²Π°Π» Π·Π°Π΄Π°ΡΠΈ ΠΎΡ ΠΎΠ»ΠΈΠΌΠΏΠΈΠ°Π΄ΠΈ Π½Π° C++, Π° ΡΠ»Π΅Π΄ ΡΠΎΠ²Π°, ΡΠ°ΠΊΠ° ΡΠ΅ ΡΠ»ΡΡΠΈ, ΡΠ΅ Π΅Π·ΠΈΠΊΡΡ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ ΡΠ΅ ΠΏΠΎΡΠ²ΡΠ²Π°Π» Π² ΡΡΠ΅Π±Π½Π°ΡΠ° ΠΌΡ Π΄Π΅ΠΉΠ½ΠΎΡΡ ΠΈ Π² ΠΊΡΠ°ΠΉΠ½Π° ΡΠΌΠ΅ΡΠΊΠ° ΡΡΠ°Π½Π°Π» ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡΡ ΡΠ°Π±ΠΎΡΠ΅Π½ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ. Π ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΡΡΠ° ΡΠ΅ΡΠΈΠ» Π΄Π° ΡΡΠ°ΡΡΠ²Π°, Π·Π° Π΄Π° ΠΏΠΎΠ΄ΠΎΠ±ΡΠΈ Π·Π½Π°Π½ΠΈΡΡΠ° ΡΠΈ ΠΈ Π΄Π° Π½Π°ΡΡΠΈ Π·Π° Π½ΠΎΠ²ΠΈΡΠ΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ.
Π ΡΠ°Π·ΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ΠΈΠ΅ΡΠΎ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎΡΠΎ Π½Π° ΡΠ°ΠΊΡΠ»ΡΠ΅ΡΠ° ΡΠ΅ΡΡΠΎ ΡΠΏΠΎΠ΄Π΅Π»Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΈ ΡΡΠ±ΠΈΡΠΈΡ, ΡΠ²ΡΡΠ·Π°Π½ΠΈ Ρ Π½Π°ΡΠ°ΡΠ° ΡΠΏΠ΅ΡΠΈΠ°Π»Π½ΠΎΡΡ. ΠΡΠ΅Π· ΡΠ΅ΠΏΡΠ΅ΠΌΠ²ΡΠΈ Π²ΠΈΠ΄ΡΡ ΠΌΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° C++ Russia ΠΈ ΡΠ΅ΡΠΈΡ ΠΌΠ΅ Π΄Π° ΡΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠ°ΠΌΠ΅ ΠΊΠ°ΡΠΎ ΡΠ»ΡΡΠ°ΡΠ΅Π»ΠΈ. Π’ΠΎΠ²Π° Π΅ Π½Π°ΡΠΈΡΡ ΠΏΡΡΠ²ΠΈ ΠΎΠΏΠΈΡ Π² ΡΡΠ°ΡΡΠΈΡ Π² ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΠΈ.
Π‘ΡΡΡΠΊΡΡΡΠ° Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΡΡΠ°
ΠΠΎΠΊΠ»Π°Π΄ΠΈ
Π ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½Π° Π΄Π²Π° Π΄Π½ΠΈ Π΅ΠΊΡΠΏΠ΅ΡΡΠΈΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΠΎΡ Π° 30 Π΄ΠΎΠΊΠ»Π°Π΄Π°, ΠΎΠ±ΡΡΠΆΠ΄Π°ΠΉΠΊΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π°ΠΊΡΡΠ°Π»Π½ΠΈ ΡΠ΅ΠΌΠΈ: ΠΎΡΡΡΠΎΡΠΌΠ½ΠΈΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π° ΡΡΠ½ΠΊΡΠΈΠΈΡΠ΅ Π½Π° Π΅Π·ΠΈΠΊΠ° Π·Π° ΡΠ΅ΡΠ°Π²Π°Π½Π΅ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π·Π°Π΄Π°ΡΠΈ, ΠΏΡΠ΅Π΄ΡΡΠΎΡΡΠΈΡΠ΅ Π°ΠΊΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π½Π° Π΅Π·ΠΈΠΊΠ° Π²ΡΠ² Π²ΡΡΠ·ΠΊΠ° Ρ Π½ΠΎΠ²ΠΈΡ ΡΡΠ°Π½Π΄Π°ΡΡ, ΠΊΠΎΠΌΠΏΡΠΎΠΌΠΈΡΠΈΡΠ΅ ΠΏΡΠΈ Π΄ΠΈΠ·Π°ΠΉΠ½Π° Π½Π° C++ ΠΈ ΠΌΠ΅ΡΠΊΠΈΡΠ΅ Π·Π° Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ° Ρ ΡΠ΅Ρ Π½ΠΈΡΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΡ, ΠΏΡΠΈΠΌΠ΅ΡΠΈ Π·Π° ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Π° Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠΈ, ΠΊΠ°ΠΊΡΠΎ ΠΈ Π½ΡΠΊΠΎΠΈ Π·Π°Π΄ΠΊΡΠ»ΠΈΡΠ½ΠΈ Π΄Π΅ΡΠ°ΠΉΠ»ΠΈ Π½Π° ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ°ΡΠ° Π½Π° Π΅Π·ΠΈΠΊΠ°. ΠΠ°ΡΠ°Π»Π΅Π»Π½ΠΎ ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΠΆΠ΄Π°Ρ Π° ΠΏΠΎ 3 ΠΈΠ·ΠΊΠ°Π·Π²Π°Π½ΠΈΡ, ΠΊΠ°ΡΠΎ ΠΏΠΎ-ΡΠ΅ΡΡΠΎ Π΄Π²Π΅ Π½Π° ΡΡΡΠΊΠΈ ΠΈ Π΅Π΄Π½ΠΎ Π½Π° Π°Π½Π³Π»ΠΈΠΉΡΠΊΠΈ Π΅Π·ΠΈΠΊ.
ΠΠΎΠ½ΠΈ Π·Π° ΠΎΠ±ΡΡΠΆΠ΄Π°Π½Π΅
Π‘Π»Π΅Π΄ ΠΏΡΠ΅Π·Π΅Π½ΡΠ°ΡΠΈΡΡΠ° Π²ΡΠΈΡΠΊΠΈ Π½Π΅Π·Π°Π΄Π°Π½ΠΈ Π²ΡΠΏΡΠΎΡΠΈ ΠΈ Π½Π΅Π·Π°Π²ΡΡΡΠ΅Π½ΠΈ Π΄ΠΈΡΠΊΡΡΠΈΠΈ ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π²Π°Ρ Π° Π² ΡΠΏΠ΅ΡΠΈΠ°Π»Π½ΠΎ ΠΎΠ±ΠΎΡΠΎΠ±Π΅Π½ΠΈ Π·ΠΎΠ½ΠΈ Π·Π° ΡΠ°Π·Π³ΠΎΠ²ΠΎΡΠΈ Ρ Π»Π΅ΠΊΡΠΎΡΠΈΡΠ΅, ΠΎΠ±ΠΎΡΡΠ΄Π²Π°Π½ΠΈ Ρ ΠΌΠ°ΡΠΊΠ΅ΡΠ½ΠΈ Π΄ΡΡΠΊΠΈ. ΠΡΠ»ΠΈΡΠ΅Π½ Π½Π°ΡΠΈΠ½ Π΄Π° ΠΏΡΠ΅ΠΊΠ°ΡΠ°ΡΠ΅ ΠΏΠΎΡΠΈΠ²ΠΊΠ°ΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ ΠΈΠ·ΠΊΠ°Π·Π²Π°Π½ΠΈΡΡΠ° Ρ ΠΏΡΠΈΡΡΠ΅Π½ ΡΠ°Π·Π³ΠΎΠ²ΠΎΡ.
Lightning Talks ΠΈ Π½Π΅ΡΠΎΡΠΌΠ°Π»Π½ΠΈ Π΄ΠΈΡΠΊΡΡΠΈΠΈ
ΠΠΊΠΎ ΠΆΠ΅Π»Π°Π΅ΡΠ΅ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ ΠΊΡΠ°ΡΠΊΠ° ΠΏΡΠ΅Π·Π΅Π½ΡΠ°ΡΠΈΡ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠ΅ Π·Π°ΠΏΠΈΡΠ΅ΡΠ΅ Π½Π° ΠΌΠ°ΡΠΊΠ΅ΡΠ½Π°ΡΠ° Π΄ΡΡΠΊΠ° Π·Π° Π²Π΅ΡΠ΅ΡΠ½ΠΈΡ Lightning Talk ΠΈ ΡΠ΅ ΠΈΠΌΠ°ΡΠ΅ ΠΏΠ΅Ρ ΠΌΠΈΠ½ΡΡΠΈ Π·Π° ΡΠ°Π·ΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° Π²ΡΠΈΡΠΊΠΎ, ΡΠ²ΡΡΠ·Π°Π½ΠΎ Ρ ΡΠ΅ΠΌΠ°ΡΠ° Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΡΡΠ°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π±ΡΡΠ·ΠΎ Π²ΡΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² sanitizers Π·Π° C++ (Π·Π° Π½ΡΠΊΠΎΠΈ ΠΎΠΊΠ°Π·Π° Π½ΠΎΠ²ΠΎΡΡ) ΠΈΠ»ΠΈ ΠΈΡΡΠΎΡΠΈΡ Π·Π° Π±ΡΠ³ Π² Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΡΠΈΠ½ΡΡΠΎΠΈΠ΄Π°, ΠΊΠΎΠΉΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΡΡΡ, Π½ΠΎ Π½Π΅ ΠΈ Π²ΠΈΠ΄ΡΠ½.
ΠΡΡΠ³ΠΈΡΡ ΡΠΎΡΠΌΠ°Ρ Π΅ ΠΏΠ°Π½Π΅Π»Π½Π° Π΄ΠΈΡΠΊΡΡΠΈΡ βΠ‘ ΠΊΠΎΠΌΠΈΡΠ΅ΡΠ° ΠΏΠΎ Π΄ΡΡΠΈΡΠ΅β. ΠΠ° ΡΡΠ΅Π½Π°ΡΠ° ΡΠ° Π½ΡΠΊΠΎΠΈ ΡΠ»Π΅Π½ΠΎΠ²Π΅ Π½Π° ΠΊΠΎΠΌΠΈΡΠ΅ΡΠ° ΠΏΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠΈΠ·Π°ΡΠΈΡ, Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠΎΡΠ° β ΠΊΠ°ΠΌΠΈΠ½Π° (ΠΎΡΠΈΡΠΈΠ°Π»Π½ΠΎ β Π·Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΡΡΡΠ½Π° Π°ΡΠΌΠΎΡΡΠ΅ΡΠ°, Π½ΠΎ ΠΏΡΠΈΡΠΈΠ½Π°ΡΠ° βΠ·Π°ΡΠΎΡΠΎ ΠΠ‘ΠΠ§ΠΠ Π Π ΠΠΠͺΠβ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΏΠΎ-Π·Π°Π±Π°Π²Π½Π°), Π²ΡΠΏΡΠΎΡΠΈΡΠ΅ ΡΠ° Π·Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ° ΠΈ ΠΎΠ±ΡΠΎΡΠΎ Π²ΠΈΠΆΠ΄Π°Π½Π΅ Π·Π° C++, Π±Π΅Π· Π±ΡΡΠ½ΠΈ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈ ΠΎΠ±ΡΡΠΆΠ΄Π°Π½ΠΈΡ ΠΈ Ρ ΠΎΠ»ΠΈΠ²Π°ΡΠΈ. ΠΠΊΠ°Π·Π° ΡΠ΅, ΡΠ΅ Π² ΠΊΠΎΠΌΠΈΡΠ΅ΡΠ° ΡΡΡΠΎ ΠΈΠΌΠ° ΠΆΠΈΠ²ΠΈ Ρ ΠΎΡΠ°, ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠ³Π°Ρ Π² Π½Π΅ΡΠΎ Π΄Π° Π½Π΅ ΡΠ° Π½Π°ΠΏΡΠ»Π½ΠΎ ΡΠ²Π΅ΡΠ΅Π½ΠΈ ΠΈΠ»ΠΈ Π½Π΅ΡΠΎ Π΄Π° Π½Π΅ Π·Π½Π°ΡΡ.
ΠΠ° Π»ΡΠ±ΠΈΡΠ΅Π»ΠΈΡΠ΅ Π½Π° Ρ ΠΎΠ»ΠΈΠ²Π°ΡΠΈΡΠ΅ ΠΏΠΎ ΡΡΡΠ΅ΡΡΠ²ΠΎ ΠΎΡΡΠ°Π²Π° ΡΡΠ΅ΡΠΎΡΠΎ ΡΡΠ±ΠΈΡΠΈΠ΅ β BOF-ΡΠ΅ΡΠΈΡ βGo ΡΡΠ΅ΡΡ C++β. ΠΠ·ΠΈΠΌΠ°ΠΌΠ΅ Π»ΡΠ±ΠΈΡΠ΅Π» Π½Π° Go, Π»ΡΠ±ΠΈΡΠ΅Π» Π½Π° C++, ΠΏΡΠ΅Π΄ΠΈ Π½Π°ΡΠ°Π»ΠΎΡΠΎ Π½Π° ΡΠ΅ΡΠΈΡΡΠ° ΡΠ΅ Π·Π°Π΅Π΄Π½ΠΎ ΠΏΠΎΠ΄Π³ΠΎΡΠ²ΡΡ 100500 ΡΠ»Π°ΠΉΠ΄Π° ΠΏΠΎ ΡΠ΅ΠΌΠ°ΡΠ° (ΠΊΠ°ΡΠΎ Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈΡΠ΅ Ρ ΠΏΠ°ΠΊΠ΅ΡΠΈΡΠ΅ Π² C++ ΠΈΠ»ΠΈ ΠΎΡΡΡΡΡΠ²ΠΈΠ΅ΡΠΎ Π½Π° Π³Π΅Π½Π΅ΡΠΈΡΠ½ΠΈ ΡΠΈΠΏΠΎΠ²Π΅ Π² Go), Π° ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΠΎΠΆΠΈΠ²Π΅Π½ΠΎ Π΄ΠΈΡΠΊΡΡΠΈΡΠ°Ρ ΠΏΠΎΠΌΠ΅ΠΆΠ΄Ρ ΡΠΈ ΠΈ Ρ Π°ΡΠ΄ΠΈΡΠΎΡΠΈΡΡΠ°, Π° Π·Π°Π»Π°ΡΠ° ΡΠ΅ ΠΎΠΏΠΈΡΠ²Π° Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ Π΅Π΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π΄Π²Π΅ Π³Π»Π΅Π΄Π½ΠΈ ΡΠΎΡΠΊΠΈ. ΠΠΊΠΎ Π·Π°ΠΏΠΎΡΠ½Π΅ Ρ ΠΎΠ»ΠΈΠ²Π°Ρ Π±Π΅Π· ΠΏΡΠΈΡΠΈΠ½Π° β ΠΌΠΎΠ΄Π΅ΡΠ°ΡΠΎΡΡΡ Π½Π°ΠΌΠ΅ΡΠ²Π° ΠΈ ΠΏΠΎΠΌΠΈΡΡΠ²Π° ΡΡΡΠ°Π½ΠΈΡΠ΅. Π’Π°ΠΊΡΠ² ΡΠΎΡΠΌΠ°Ρ Π·Π°ΡΠ΅Π³Π»Ρ: ΡΠ»Π΅Π΄ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΠ°ΡΠ° ΡΠ»Π΅Π΄ Π½Π°ΡΠ°Π»ΠΎΡΠΎ Π±ΡΡ Π° ΠΏΡΠ΅ΠΊΠ°ΡΠ°Π½ΠΈ ΡΠ°ΠΌΠΎ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½ ΡΠ»Π°ΠΉΠ΄. ΠΡΠ°ΡΡ ΡΡΡΠ±Π²Π°ΡΠ΅ Π΄Π° Π±ΡΠ΄Π΅ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΡΡΠΊΠΎΡΠ΅Π½.
ΠΠ°Π²ΠΈΠ»ΠΈΠΎΠ½ΠΈ Π½Π° ΠΏΠ°ΡΡΠ½ΡΠΎΡΠΈΡΠ΅
Π Π·Π°Π»ΠΈΡΠ΅ Π±ΡΡ Π° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π΅Π½ΠΈ ΠΏΠ°ΡΡΠ½ΡΠΎΡΠΈΡΠ΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΡΡΠ° β Π½Π° ΠΏΠ°Π²ΠΈΠ»ΠΈΠΎΠ½ΠΈΡΠ΅ ΡΠ°Π·ΠΊΠ°Π·Π²Π°Ρ Π° Π·Π° ΡΠ΅ΠΊΡΡΠΈΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠΈ, ΠΏΡΠ΅Π΄Π»Π°Π³Π°Ρ Π° ΡΡΠ°ΠΆΠΎΠ²Π΅ ΠΈ ΡΠ°Π±ΠΎΡΠ°, ΠΏΡΠΎΠ²Π΅ΠΆΠ΄Π°Ρ Π° Π²ΠΈΠΊΡΠΎΡΠΈΠ½ΠΈ ΠΈ ΠΌΠ°Π»ΠΊΠΈ ΡΡΡΡΠ΅Π·Π°Π½ΠΈΡ, ΠΊΠ°ΠΊΡΠΎ ΠΈ ΡΠ°Π·Π΄Π°Π²Π°Ρ Π° ΠΏΡΠΈΡΡΠ½ΠΈ Π½Π°Π³ΡΠ°Π΄ΠΈ. ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π° Π½ΡΠΊΠΎΠΈ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Π΄ΠΎΡΠΈ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Ρ Π° Π΄Π° ΠΏΡΠ΅ΠΌΠΈΠ½Π°Ρ Π½Π°ΡΠ°Π»Π΅Π½ Π΅ΡΠ°ΠΏ Π½Π° ΠΈΠ½ΡΠ΅ΡΠ²ΡΡΠ°, ΠΊΠΎΠ΅ΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π·Π° ΡΠ΅Π·ΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠ° Π΄ΠΎΡΠ»ΠΈ Π½Π΅ ΡΠ°ΠΌΠΎ Π·Π° Π΄Π° ΡΠ»ΡΡΠ°Ρ Π΄ΠΎΠΊΠ»Π°Π΄ΠΈ.
Π’Π΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ Π½Π° Π΄ΠΎΠΊΠ»Π°Π΄ΠΈΡΠ΅
Π‘Π»ΡΡΠ°Ρ ΠΌΠ΅ Π΄ΠΎΠΊΠ»Π°Π΄ΠΈΡΠ΅ ΠΈ Π΄Π²Π°ΡΠ° Π΄Π½ΠΈ. ΠΠΎΠ½ΡΠΊΠΎΠ³Π° Π±Π΅ΡΠ΅ ΡΡΡΠ΄Π½ΠΎ Π΄Π° ΡΠ΅ ΠΈΠ·Π±Π΅ΡΠ΅ Π΅Π΄ΠΈΠ½ Π΄ΠΎΠΊΠ»Π°Π΄ ΠΎΡ ΠΏΠ°ΡΠ°Π»Π΅Π»Π½ΠΎ ΠΏΡΠΎΡΠΈΡΠ°ΡΠΈΡΠ΅ β Π΄ΠΎΠ³ΠΎΠ²ΠΎΡΠΈΡ ΠΌΠ΅ ΡΠ΅ Π΄Π° ΡΠ΅ ΡΠ°Π·Π΄Π΅Π»ΠΈΠΌ ΠΈ Π΄Π° ΠΎΠ±ΠΌΠ΅Π½ΡΠΌΠ΅ ΠΏΡΠΈΠ΄ΠΎΠ±ΠΈΡΠΈΡΠ΅ Π·Π½Π°Π½ΠΈΡ Π² ΠΏΠΎΡΠΈΠ²ΠΊΠΈΡΠ΅. Π Π΄ΠΎΡΠΈ ΡΠ°ΠΊΠ° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π°, ΡΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ Π΅ ΠΎΡΡΠ°Π½Π°Π»ΠΎ ΠΏΡΠΎΠΏΡΡΠ½Π°ΡΠΎ. Π’ΡΠΊ Π±ΠΈΡ ΠΌΠ΅ ΠΈΡΠΊΠ°Π»ΠΈ Π΄Π° ΡΠ°Π·ΠΊΠ°ΠΆΠ΅ΠΌ Π·Π° ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅ΡΠΎ Π½Π° Π½ΡΠΊΠΎΠΈ ΠΎΡ Π΄ΠΎΠΊΠ»Π°Π΄ΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ Π½ΠΈ ΡΠ΅ ΡΡΠΎΡΠΈΡ Π° Π½Π°ΠΉ-ΠΈΠ½ΡΠ΅ΡΡΠ½ΠΈ.
ΠΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π² C++ ΠΏΡΠ΅Π· ΠΏΡΠΈΠ·ΠΌΠ°ΡΠ° Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠ½ΠΈΡΠ΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ, Π ΠΎΠΌΠ°Π½ Π ΡΡΡΠ΅Π²

Π‘Π»Π°ΠΉΠ΄ ΠΎΡ
ΠΠ°ΠΊΡΠΎ Π»ΠΈΡΠΈ ΠΎΡ Π·Π°Π³Π»Π°Π²ΠΈΠ΅ΡΠΎ, Π ΠΎΠΌΠ°Π½ ΡΠ°Π·Π³Π»Π΅ΠΆΠ΄Π° ΡΠ°Π±ΠΎΡΠ°ΡΠ° Ρ ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ° Π½Π° LLVM. ΠΠΎΡΠΈ ΠΈ Π·Π° ΡΠ΅Π·ΠΈ, ΠΊΠΎΠΈΡΠΎ Π½Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Clang Π² ΡΠ°Π±ΠΎΡΠ°ΡΠ° ΡΠΈ, Π΄ΠΎΠΊΠ»Π°Π΄ΡΡ Π²ΡΠ΅ ΠΏΠ°ΠΊ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π° Π·Π° Π½Π°ΡΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΠΉΡΠΎ ΠΊΠΎΠ΄ΡΡ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»Π½ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½. Π’ΠΎΠ²Π° Π΅ ΡΠ°ΠΊΠ°, Π·Π°ΡΠΎΡΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠΈ ΠΈ ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΈΡΠ΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΡΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²Π°Ρ ΠΏΠΎΠΌΠ΅ΠΆΠ΄Ρ ΡΠΈ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ ΡΡΠΏΠ΅ΡΠ½ΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΡΠ²ΠΏΠ°Π΄Π°Ρ.
Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ, Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ°Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ: Π΄Π° ΡΠ΅ ΠΈΠ·Π²ΠΈΠΊΠ° ΠΊΠΎΠ΄ Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° (Π°ΠΊΠΎ ΠΈΠΌΠ° ΡΠ°ΠΊΡΠ²) ΠΈΠ»ΠΈ Π΄Π° ΡΠ΅ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΡΡ ΡΠ΅ΡΡΡΡΠΈΡΠ΅ Π½Π° ΡΠ΅ΠΊΡΡΠΎΡΠΎ Π½ΠΈΠ²ΠΎ ΠΈ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΊΠ°ΡΠΈ ΡΡΠ΅ΠΊΠ° Π½Π°Π³ΠΎΡΠ΅. ΠΡΠΈΡΠΊΠΎ ΡΠΎΠ²Π° Π²ΠΎΠ΄ΠΈ Π΄ΠΎ ΡΠ°ΠΊΡΠ°, ΡΠ΅ Π·Π° ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»Π½ΠΎ ΠΏΡΠ΅Π΄Π°Π²Π°ΡΠΈΡΠ΅ ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½ΠΈΡ, ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΡΡ Π΄ΠΎΠ±Π°Π²Ρ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ. Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ, Π΄ΠΎΡΠΈ ΠΊΠΎΠ³Π°ΡΠΎ ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΡΠΎ Π² Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»Π½ΠΎΡΡ Π½Π΅ Π±ΡΠ΄Π΅ ΠΏΡΠ΅Π΄ΠΈΠ·Π²ΠΈΠΊΠ°Π½ΠΎ, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° Π²ΡΠ΅ ΠΏΠ°ΠΊ ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π° Π½Π΅Π½ΡΠΆΠ½ΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ. ΠΠ° Π΄Π° ΡΠ΅ Π½Π°ΠΌΠ°Π»ΡΡ ΡΠ°Π·Ρ ΠΎΠ΄ΠΈΡΠ΅, Π² LLVM ΠΈΠΌΠ° Π½ΡΠΊΠΎΠ»ΠΊΠΎ Ρ ΡΠΈΡΡΠΈΠΊΠΈ Π·Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π΅ Π½Π° ΡΠΈΡΡΠ°ΡΠΈΠΈ, Π² ΠΊΠΎΠΈΡΠΎ Π½Π΅ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ Π΄ΠΎΠ±Π°Π²Ρ ΠΊΠΎΠ΄ Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈΠ»ΠΈ ΠΊΡΠ΄Π΅ΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π½Π°ΠΌΠ°Π»ΠΈ Π±ΡΠΎΡΡ Π½Π° "ΠΈΠ·Π»ΠΈΡΠ½ΠΈΡΠ΅" ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ.
ΠΠΎΠΊΠ»Π°Π΄ΡΠΈΠΊΡΡ ΡΠ°Π·Π³Π»Π΅ΠΆΠ΄Π° ΠΎΠΊΠΎΠ»ΠΎ Π΄Π΅ΡΠ΅Ρ ΠΎΡ ΡΡΡ ΠΈ ΠΏΠΎΠΊΠ°Π·Π²Π° ΠΊΠ°ΠΊ ΡΠΈΡΡΠ°ΡΠΈΠΈΡΠ΅, Π² ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΠΏΠΎΠΌΠ°Π³Π°Ρ Π΄Π° ΡΠ΅ ΡΡΠΊΠΎΡΠΈ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ°, ΡΠ°ΠΊΠ° ΠΈ ΡΠ΅Π·ΠΈ, Π² ΠΊΠΎΠΈΡΠΎ ΡΠ΅Π·ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΈ Π½Π΅ ΡΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠΈΠΌΠΈ.
ΠΠΎ ΡΠΎΠ·ΠΈ Π½Π°ΡΠΈΠ½, Π ΠΎΠΌΠ°Π½ Π ΡΡΡΠ΅Π² ΠΏΠΎΠ΄Π²ΠΎΠ΄ΠΈ ΡΠ»ΡΡΠ°ΡΠ΅Π»ΠΈΡΠ΅ Π΄ΠΎ ΠΈΠ·Π²ΠΎΠ΄Π°, ΡΠ΅ ΠΊΠΎΠ΄ΡΡ, ΠΊΠΎΠΉΡΠΎ ΡΡΠ΄ΡΡΠΆΠ° ΡΠ°Π±ΠΎΡΠ° Ρ ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ, Π΄Π°Π»Π΅Ρ Π½Π΅ Π²ΠΈΠ½Π°Π³ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° Π±Π΅Π· ΡΠ°Π·Ρ ΠΎΠ΄ΠΈ, ΠΈ Π΄Π°Π²Π° ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ ΡΡΠ²Π΅ΡΠΈ:
- ΠΏΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ²Π°Π½Π΅ Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΎΡΠΊΠ°ΠΆΠ΅ΡΠ΅ ΠΎΡ ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈΡΡΠ° ΠΊΠ°ΡΠΎ ΡΡΠ»ΠΎ;
- Π°ΠΊΠΎ ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈΡΡΠ° Π²ΡΠ΅ ΠΏΠ°ΠΊ ΡΠ° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈ, ΡΠΎ Π½Π°Π²ΡΡΠΊΡΠ΄Π΅, ΠΊΡΠ΄Π΅ΡΠΎ Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ Π΄ΠΎΠ±Π°Π²ΡΡ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΈ noexcept (ΠΈ const), Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΡΡ Π΄Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ° ΠΊΠΎΠ»ΠΊΠΎΡΠΎ ΡΠ΅ ΠΌΠΎΠΆΠ΅ ΠΏΠΎΠ²Π΅ΡΠ΅.
ΠΠ°ΡΠΎ ΡΡΠ»ΠΎ, Π΄ΠΎΠΊΠ»Π°Π΄ΡΠΈΠΊΡΡ ΠΏΠΎΡΠ²ΡΡΠ΄ΠΈ ΠΌΠ½Π΅Π½ΠΈΠ΅ΡΠΎ, ΡΠ΅ ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈΡΡΠ° Π΅ Π½Π°ΠΉ-Π΄ΠΎΠ±ΡΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π² ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΈΠ»ΠΈ ΠΈΠ·ΠΎΠ±ΡΠΎ Π΄Π° ΡΠ΅ ΠΎΡΠΊΠ°ΠΆΠ°Ρ.
Π‘Π»Π°ΠΉΠ΄ΠΎΠ²Π΅ ΠΎΡ Π΄ΠΎΠΊΠ»Π°Π΄Π° ΡΠ° Π½Π°Π»ΠΈΡΠ½ΠΈ Π½Π° ΡΠ»Π΅Π΄Π½ΠΈΡ Π»ΠΈΠ½ΠΊ:
Generators, coroutines and other brain-unrolling sweetness, Adi Shavit

Π‘Π»Π°ΠΉΠ΄ ΠΎΡ
ΠΠ΄ΠΈΠ½ ΠΎΡ ΠΌΠ½ΠΎΠ³ΠΎΡΠΎ Π΄ΠΎΠΊΠ»Π°Π΄ΠΈ Π½Π° ΡΠ°Π·ΠΈ ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΡ, ΠΏΠΎΡΠ²Π΅ΡΠ΅Π½ΠΈ Π½Π° Π½ΠΎΠ²ΠΎΠ²ΡΠ²Π΅Π΄Π΅Π½ΠΈΡΡΠ° Π² C++20, Π·Π°ΠΏΠΎΠΌΠ½ΠΈ Π½Π΅ ΡΠ°ΠΌΠΎ Ρ ΠΊΡΠ°ΡΠΎΡΠ½ΠΎ ΠΎΡΠΎΡΠΌΠ΅Π½Π°ΡΠ° ΠΏΡΠ΅Π·Π΅Π½ΡΠ°ΡΠΈΡ, Π½ΠΎ ΠΈ Ρ ΡΡΠ½ΠΎΡΠΎ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°ΡΠΈΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ Ρ Π»ΠΎΠ³ΠΈΠΊΠ°ΡΠ° Π½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΠΊΠΎΠ»Π΅ΠΊΡΠΈΠΈ (ΡΠΈΠΊΡΠ» for, callback-ΠΈ).
Adi Shavit ΠΎΡΠ΄Π΅Π»Ρ ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅: ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°ΡΠΈΡΠ΅ Π² ΠΌΠΎΠΌΠ΅Π½ΡΠ° ΠΌΠ΅ΡΠΎΠ΄ΠΈ ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π²Π°Ρ ΠΏΡΠ΅Π· ΡΡΠ»Π°ΡΠ° ΠΊΠΎΠ»Π΅ΠΊΡΠΈΡ ΠΈ Π² ΡΡΡΠΎΡΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π΅ Π΄Π°Π²Π°Ρ Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ Π½ΡΠΊΠ°ΠΊΠ²ΠΎ Π²ΡΡΡΠ΅ΡΠ½ΠΎ ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π½ΠΎ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ (ΠΈΠ»ΠΈ Π΄Π°Π²Π°Ρ Π² ΡΠ»ΡΡΠ°ΠΉ Π½Π° callback-ΠΎΠ²Π΅, Π½ΠΎ Ρ ΠΌΠ½ΠΎΠ³ΠΎ Π½Π΅ΠΏΡΠΈΡΡΠ½ΠΈ ΡΡΡΠ°Π½ΠΈΡΠ½ΠΈ Π΅ΡΠ΅ΠΊΡΠΈ, ΠΊΠ°ΡΠΎ Ρ.Π½Π°Ρ. Callback Hell). ΠΠ·Π³Π»Π΅ΠΆΠ΄Π°, ΡΠ΅ ΠΈΠΌΠ° ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠΈ, Π½ΠΎ ΠΈ Ρ ΡΡΡ Π²ΡΠΈΡΠΊΠΎ Π½Π΅ Π΅ ΡΠΎΠ»ΠΊΠΎΠ²Π° Π³Π»Π°Π΄ΠΊΠΎ: Π½ΡΠΌΠ° ΠΎΠ±ΡΠΈ ΡΠΎΡΠΊΠΈ Π·Π° Π²Ρ ΠΎΠ΄ ΠΈ ΠΈΠ·Ρ ΠΎΠ΄ (begin β end ΡΡΠ΅ΡΡ rbegin β rend ΠΈ ΡΠ°ΠΊΠ° Π½Π°ΡΠ°ΡΡΠΊ), Π½Π΅ Π΅ ΡΡΠ½ΠΎ ΠΊΠΎΠ»ΠΊΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠ΅ ΠΈΡΠ΅ΡΠΈΡΠ°ΠΌΠ΅? ΠΠ°ΠΏΠΎΡΠ²Π°ΠΉΠΊΠΈ ΠΎΡ C++20, ΡΠ΅Π·ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ ΡΠ΅ ΡΠ΅ΡΠ°Π²Π°Ρ!
ΠΡΡΠ²ΠΈΡΡ Π²Π°ΡΠΈΠ°Π½Ρ: ranges. Π‘ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΠΎΠ±Π²ΠΈΠ²ΠΊΠ°ΡΠ° Π½Π°Π΄ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠΈΡΠ΅ ΠΏΠΎΠ»ΡΡΠ°Π²Π°ΠΌΠ΅ ΠΎΠ±Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π·Π° Π½Π°ΡΠ°Π»ΠΎΡΠΎ ΠΈ ΠΊΡΠ°Ρ Π½Π° ΠΈΡΠ΅ΡΠ°ΡΠΈΡΡΠ°, ΠΊΠ°ΠΊΡΠΎ ΠΈ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΈΡ. ΠΡΠΈΡΠΊΠΎ ΡΠΎΠ²Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π»Π΅ΡΠ½ΠΎ ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΏΡΠ»Π½ΠΎΡΠ΅Π½Π½ΠΈ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠΈ Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° Π΄Π°Π½Π½ΠΈ. ΠΠΎ Π½Π΅ Π²ΡΠΈΡΠΊΠΎ Π΅ ΡΠΎΠ»ΠΊΠΎΠ²Π° Π³Π»Π°Π΄ΠΊΠΎ: ΡΠ°ΡΡ ΠΎΡ Π»ΠΎΠ³ΠΈΠΊΠ°ΡΠ° Π½Π° ΠΈΠ·ΡΠΈΡΠ»Π΅Π½ΠΈΡΡΠ° ΡΠ΅ Π½Π°ΠΌΠΈΡΠ° Π²ΡΡΡΠ΅ Π² ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½Π°ΡΠ° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠ°, ΠΊΠΎΠ΅ΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΡΠ»ΠΎΠΆΠ½ΠΈ ΠΊΠΎΠ΄Π° Π·Π° Π²ΡΠ·ΠΏΡΠΈΠ΅ΠΌΠ°Π½Π΅ ΠΈ ΠΎΡΡΡΡΠ°Π½ΡΠ²Π°Π½Π΅ Π½Π° Π³ΡΠ΅ΡΠΊΠΈ.

Π‘Π»Π°ΠΉΠ΄ ΠΎΡ
Π ΡΠ°ΠΊΡΠ² ΡΠ»ΡΡΠ°ΠΉ Π² C++20 ΡΠ° Π΄ΠΎΠ±Π°Π²Π΅Π½ΠΈ ΠΊΠΎΡΡΡΠΈΠ½ΠΈ (ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΠΈΠ΅ΡΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π΅ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Π½Π° Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠΈΡΠ΅ Π² Python): ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΎΡΠ»ΠΎΠΆΠ΅Π½ΠΎ, ΠΊΠ°ΡΠΎ ΡΠ΅ Π²ΡΡΠ½Π΅ ΡΠ΅ΠΊΡΡΠ° ΡΡΠΎΠΉΠ½ΠΎΡΡ Ρ Π·Π°ΠΏΠ°Π·Π²Π°Π½Π΅ Π½Π° ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π½ΠΎΡΠΎ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅. Π’Π°ΠΊΠ° ΠΏΠΎΡΡΠΈΠ³Π°ΠΌΠ΅ Π½Π΅ ΡΠ°ΠΌΠΎ ΡΠ°Π±ΠΎΡΠ° Ρ Π΄Π°Π½Π½ΠΈ ΠΊΠ°ΠΊΡΠΎ ΡΠ΅ ΠΏΠΎΡΠ²ΡΠ²Π°Ρ, Π½ΠΎ ΠΈ ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»ΠΈΡΠ°ΠΌΠ΅ ΡΡΠ»Π°ΡΠ° Π»ΠΎΠ³ΠΈΠΊΠ° Π² ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½Π°ΡΠ° ΠΊΠΎΡΡΡΠΈΠ½Π°.
ΠΠΎ ΠΈΠΌΠ° ΠΈ ΡΡΠ³Π°: Π² ΠΌΠΎΠΌΠ΅Π½ΡΠ° ΡΠ΅ ΡΠ° ΡΠ°ΠΌΠΎ ΡΠ°ΡΡΠΈΡΠ½ΠΎ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Π½ΠΈ ΠΎΡ Π½Π°Π»ΠΈΡΠ½ΠΈΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠΈ ΠΈ ΡΠ° ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΈ Π½Π΅ ΡΠΎΠ»ΠΊΠΎΠ²Π° Π΄ΠΎΠ±ΡΠ΅, ΠΊΠΎΠ»ΠΊΠΎΡΠΎ Π±ΠΈΡ ΠΌΠ΅ ΠΈΡΠΊΠ°Π»ΠΈ: Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΡΠ΅ ΠΎΡΠ΅ Π½Π΅ ΡΠ΅ ΠΏΡΠ΅ΠΏΠΎΡΡΡΠ²Π° Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΡΠ΅ΡΠ΅ΡΠ΅Π½ΡΠΈΠΈ ΠΈ Π²ΡΠ΅ΠΌΠ΅Π²ΠΈ ΠΎΠ±Π΅ΠΊΡΠΈ Π² ΠΊΠΎΡΡΡΠΈΠ½ΠΈ. ΠΠ»ΡΡ, ΠΈΠΌΠ° Π½ΡΠΊΠΎΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΠΎΡΠ½ΠΎΡΠ½ΠΎ ΡΠΎΠ²Π° ΠΊΠ°ΠΊΠ²ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΊΠΎΡΡΡΠΈΠ½Π°, ΠΈ constexpr ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠΈ/Π΄Π΅ΡΡΡΡΠΊΡΠΎΡΠΈ, ΠΊΠ°ΠΊΡΠΎ ΠΈ main Π½Π΅ Π²Π»ΠΈΠ·Π°Ρ Π² ΡΠΎΠ·ΠΈ ΡΠΏΠΈΡΡΠΊ.
Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ, ΠΊΠΎΡΡΡΠΈΠ½ΠΈΡΠ΅ ΡΠ΅ΡΠ°Π²Π°Ρ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½Π° ΡΠ°ΡΡ ΠΎΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈΡΠ΅ Ρ ΠΏΡΠΎΡΡΠΎΡΠ°ΡΠ° Π½Π° Π»ΠΎΠ³ΠΈΠΊΠ°ΡΠ° Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° Π΄Π°Π½Π½ΠΈ, Π½ΠΎ ΡΠ΅Ρ Π½ΠΈΡΠ΅ ΡΠ΅ΠΊΡΡΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈΠ·ΠΈΡΠΊΠ²Π°Ρ Π΄ΠΎΡΠ°Π±ΠΎΡΠΊΠ°.
ΠΠ°ΡΠ΅ΡΠΈΠ°Π»ΠΈ:
- Π‘Π»Π°ΠΉΠ΄ΠΎΠ²Π΅ ΠΎΡ C++ Russia β
C++ ΡΡΠΈΠΊΠΎΠ²Π΅ ΠΎΡ Π―Π½Π΄Π΅ΠΊΡ.Π’Π°ΠΊΡΠΈ, ΠΠ½ΡΠΎΠ½ ΠΠΎΠ»ΡΡ ΠΈΠ½
Π ΠΏΡΠΎΡΠ΅ΡΠΈΠΎΠ½Π°Π»Π½Π°ΡΠ° ΡΠΈ Π΄Π΅ΠΉΠ½ΠΎΡΡ ΠΏΠΎΠ½ΡΠΊΠΎΠ³Π° ΠΌΠΈ ΡΠ΅ Π½Π°Π»Π°Π³Π° Π΄Π° ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°ΠΌ ΡΠΈΡΡΠΎ ΡΠΏΠΎΠΌΠ°Π³Π°ΡΠ΅Π»Π½ΠΈ Π½Π΅ΡΠ°: ΠΎΠ±Π²ΠΈΠ²ΠΊΠ° ΠΌΠ΅ΠΆΠ΄Ρ Π²ΡΡΡΠ΅ΡΠ½ΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΈ API Π½Π° Π½ΡΠΊΠ°ΠΊΠ²Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°, Π»ΠΎΠ³Π²Π°Π½Π΅ ΠΈΠ»ΠΈ ΠΏΠ°ΡΡΠΈΠ½Π³. ΠΡΠΈ ΡΠΎΠ²Π° ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Π½ΡΠΌΠ° Π½ΡΠΆΠ΄Π° ΠΎΡ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ. ΠΠΎ ΠΊΠ°ΠΊΠ²ΠΎ, Π°ΠΊΠΎ ΡΠ΅Π·ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π² Π½ΡΠΊΠΎΠΈ ΠΎΡ Π½Π°ΠΉ-ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΈΡΠ΅ ΡΡΠ»ΡΠ³ΠΈ Π² Π ΡΠ½Π΅ΡΠ°? Π ΡΠ°ΠΊΠ°Π²Π° ΡΠΈΡΡΠ°ΡΠΈΡ ΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π°ΠΌ ΡΠ΅ΡΠ°Π±Π°ΠΉΡΠΈ Π½Π° ΡΠ°Ρ ΡΠ°ΠΌΠΎ ΠΎΡ Π»ΠΎΠ³ΠΎΠ²Π΅ΡΠ΅! Π’ΠΎΠ³Π°Π²Π° Π²ΡΡΠΊΠ° ΠΌΠΈΠ»ΠΈΡΠ΅ΠΊΡΠ½Π΄Π° Π΅ ΠΎΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈ Π·Π°ΡΠΎΠ²Π° ΡΠ΅ Π½Π°Π»Π°Π³Π° Π΄Π° ΠΏΡΠΈΠ±Π΅Π³Π½Π° Π΄ΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΡΠΈΠΊΠΎΠ²Π΅ β Π·Π° ΡΡΡ ΡΠ°Π·ΠΊΠ°Π·Π° ΠΠ½ΡΠΎΠ½ ΠΠΎΠ»ΡΡ ΠΈΠ½.
ΠΠΎΠΆΠ΅ Π±ΠΈ Π½Π°ΠΉ-ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΈΡΡ ΠΏΡΠΈΠΌΠ΅Ρ Π±Π΅ΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡΡΠ° Π½Π° ΡΠ°Π±Π»ΠΎΠ½Π° pointer-to-implementation (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 ΡΠ°ΠΉΠ»Π°: Π½ΡΠΆΠ΅Π½ Π΅ forward-declaration Π½Π° ΠΎΠ±Π²ΠΈΠ²Π½ΠΈΡ 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 data_;
};ΠΠ΄ΠΈΠ½ΡΡΠ²Π΅Π½ΠΈΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Π΅, ΡΠ΅ Π·Π° Π²ΡΡΠΊΠ° ΠΎΠ±Π²ΠΈΠ²ΠΊΠ° ΡΡΡΠ±Π²Π° Π΄Π° Π·Π°Π΄Π°Π΄Π΅ΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΠΈ ΠΏΠΎΠ΄ΡΠ°Π²Π½ΡΠ²Π°Π½Π΅ β ΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ Π½Π°ΡΠΈΡ pimpl ΡΠ°Π±Π»ΠΎΠ½Π΅Π½ Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ , ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ ΠΈ ΡΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π² Π΄Π΅ΡΡΡΡΠΊΡΠΎΡΠ°, Π·Π° Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ Π΄Π°Π»ΠΈ Π²ΡΠΈΡΠΊΠΎ Π΅ Π½Π° ΠΌΡΡΡΠΎ:Β
~FastPimpl() noexcept {
validate();
Ptr().->~T();
}
template
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 ΡΠ°ΠΉΠ» Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ, ΠΈ ΠΏΠΎΠ»ΡΡΠ°Π²Π°ΠΌΠ΅ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ, ΠΊΠΎΡΡΠΎ Π΅ ΠΏΠΎ-ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠ° Π·Π° ΠΊΠ΅ΡΠΈΡΠ°Π½Π΅ ΠΎΡ ΠΏΡΠΎΡΠ΅ΡΠΎΡΠ°.
ΠΠΎΠ³Π²Π°Π½Π΅ΡΠΎ ΠΈ ΠΏΠ°ΡΡΠΈΠ½Π³Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π°Ρ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ Π²ΠΏΠ΅ΡΠ°ΡΠ»ΡΠ²Π°ΡΠΈ ΠΈ Π·Π°ΡΠΎΠ²Π° Π² ΡΠΎΠ·ΠΈ ΠΎΠ±Π·ΠΎΡ Π½ΡΠΌΠ° Π΄Π° Π±ΡΠ΄Π°Ρ ΡΠΏΠΎΠΌΠ΅Π½Π°ΡΠΈ.
Π‘Π»Π°ΠΉΠ΄ΠΎΠ²Π΅ ΠΎΡ Π΄ΠΎΠΊΠ»Π°Π΄Π° ΡΠ° Π½Π°Π»ΠΈΡΠ½ΠΈ Π½Π° ΡΠ»Π΅Π΄Π½ΠΈΡ Π»ΠΈΠ½ΠΊ:
Π‘ΡΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΈ ΡΠ΅Ρ Π½ΠΈΠΊΠΈ Π·Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Π½Π΅ Π½Π° Π²Π°ΡΠΈΡ ΠΊΠΎΠ΄ DRY, BjΓΆrn Fahller
Π ΡΠΎΠ·ΠΈ Π΄ΠΎΠΊΠ»Π°Π΄ BjΓΆrn Fahller ΠΏΠΎΠΊΠ°Π·Π²Π° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π½Π°ΡΠΈΠ½Π° Π·Π° ΡΠΏΡΠ°Π²ΡΠ½Π΅ Ρ ΡΠ°ΠΊΡΠ² ΡΡΠΈΠ»ΠΈΡΡΠΈΡΠ΅Π½ Π½Π΅Π΄ΠΎΡΡΠ°ΡΡΠΊ, ΠΊΠ°ΡΠΎ ΠΏΠΎΠ²ΡΠ°ΡΡΡΠΈ ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π½Π° ΡΡΠ»ΠΎΠ²ΠΈΡ:
assert(a == IDLE || a == CONNECTED || a == DISCONNECTED);ΠΠ²ΡΡΠΈ ΠΏΠΎΠ·Π½Π°ΡΠΎ? Π‘ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΌΠΎΡΠ½ΠΈ ΡΠ΅Ρ Π½ΠΈΠΊΠΈ ΠΎΡ C++, ΠΏΠΎΡΠ²ΠΈΠ»ΠΈ ΡΠ΅ Π² ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ ΡΡΠ°Π½Π΄Π°ΡΡΠΈ, ΠΌΠΎΠΆΠ΅ ΠΈΠ·ΡΡΠ½ΠΎ Π΄Π° ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°ΡΠ΅ ΡΡΡΠ°ΡΠ° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡ Π±Π΅Π· Π½ΠΈΠΊΠ°ΠΊΠ²ΠΈ Π·Π°Π³ΡΠ±ΠΈ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡ. Π‘ΡΠ°Π²Π½Π΅ΡΠ΅:Β Β Β
assert(a == any_of(IDLE, CONNECTED, DISCONNECTED));ΠΠ° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° Π½Π΅ΠΏΠΎΡΡΠΎΡΠ½Π΅Π½ Π±ΡΠΎΠΉ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π²Π΅Π΄Π½Π°Π³Π° Π΅ Π»ΠΎΠ³ΠΈΡΠ½ΠΎ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ variadic templates ΠΈ fold expressions. ΠΠ° ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΡΠ΅ ΠΈΡΠΊΠ°ΠΌΠ΅ Π΄Π° ΠΏΡΠΎΠ²Π΅ΡΠΈΠΌ Π΄Π°Π»ΠΈ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ ΡΠ° ΡΠ°Π²Π½ΠΈ Π½Π° Π΅Π»Π΅ΠΌΠ΅Π½Ρ ΠΎΡ enum'a state_type. ΠΡΡΠ²ΠΎΡΠΎ, ΠΊΠΎΠ΅ΡΠΎ ΠΈΠ΄Π²Π° Π½Π°ΡΠΌ β Π΄Π° Π½Π°ΠΏΠΈΡΠ΅ΠΌ ΡΠΏΠΎΠΌΠ°Π³Π°ΡΠ΅Π»Π½Π° ΡΡΠ½ΠΊΡΠΈΡ is_any_of:
enum state_type { IDLE, CONNECTED, DISCONNECTED };
template
bool is_any_of(state_type s, const Ts& ... ts) {
return ((s == ts) || ...);
}
Π’Π°Π·ΠΈ ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π½Π° ΡΡΡΠΏΠΊΠ° ΡΡΠ·Π΄Π°Π²Π° ΡΠ°Π·ΠΎΡΠ°ΡΠΎΠ²Π°Π½ΠΈΠ΅. ΠΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠ° ΠΊΠΎΠ΄ΡΡ Π½Π΅ ΡΡΠ°Π²Π° ΠΏΠΎ-ΡΠ΅ΡΠΈΠΌ:
assert(is_any_of(state, IDLE, DISCONNECTING, DISCONNECTED));Β ΠΠ°Π»ΠΊΠΈΡΠ΅ ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΈΡ Π² ΡΠΈΡΡΠ°ΡΠΈΡΡΠ° ΡΠ΅ Π½ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π°Ρ non-type template parameters. Π‘ ΡΡΡ ΡΠ΅ ΠΏΡΠ΅ΠΌΠ΅ΡΡΠΈΠΌ Π΅Π»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ΅ Π½Π° enum'a Π² ΡΠΏΠΈΡΡΠΊΠ° Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ Π½Π° ΡΠ°Π±Π»ΠΎΠ½Π°:Β
template
bool is_any_of(state_type t) {
return ((t == states) | ...);
}
assert(is_any_of(state));Β Π‘ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° auto Π² Π½Π΅-ΡΠΈΠΏΠΎΠ² ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π½Π° ΡΠ°Π±Π»ΠΎΠ½Π° (C++17), ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡ ΠΏΡΠΎΡΡΠΎ ΡΠ΅ ΠΎΠ±ΠΎΠ±ΡΠ°Π²Π°, Π·Π° Π΄Π° ΡΡΠ°Π²Π½ΡΠ²Π° Π½Π΅ ΡΠ°ΠΌΠΎ Ρ Π΅Π»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ΅ Π½Π° state_type, Π½ΠΎ ΠΈ Ρ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΠΈ ΡΠΈΠΏΠΎΠ²Π΅, ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΠΊΠ°ΡΠΎ non-type template parameters:
template
bool is_any_of(const T& t) {
return ((t == alternatives) | ...);
}Π‘ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎΡΡ ΠΎΡ ΡΠ°ΠΊΠΈΠ²Π° ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΈΡ ΡΠ΅ ΠΏΠΎΡΡΠΈΠ³Π° ΠΆΠ΅Π»Π°Π½ΠΈΡΡ Π³Π»Π°Π΄ΡΠΊ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Π·Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ:
template
struct any_of : private std::tuple {
// ΠΏΠΎΠ»Π΅Π½ΠΈΠΌΡΡ ΠΈ ΡΠ½Π°ΡΠ»Π΅Π΄ΡΠ΅ΠΌ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΡ ΠΎΡ tuple
using std::tuple::tuple;
template
bool operator ==(const T& t) const {
return std::apply(
[&t](const auto& ... ts) {
return ((ts == t) || ...);
},
static_cast<const std::tuple&>(*this));
}
};
template
any_of(Ts ...) -> any_of;
assert(any_of(IDLE, DISCONNECTING, DISCONNECTED) == state);
Π ΡΠΎΠ·ΠΈ ΠΏΡΠΈΠΌΠ΅Ρ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎΡΠΎ Π·Π° ΠΈΠ·Π²ΠΎΠ΄ ΡΠ»ΡΠΆΠΈ Π·Π° ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠ° Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠ° ΠΊΠ°ΠΊΠ²ΠΈ ΠΆΠ΅Π»Π°Π΅ΠΌΠΈ ΡΠ°Π±Π»ΠΎΠ½Π½ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ ΠΈΠΌΠ° ΡΡΡΡΠΊΡΡΡΠ°ΡΠ°, Π·Π½Π°Π΅ΡΠ° ΡΠΈΠΏΠΎΠ²Π΅ΡΠ΅ Π½Π° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΈΡΠ΅ Π½Π° ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ°.Β
ΠΠΎ-Π½Π°ΡΠ°ΡΡΠΊ ΡΡΠ°Π²Π° ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎΡΠΎ. ΠΡΠΎΡΠ½ ΡΡΠΈ ΠΊΠ°ΠΊ Π΄Π° ΠΎΠ±ΠΎΠ±ΡΠΈΠΌ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ΄ Π·Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΈ Π·Π° ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅, ΠΎΡΠ²Π΅Π½ ==, Π° ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΠΈ Π·Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ. ΠΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ° ΡΠ΅ ΠΎΠ±ΡΡΠ½ΡΠ²Π°Ρ ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΊΠ°ΡΠΎ no_unique_address attribute (C++20) ΠΈ ΡΠ°Π±Π»ΠΎΠ½Π½ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ Π² Π»ΡΠΌΠ±Π΄Π°-ΡΡΠ½ΠΊΡΠΈΠΈ (C++20). (ΠΠ°, ΡΠ΅ΠΏΠ΅ΡΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Π½Π° Π»ΡΠΌΠ±Π΄ΠΈΡΠ΅ Π΅ Π΄ΠΎΡΠΈ ΠΏΠΎ-Π»Π΅ΡΠ΅Π½ Π·Π° Π·Π°ΠΏΠΎΠΌΠ½ΡΠ½Π΅ β ΡΠΎΠ²Π° ΡΠ° ΡΠ΅ΡΠΈΡΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΈ Π΄Π²ΠΎΠΉΠΊΠΈ ΡΠΊΠΎΠ±ΠΈ ΠΎΡ Π²ΡΡΠΊΠ°ΠΊΡΠ² Π²ΠΈΠ΄.) Π€ΠΈΠ½Π°Π»Π½ΠΎΡΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΊΠ°ΡΠΎ Π΄Π΅ΡΠ°ΠΉΠ»ΠΈ Π½Π° ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ°, Π»ΠΈΡΠ½ΠΎ ΠΌΠ΅Π½ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ°Π΄Π²Π°, Π΄Π° Π½Π΅ Π³ΠΎΠ²ΠΎΡΠΈΠΌ Π·Π° ΠΈΠ·ΡΠ°Π·Π° tuple Π² Π½Π°ΠΉ-Π΄ΠΎΠ±ΡΠΈΡΠ΅ ΡΡΠ°Π΄ΠΈΡΠΈΠΈ Π½Π° Π»ΡΠΌΠ±Π΄Π°-ΠΈΠ·ΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ΡΠΎ.
Π ΠΊΡΠ°Ρ Π½Π΅ Π·Π°Π±ΡΠ°Π²ΡΠΌΠ΅ Π΄Π° ΠΏΡΠΈΠ΄Π°Π΄Π΅ΠΌ Π±Π»ΡΡΡΠΊ:
- ΠΠ΅ΠΊΠ° ΠΏΡΠΈΠΏΠΎΠΌΠ½ΠΈΠΌ, ΡΠ΅ Π»ΡΠΌΠ±Π΄Π°-ΠΈΠ·ΡΠ°Π·ΠΈΡΠ΅ ΡΠ° constexpr Π½Π°ΠΏΡΠ»Π½ΠΎ Π±Π΅Π·ΠΏΠ»Π°ΡΠ½ΠΎ;Β
- ΠΠΎΠ±Π°Π²ΡΠΌΠ΅ perfect forwarding ΠΈ ΡΠ°Π·Π³Π»Π΅ΠΆΠ΄Π°ΠΌΠ΅ ΡΡΠΎΠ΄Π»ΠΈΠ²ΠΈΡ ΠΌΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡΠ½ΠΈΡ ΠΏΠ°ΠΊΠ΅Ρ Π² Π»ΡΠΌΠ±Π΄Π°-ΠΈΠ·ΡΠ°Π·ΠΈΡΠ΅;
- ΠΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΠΌΠ΅ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠ° ΠΏΠΎΠ²Π΅ΡΠ΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π·Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ Ρ conditional noexcept;Β
- ΠΡΠΈΠΆΠΈΠΌ ΡΠ΅ Π·Π° ΠΏΠΎ-ΡΠ°Π·Π±ΠΈΡΠ°Π΅ΠΌΠΎΡΠΎ ΠΈΠ·Π²Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° Π³ΡΠ΅ΡΠΊΠΈ Π² ΡΠ°Π±Π»ΠΎΠ½ΠΈΡΠ΅, Π±Π»Π°Π³ΠΎΠ΄Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΡΠ²Π½ΠΈΡΠ΅ Π²ΡΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ Π½Π° Π»ΡΠΌΠ±Π΄Π°-ΠΈΠ·ΡΠ°Π·ΠΈΡΠ΅. Π’ΠΎΠ²Π° ΡΠ΅ Π½Π°ΠΊΠ°ΡΠ° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠ° Π΄Π° ΠΈΠ·Π²ΡΡΡΠ²Π° ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΏΡΠ΅Π΄ΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»Π½ΠΎΡΠΎ ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° ΡΠ°Π±Π»ΠΎΠ½Π½Π°ΡΠ° ΡΡΠ½ΠΊΡΠΈΡ β Π½Π° Π΅ΡΠ°ΠΏΠ° Π½Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΡΠΈΠΏΠΎΠ²Π΅ΡΠ΅.Β
ΠΠ° ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ ΡΠ΅ ΠΎΠ±ΡΡΠ½Π΅ΡΠ΅ ΠΊΡΠΌ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»ΠΈΡΠ΅ Π½Π° Π»Π΅ΠΊΡΠΈΡΡΠ°:Β
- Π‘Π»Π°ΠΉΠ΄ΠΎΠ²Π΅ ΠΎΡ Π΄ΠΎΠΊΠ»Π°Π΄Π°:
ΠΠ°ΡΠΈΡΠ΅ Π²ΠΏΠ΅ΡΠ°ΡΠ»Π΅Π½ΠΈΡ
ΠΠ°ΡΠ΅ΡΠΎ ΠΏΡΡΠ²ΠΎ ΡΡΠ°ΡΡΠΈΠ΅ Π² C++ Russia Π·Π°ΠΏΠΎΠΌΠ½ΠΈ Ρ Π±ΠΎΠ³Π°ΡΡΡΠ²ΠΎΡΠΎ ΡΠΈ. Π‘ΡΠ·Π΄Π°Π΄Π΅ ΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π°ΡΠ° Π·Π° C++ Russia ΠΊΠ°ΡΠΎ Π·Π° Π΄ΡΡΠ΅Π²Π½ΠΎ ΡΡΠ±ΠΈΡΠΈΠ΅, ΠΊΡΠ΄Π΅ΡΠΎ Π³ΡΠ°Π½ΠΈΡΠ°ΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ ΠΎΠ±ΡΡΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΈ ΠΆΠΈΠ²ΠΎΡΠΎ ΠΎΠ±ΡΡΠ²Π°Π½Π΅ ΠΏΠΎΡΡΠΈ Π½Π΅ ΡΠ΅ ΡΡΠ΅ΡΠ°. ΠΡΠΈΡΠΊΠΎ, ΠΎΡ Π½Π°ΡΡΡΠΎΠ΅Π½ΠΈΠ΅ΡΠΎ Π½Π° Π»Π΅ΠΊΡΠΎΡΠΈΡΠ΅ Π΄ΠΎ ΠΊΠΎΠ½ΠΊΡΡΡΠΈΡΠ΅ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ°Π½ΠΈ ΠΎΡ ΠΏΠ°ΡΡΠ½ΡΠΎΡΠΈΡΠ΅ Π½Π° ΡΡΠ±ΠΈΡΠΈΠ΅ΡΠΎ, Π½Π°ΡΡΡΡΠ°Π²Π° Π±ΡΡΠ½ΠΈ ΠΎΠ±ΡΡΠΆΠ΄Π°Π½ΠΈΡ. Π‘ΡΠ΄ΡΡΠΆΠ°ΡΠ΅Π»Π½Π°ΡΠ° ΡΠ°ΡΡ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΡΡΠ°, ΡΡΡΡΠΎΡΡΠ° ΡΠ΅ ΠΎΡ Π΄ΠΎΠΊΠ»Π°Π΄ΠΈ, ΠΎΠ±Ρ Π²Π°ΡΠ° Π΄ΠΎΡΡΠ° ΡΠΈΡΠΎΠΊ ΡΠΏΠ΅ΠΊΡΡΡ ΡΠ΅ΠΌΠΈ, Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ Π½ΠΎΠ²ΠΎΠ²ΡΠ²Π΅Π΄Π΅Π½ΠΈΡΡΠ° Π² C++, ΠΏΡΠΈΠΌΠ΅ΡΠΈ ΠΎΡ ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°ΡΠ° Π½Π° Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΈ ΠΈ ΠΈΠ΄Π΅ΠΎΠ»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ½ΠΈ ΡΠ°Π·ΡΡΠΆΠ΄Π΅Π½ΠΈΡ. ΠΠΎ Π±ΠΈ Π±ΠΈΠ»ΠΎ Π½Π΅ΡΠΏΡΠ°Π²Π΅Π΄Π»ΠΈΠ²ΠΎ Π΄Π° Π½Π΅ ΠΎΠ±ΡΡΠ½Π΅ΠΌ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΈ Π½Π° ΡΠΎΡΠΈΠ°Π»Π½Π°ΡΠ° Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠ° Π½Π° ΡΡΠ±ΠΈΡΠΈΠ΅ΡΠΎ, ΡΠΏΠΎΠΌΠ°Π³Π°ΡΠ° Π·Π° ΠΏΡΠ΅ΠΎΠ΄ΠΎΠ»ΡΠ²Π°Π½Π΅ Π½Π° Π΅Π·ΠΈΠΊΠΎΠ²ΠΈΡΠ΅ Π±Π°ΡΠΈ ΠΈ ΠΏΠΎ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ Π½Π° Π½Π΅ ΡΠ°ΠΌΠΎ C++.
ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΠΈΠΌ Π½Π° ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΎΡΠΈΡΠ΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΡΡΠ° Π·Π° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠ° Π΄Π° ΡΡΠ°ΡΡΠ²Π° Π² ΡΠ°ΠΊΠΎΠ²Π° ΡΡΠ±ΠΈΡΠΈΠ΅!
ΠΠΎΡΡΡΡ Π½Π° ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΎΡΠΈΡΠ΅ Π·Π° ΠΌΠΈΠ½Π°Π»ΠΎΡΠΎ, Π½Π°ΡΡΠΎΡΡΠ΅ΡΠΎ ΠΈ Π±ΡΠ΄Π΅ΡΠ΅ΡΠΎ Π½Π° C++ Russia ΡΡΠ΅ ΠΌΠΎΠ³Π»ΠΈ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ .
ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΠΈΠΌ Π·Π° ΠΏΡΠΎΡΠΈΡΠ°Π½eto, ΠΈ ΡΠ΅ Π½Π°Π΄ΡΠ²Π°ΠΌΠ΅, ΡΠ΅ Π½Π°ΡΠ΅ΡΠΎ ΡΠ΅Π·ΡΠΌΠ΅ Π½Π° ΡΡΠ±ΠΈΡΠΈΡΡΠ° Π΅ Π±ΠΈΠ»ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ!
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: habr.com
