ΠΡΠ»ΠΈ Π² Π½Π°ΡΠ°Π»Π΅ ΠΏΡΠ΅ΡΡ Π²Ρ Π³ΠΎΠ²ΠΎΡΠΈΡΠ΅, ΡΡΠΎ Π½Π° ΡΡΠ΅Π½Π΅ Π²ΠΈΡΠΈΡ ΠΊΠΎΠ΄ Π½Π° Π‘++, ΡΠΎ ΠΊ ΠΊΠΎΠ½ΡΡ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π΅ΠΏΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π²ΡΡΡΡΠ΅Π»ΠΈΡΡ Π²Π°ΠΌ Π² Π½ΠΎΠ³Ρ.
ΠΡΡΡΠ½Π΅ Π‘ΡΡΠΎΡΡΡΡΡΠΏ
Π‘ 31-Π³ΠΎ ΠΎΠΊΡΡΠ±ΡΡ ΠΏΠΎ 1-Π΅ Π½ΠΎΡΠ±ΡΡ Π² ΠΠ΅ΡΠ΅ΡΠ±ΡΡΠ³Π΅ ΠΏΡΠΎΡΠ»Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΡ C++ Russia Piter β ΠΎΠ΄Π½Π° ΠΈΠ· ΠΌΠ°ΡΡΡΠ°Π±Π½ΡΡ
ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΠΉ ΠΏΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² Π ΠΎΡΡΠΈΠΈ, ΠΎΡΠ³Π°Π½ΠΈΠ·ΡΠ΅ΠΌΠ°Ρ JUG Ru Group. Π‘ΡΠ΅Π΄ΠΈ ΠΏΡΠΈΠ³Π»Π°ΡΡΠ½Π½ΡΡ
ΡΠΏΠΈΠΊΠ΅ΡΠΎΠ² β ΡΠ»Π΅Π½Ρ ΠΊΠΎΠΌΠΈΡΠ΅ΡΠ° ΠΏΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠΈΠ·Π°ΡΠΈΠΈ C++, Π΄ΠΎΠΊΠ»Π°Π΄ΡΠΈΠΊΠΈ Ρ CppCon, Π°Π²ΡΠΎΡΡ ΠΊΠ½ΠΈΠ³ ΠΈΠ·Π΄Π°ΡΠ΅Π»ΡΡΡΠ²Π° OβReilly, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΌΠ΅ΠΉΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ ΡΠ°ΠΊΠΈΡ
ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ², ΠΊΠ°ΠΊ LLVM, libc++ ΠΈ Boost. ΠΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΡ ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π° Π½Π° ΠΎΠΏΡΡΠ½ΡΡ
ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² Π½Π° C++, ΠΆΠ΅Π»Π°ΡΡΠΈΡ
ΡΠ³Π»ΡΠ±ΠΈΡΡ ΡΠ²ΠΎΡ ΡΠΊΡΠΏΠ΅ΡΡΠΈΠ·Ρ ΠΈ ΠΎΠ±ΠΌΠ΅Π½ΡΡΡΡΡ ΠΎΠΏΡΡΠΎΠΌ Π² ΠΆΠΈΠ²ΠΎΠΌ ΠΎΠ±ΡΠ΅Π½ΠΈΠΈ. Π‘ΡΡΠ΄Π΅Π½ΡΠ°ΠΌ, Π°ΡΠΏΠΈΡΠ°Π½ΡΠ°ΠΌ ΠΈ ΠΏΡΠ΅ΠΏΠΎΠ΄Π°Π²Π°ΡΠ΅Π»ΡΠΌ ΡΠ½ΠΈΠ²Π΅ΡΡΠΈΡΠ΅ΡΠΎΠ² ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡΡΡ ΠΎΡΠ΅Π½Ρ ΠΏΡΠΈΡΡΠ½ΡΠ΅ ΡΠΊΠΈΠ΄ΠΊΠΈ.
ΠΠΎΡΠΊΠΎΠ²ΡΠΊΠΎΠ΅ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΡΠ΅ΡΠΈΡΡ ΡΠΆΠ΅ Π² Π°ΠΏΡΠ΅Π»Π΅ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ Π³ΠΎΠ΄Π°, Π° ΠΏΠΎΠΊΠ° Π½Π°ΡΠΈ ΡΡΡΠ΄Π΅Π½ΡΡ ΡΠ°ΡΡΠΊΠ°ΠΆΡΡ, ΡΡΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΎΠ½ΠΈ ΡΠ·Π½Π°Π»ΠΈ Π½Π° ΠΏΡΠΎΡΠ΅Π΄ΡΠ΅ΠΌ ΠΌΠ΅ΡΠΎΠΏΡΠΈΡΡΠΈΠΈ.
Π€ΠΎΡΠΎ ΠΈΠ·
za ife
ΠΠ°Π΄ ΡΡΠΈΠΌ ΠΏΠΎΡΡΠΎΠΌ ΡΠ°Π±ΠΎΡΠ°Π»ΠΈ Π΄Π²ΠΎΠ΅ ΡΡΡΠ΄Π΅Π½ΡΠΎΠ² ΠΠΠ£ ΠΠ¨Π β Π‘Π°Π½ΠΊΡ-ΠΠ΅ΡΠ΅ΡΠ±ΡΡΠ³:
- ΠΠΈΠ·Π° ΠΠ°ΡΠΈΠ»Π΅Π½ΠΊΠΎ β ΡΡΡΠ΄Π΅Π½ΡΠΊΠ° 4-Π³ΠΎ ΠΊΡΡΡΠ° Π±Π°ΠΊΠ°Π»Π°Π²ΡΠΈΠ°ΡΠ°, ΠΈΠ·ΡΡΠ°ΡΡΠ°Ρ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Β«Π―Π·ΡΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡΒ» Π² ΡΠ°ΠΌΠΊΠ°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Β«ΠΡΠΈΠΊΠ»Π°Π΄Π½Π°Ρ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΠΊΠ° ΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΊΠ°Β». ΠΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΠ²ΡΠΈΡΡ Ρ ΡΠ·ΡΠΊΠΎΠΌ C++ Π½Π° ΠΏΠ΅ΡΠ²ΠΎΠΌ ΠΊΡΡΡΠ΅ ΡΠ½ΠΈΠ²Π΅ΡΡΠΈΡΠ΅ΡΠ°, Π²ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠΈ ΠΏΡΠΈΠΎΠ±ΡΠ΅Π»Π° ΠΎΠΏΡΡ ΡΠ°Π±ΠΎΡΡ Ρ Π½ΠΈΠΌ Π½Π° ΡΡΠ°ΠΆΠΈΡΠΎΠ²ΠΊΠ°Ρ Π² ΠΈΠ½Π΄ΡΡΡΡΠΈΠΈ. Π£Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅ ΡΠ·ΡΠΊΠ°ΠΌΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² ΡΠ΅Π»ΠΎΠΌ ΠΈ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ Π½Π°Π»ΠΎΠΆΠΈΠ»ΠΎ ΠΎΡΠΏΠ΅ΡΠ°ΡΠΎΠΊ Π½Π° Π²ΡΠ±ΠΎΡ Π΄ΠΎΠΊΠ»Π°Π΄ΠΎΠ² Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΠΈ.
- ΠΠ°Π½Ρ Π‘ΠΌΠΈΡΠ½ΠΎΠ² β ΡΡΡΠ΄Π΅Π½Ρ 1-Π³ΠΎ ΠΊΡΡΡΠ° ΠΌΠ°Π³ΠΈΡΡΡΠ°ΡΡΡΡ Β«ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Π°Π½Π°Π»ΠΈΠ· Π΄Π°Π½Π½ΡΡ Β». ΠΡΡ Π² ΡΠΊΠΎΠ»Π΅ ΠΏΠΈΡΠ°Π» Π½Π° C++ ΠΎΠ»ΠΈΠΌΠΏΠΈΠ°Π΄Π½ΡΠ΅ Π·Π°Π΄Π°ΡΠΈ, Π° Π΄Π°Π»ΡΡΠ΅ ΠΊΠ°ΠΊ-ΡΠΎ ΡΠ°ΠΊ Π²ΡΡΠ»ΠΎ, ΡΡΠΎ ΡΠ·ΡΠΊ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ Π²ΡΠΏΠ»ΡΠ²Π°Π» Π² ΡΡΠ΅Π±Π½ΠΎΠΉ Π΄Π΅ΡΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΈ Π² ΠΈΡΠΎΠ³Π΅ ΡΡΠ°Π» ΠΎΡΠ½ΠΎΠ²Π½ΡΠΌ ΡΠ°Π±ΠΎΡΠΈΠΌ. Π ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΠΈ ΡΠ΅ΡΠΈΠ» ΡΡΠ°ΡΡΠ²ΠΎΠ²Π°ΡΡ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ΄ΡΡΠ½ΡΡΡ ΡΠ²ΠΎΠΈ Π·Π½Π°Π½ΠΈΡ, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠ·Π½Π°ΡΡ ΠΎ Π½ΠΎΠ²ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΡ .
Π ΡΠ°ΡΡΡΠ»ΠΊΠ΅ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΡΠ°ΠΊΡΠ»ΡΡΠ΅ΡΠ° ΡΠ°ΡΡΠΎ Π΄Π΅Π»ΠΈΡΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ΅ΠΉ ΠΎΠ± ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΡ ΡΠΎΠ±ΡΡΠΈΡΡ , ΡΠ²ΡΠ·Π°Π½Π½ΡΡ Ρ Π½Π°ΡΠ΅ΠΉ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΡΡΡΡ. Π ΡΠ΅Π½ΡΡΠ±ΡΠ΅ ΠΌΡ ΡΠ²ΠΈΠ΄Π΅Π»ΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ C++ Russia ΠΈ ΡΠ΅ΡΠΈΠ»ΠΈ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°ΡΡΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ»ΡΡΠ°ΡΠ΅Π»Π΅ΠΉ. ΠΡΠΎ β Π½Π°Ρ ΠΏΠ΅ΡΠ²ΡΠΉ ΠΎΠΏΡΡ ΡΡΠ°ΡΡΠΈΡ Π² ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΡΡ .
Π‘ΡΡΡΠΊΡΡΡΠ° ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΠΈ
-
Malipoti
Π ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π΄Π²ΡΡ Π΄Π½Π΅ΠΉ ΡΠΊΡΠΏΠ΅ΡΡΡ ΠΏΡΠΎΡΠΈΡΠ°Π»ΠΈ 30 Π΄ΠΎΠΊΠ»Π°Π΄ΠΎΠ², ΠΎΡΠ²Π΅ΡΠΈΠ² ΠΌΠ½ΠΎΠ³ΠΎ Π³ΠΎΡΡΡΠΈΡ ΡΠΎΠΏΠΈΠΊΠΎΠ²: ΠΎΡΡΡΠΎΡΠΌΠ½ΡΠ΅ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠΈΡΠ΅ΠΉ ΡΠ·ΡΠΊΠ° Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΡΠΈΠΊΠ»Π°Π΄Π½ΡΡ Π·Π°Π΄Π°Ρ, Π³ΡΡΠ΄ΡΡΠΈΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΡΠ·ΡΠΊΠ° Π² ΡΠ²ΡΠ·ΠΈ Ρ Π½ΠΎΠ²ΡΠΌ ΡΡΠ°Π½Π΄Π°ΡΡΠΎΠΌ, ΠΊΠΎΠΌΠΏΡΠΎΠΌΠΈΡΡΡ ΠΏΡΠΈ Π΄ΠΈΠ·Π°ΠΉΠ½Π΅ C++ ΠΈ ΠΌΠ΅ΡΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠΎΡΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΠΈΡ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΡΠΌΠΈ, ΠΏΡΠΈΠΌΠ΅ΡΡ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎΠΉ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ², Π° ΡΠ°ΠΊΠΆΠ΅ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ΄ΠΊΠ°ΠΏΠΎΡΠ½ΡΠ΅ Π΄Π΅ΡΠ°Π»ΠΈ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ ΡΠ·ΡΠΊΠ°. ΠΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΠ»ΠΎ ΠΏΠΎ 3 Π²ΡΡΡΡΠΏΠ»Π΅Π½ΠΈΡ, ΡΠ°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ Π΄Π²Π° Π½Π° ΡΡΡΡΠΊΠΎΠΌ ΠΈ ΠΎΠ΄Π½ΠΎ Π½Π° Π°Π½Π³Π»ΠΈΠΉΡΠΊΠΎΠΌ ΡΠ·ΡΠΊΠ΅.
-
Discussion zones
ΠΠΎΡΠ»Π΅ Π²ΡΡΡΡΠΏΠ»Π΅Π½ΠΈΡ Π²ΡΠ΅ Π½Π΅Π·Π°Π΄Π°Π½Π½ΡΠ΅ Π²ΠΎΠΏΡΠΎΡΡ ΠΈ Π½Π΅Π·Π°Π²Π΅ΡΡΡΠ½Π½ΡΠ΅ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΠ»ΠΈΡΡ Π² ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΡΠ΅ Π·ΠΎΠ½Ρ ΠΎΠ±ΡΠ΅Π½ΠΈΡ Ρ Π΄ΠΎΠΊΠ»Π°Π΄ΡΠΈΠΊΠ°ΠΌΠΈ, ΠΎΡΠ½Π°ΡΡΠ½Π½ΡΠ΅ ΠΌΠ°ΡΠΊΠ΅ΡΠ½ΡΠΌΠΈ Π΄ΠΎΡΠΊΠ°ΠΌΠΈ. Π₯ΠΎΡΠΎΡΠΈΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠΊΠΎΡΠΎΡΠ°ΡΡ ΠΏΠ΅ΡΠ΅ΡΡΠ² ΠΌΠ΅ΠΆΠ΄Ρ Π²ΡΡΡΡΠΏΠ»Π΅Π½ΠΈΡΠΌΠΈ Π·Π° ΠΏΡΠΈΡΡΠ½ΠΎΠΉ Π±Π΅ΡΠ΅Π΄ΠΎΠΉ.
-
Lightning Talks ΠΈ Π½Π΅ΡΠΎΡΠΌΠ°Π»ΡΠ½ΡΠ΅ Π΄ΠΈΡΠΊΡΡΡΠΈΠΈ
ΠΡΠ»ΠΈ Π·Π°Ρ ΠΎΡΠ΅Π»ΠΎΡΡ ΡΠ΄Π΅Π»Π°ΡΡ ΠΊΠΎΡΠΎΡΠΊΠΈΠΉ Π΄ΠΎΠΊΠ»Π°Π΄ β ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°ΡΡΡΡ Π½Π° ΠΌΠ°ΡΠΊΠ΅ΡΠ½ΠΎΠΉ Π΄ΠΎΡΠΊΠ΅ Π½Π° Π²Π΅ΡΠ΅ΡΠ½ΠΈΠΉ Lightning Talk ΠΈ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΏΡΡΡ ΠΌΠΈΠ½ΡΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π½Π° ΡΠ°ΡΡΠΊΠ°Π· ΠΎ ΡΡΠΌ ΡΠ³ΠΎΠ΄Π½ΠΎ ΠΏΠΎ ΡΠ΅ΠΌΠ΅ ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π±ΡΡΡΡΠΎΠ΅ Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² sanitizers Π΄Π»Ρ C++ (Π΄Π»Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΎΠΊΠ°Π·Π°Π»ΠΎΡΡ Π² Π½ΠΎΠ²ΠΈΠ½ΠΊΡ) ΠΈΠ»ΠΈ ΠΈΡΡΠΎΡΠΈΡ ΠΏΡΠΎ Π±Π°Π³ Π² Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΡΠΈΠ½ΡΡΠΎΠΈΠ΄Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠ»ΡΡΠ°ΡΡ, Π½ΠΎ Π½Π΅ ΡΠ²ΠΈΠ΄Π΅ΡΡ.
ΠΡΡΠ³ΠΎΠΉ ΡΠΎΡΠΌΠ°Ρ β ΠΏΠ°Π½Π΅Π»ΡΠ½Π°Ρ Π΄ΠΈΡΠΊΡΡΡΠΈΡ Β«Π‘ ΠΊΠΎΠΌΠΈΡΠ΅ΡΠΎΠΌ ΠΏΠΎ Π΄ΡΡΠ°ΠΌΒ». ΠΠ° ΡΡΠ΅Π½Π΅ β Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ»Π΅Π½Ρ ΠΊΠΎΠΌΠΈΡΠ΅ΡΠ° ΠΏΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠΈΠ·Π°ΡΠΈΠΈ, Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠΎΡΠ΅ β ΠΊΠ°ΠΌΠΈΠ½ (ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎ β Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π΄ΡΡΠ΅Π²Π½ΠΎΠΉ Π°ΡΠΌΠΎΡΡΠ΅ΡΡ, Π½ΠΎ ΠΏΡΠΈΡΠΈΠ½Π° Β«ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΠ‘Π Π ΠΠΠΠΒ» ΠΊΠ°ΠΆΠ΅ΡΡΡ Π·Π°Π±Π°Π²Π½Π΅Π΅), Π²ΠΎΠΏΡΠΎΡΡ β ΠΏΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΡ ΠΈ ΠΎΠ±ΡΠ΅Π΅ Π²ΠΈΠ΄Π΅Π½ΠΈΠ΅ C++, Π±Π΅Π· Π±ΡΡΠ½ΡΡ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΡ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠΉ ΠΈ Ρ ΠΎΠ»ΠΈΠ²Π°ΡΠΎΠ². ΠΠΊΠ°Π·Π°Π»ΠΎΡΡ, ΡΡΠΎ Π² ΠΊΠΎΠΌΠΈΡΠ΅ΡΠ΅ ΡΠΎΠΆΠ΅ ΡΠΈΠ΄ΡΡ ΠΆΠΈΠ²ΡΠ΅ Π»ΡΠ΄ΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π² ΡΡΠΌ-ΡΠΎ Π½Π΅ Π΄ΠΎ ΠΊΠΎΠ½ΡΠ° ΡΠ²Π΅ΡΠ΅Π½Ρ ΠΈΠ»ΠΈ ΡΠ΅Π³ΠΎ-ΡΠΎ Π½Π΅ Π·Π½Π°ΡΡ.
ΠΠ»Ρ Π»ΡΠ±ΠΈΡΠ΅Π»Π΅ΠΉ Ρ ΠΎΠ»ΠΈΠ²Π°ΡΠΎΠ² ΠΏΠΎ Π΄Π΅Π»Ρ ΠΎΡΡΠ°Π²Π°Π»ΠΎΡΡ ΡΡΠ΅ΡΡΠ΅ ΠΌΠ΅ΡΠΎΠΏΡΠΈΡΡΠΈΠ΅ β BOF-ΡΠ΅ΡΡΠΈΡ Β«Go ΠΏΡΠΎΡΠΈΠ² C++Β». ΠΠ΅ΡΡΠΌ Π»ΡΠ±ΠΈΡΠ΅Π»Ρ Go, Π»ΡΠ±ΠΈΡΠ΅Π»Ρ C++, ΠΏΠ΅ΡΠ΅Π΄ Π½Π°ΡΠ°Π»ΠΎΠΌ ΡΠ΅ΡΡΠΈΠΈ ΠΎΠ½ΠΈ Π²ΠΌΠ΅ΡΡΠ΅ Π³ΠΎΡΠΎΠ²ΡΡ 100500 ΡΠ»Π°ΠΉΠ΄ΠΎΠ² Π½Π° ΡΠ΅ΠΌΡ (Π²ΡΠΎΠ΄Π΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Ρ ΠΏΠ°ΠΊΠ΅ΡΠ°ΠΌΠΈ Π² C++ ΠΈΠ»ΠΈ ΠΎΡΡΡΡΡΡΠ²ΠΈΠ΅ΠΌ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΎΠ² Π² Go), Π° Π·Π°ΡΠ΅ΠΌ ΠΎΠ½ΠΈ ΠΎΠΆΠΈΠ²Π»ΡΠ½Π½ΠΎ Π΄ΠΈΡΠΊΡΡΠΈΡΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΎΠ±ΠΎΠΉ ΠΈ Ρ Π·Π°Π»ΠΎΠΌ, Π° Π·Π°Π» ΠΏΡΡΠ°Π΅ΡΡΡ ΠΏΠΎΠ½ΡΡΡ ΡΡΠ°Π·Ρ Π΄Π²Π΅ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ. ΠΡΠ»ΠΈ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ ΠΎΠ»ΠΈΠ²Π°Ρ Π½Π΅ ΠΏΠΎ Π΄Π΅Π»Ρ β Π²ΠΌΠ΅ΡΠΈΠ²Π°Π΅ΡΡΡ ΠΌΠΎΠ΄Π΅ΡΠ°ΡΠΎΡ ΠΈ ΠΏΡΠΈΠΌΠΈΡΡΠ΅Ρ ΡΡΠΎΡΠΎΠ½Ρ. Π’Π°ΠΊΠΎΠΉ ΡΠΎΡΠΌΠ°Ρ Π·Π°ΡΡΠ³ΠΈΠ²Π°Π΅Ρ: ΡΠ΅ΡΠ΅Π· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°ΡΠΎΠ² ΠΏΠΎΡΠ»Π΅ Π½Π°ΡΠ°Π»Π° Π±ΡΠ»Π° ΠΏΡΠΎΠΉΠ΄Π΅Π½Π° ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π° ΡΠ»Π°ΠΉΠ΄ΠΎΠ². ΠΠΎΠ½Π΅Ρ ΠΏΡΠΈΡΠ»ΠΎΡΡ ΡΠΈΠ»ΡΠ½ΠΎ ΡΡΠΊΠΎΡΡΡΡ.
-
Π‘ΡΠ΅Π½Π΄Ρ ΠΏΠ°ΡΡΠ½ΡΡΠΎΠ²
Π Ρ ΠΎΠ»Π»Π°Ρ Π±ΡΠ»ΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Ρ ΠΏΠ°ΡΡΠ½Π΅ΡΡ ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΠΈ β Π½Π° ΡΡΠ΅Π½Π΄Π°Ρ ΡΠ°ΡΡΠΊΠ°Π·ΡΠ²Π°Π»ΠΈ ΠΎ ΡΠ΅ΠΊΡΡΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ , ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π»ΠΈ ΡΡΠ°ΠΆΠΈΡΠΎΠ²ΠΊΠΈ ΠΈ ΡΡΡΠ΄ΠΎΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ, ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΠ»ΠΈ ΠΊΠ²ΠΈΠ·Ρ ΠΈ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΠ΅ ΡΠΎΡΠ΅Π²Π½ΠΎΠ²Π°Π½ΠΈΡ, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠ°Π·ΡΠ³ΡΡΠ²Π°Π»ΠΈ ΠΏΡΠΈΡΡΠ½ΡΠ΅ ΠΏΡΠΈΠ·Ρ. ΠΡΠΈ ΡΡΠΎΠΌ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Π΄Π°ΠΆΠ΅ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π»ΠΈ ΠΏΡΠΎΠΉΡΠΈ Π½Π°ΡΠ°Π»ΡΠ½ΡΠ΅ ΡΡΠ°ΠΏΡ ΡΠΎΠ±Π΅ΡΠ΅Π΄ΠΎΠ²Π°Π½ΠΈΠΉ, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π΄Π»Ρ ΡΠ΅Ρ , ΠΊΡΠΎ ΠΏΡΠΈΠ΅Ρ Π°Π» Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ»ΡΡΠ°ΡΡ Π΄ΠΎΠΊΠ»Π°Π΄Ρ.
Π’Π΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ Π΄ΠΎΠΊΠ»Π°Π΄ΠΎΠ²
ΠΡ ΡΠ»ΡΡΠ°Π»ΠΈ Π΄ΠΎΠΊΠ»Π°Π΄Ρ ΠΎΠ±Π° Π΄Π½Ρ. ΠΠΎΡΠΎΠΉ Π±ΡΠ»ΠΎ ΡΡΡΠ΄Π½ΠΎ Π²ΡΠ±ΡΠ°ΡΡ ΠΎΠ΄ΠΈΠ½ Π΄ΠΎΠΊΠ»Π°Π΄ ΠΈΠ· ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎ ΠΈΠ΄ΡΡΠΈΡ β ΠΌΡ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠ»ΠΈΡΡ ΡΠ°Π·Π΄Π΅Π»ΡΡΡΡΡ ΠΈ ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°ΡΡΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠΌΠΈ Π·Π½Π°Π½ΠΈΡΠΌΠΈ Π² ΠΏΠ΅ΡΠ΅ΡΡΠ²Π°Ρ . Π Π΄Π°ΠΆΠ΅ ΡΠ°ΠΊ, ΠΊΠ°ΠΆΠ΅ΡΡΡ, ΡΡΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ ΠΎΡΡΠ°Π»ΠΎΡΡ ΡΠΏΡΡΠ΅Π½ΠΎ. ΠΠ΄Π΅ΡΡ ΠΌΡ Ρ ΠΎΡΠ΅Π»ΠΈ Π±Ρ ΡΠ°ΡΡΠΊΠ°Π·Π°ΡΡ ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ Π΄ΠΎΠΊΠ»Π°Π΄ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π»ΠΈΡΡ Π½Π°ΠΌ ΡΠ°ΠΌΡΠΌΠΈ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠΌΠΈ
ΠΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π² C++ ΡΠ΅ΡΠ΅Π· ΠΏΡΠΈΠ·ΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ½ΡΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΉ, Π ΠΎΠΌΠ°Π½ Π ΡΡΡΠ΅Π²
Yendani kuchokera
ΠΠ°ΠΊ ΠΏΠΎΠ½ΡΡΠ½ΠΎ ΠΈΠ· Π½Π°Π·Π²Π°Π½ΠΈΡ, Π ΠΎΠΌΠ°Π½ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π» ΡΠ°Π±ΠΎΡΡ Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡΠΌΠΈ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ LLVM. ΠΡΠΈ ΡΡΠΎΠΌ Π΄Π»Ρ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΡ Π² ΡΠ²ΠΎΠ΅ΠΉ ΡΠ°Π±ΠΎΡΠ΅ Clang Π΄ΠΎΠΊΠ»Π°Π΄ Π²ΡΡ ΡΠ°Π²Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ Π΄Π°ΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΠΊΠΎΠ΄ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°Π½. ΠΡΠΎ ΡΠ°ΠΊ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠ² ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ ΠΎΠ±ΡΠ°ΡΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΎΠ±ΠΎΠΉ ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΡΠ΄Π°ΡΠ½ΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΌΠΎΠ³ΡΡ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡ.
ΠΡΠ°ΠΊ, Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠ΄Π΅Π»Π°ΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ: Π²ΡΠ·Π²Π°ΡΡ ΠΊΠΎΠ΄ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ (Π΅ΡΠ»ΠΈ Π΅ΡΡΡ) ΠΈΠ»ΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡΡ ΡΠ΅ΡΡΡΡΡ Π½Π° ΡΠ΅ΠΊΡΡΠ΅ΠΌ ΡΡΠΎΠ²Π½Π΅ ΠΈ ΡΠ°ΡΠΊΡΡΡΠΈΡΡ ΡΡΠ΅ΠΊ Π²ΡΡΠ΅. ΠΡΡ ΡΡΠΎ Π²Π΅Π΄ΡΡ ΠΊ ΡΠΎΠΌΡ, ΡΡΠΎ Π΄Π»Ρ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΠΎ Π²ΡΠ΄Π°ΡΡΠΈΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π²ΡΠ·ΠΎΠ²ΠΎΠ² ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ. ΠΠΎΡΡΠΎΠΌΡ Π΅ΡΠ»ΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΠ°ΠΊΡΡ Π½Π΅ Π±ΡΠ΄Π΅Ρ Π²ΡΠ·Π²Π°Π½ΠΎ, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ ΡΡΠ°Π½Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π½Π΅Π½ΡΠΆΠ½ΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ. ΠΠ»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΊΠ°ΠΊ-ΡΠΎ ΡΠ½ΠΈΠ·ΠΈΡΡ Π½Π°ΠΊΠ»Π°Π΄Π½ΡΠ΅ ΡΠ°ΡΡ ΠΎΠ΄Ρ, Π² LLVM Π΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ²ΡΠΈΡΡΠΈΠΊ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠΈΡΡΠ°ΡΠΈΠΉ, Π³Π΄Π΅ ΠΊΠΎΠ΄ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ Π½Π΅ Π½ΡΠΆΠ½ΠΎ ΠΈΠ»ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ½ΠΈΠ·ΠΈΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Β«Π»ΠΈΡΠ½ΠΈΡ Β» ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ.
ΠΠΎΠΊΠ»Π°Π΄ΡΠΈΠΊ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅Ρ ΠΎΠΊΠΎΠ»ΠΎ Π΄Π΅ΡΡΡΠΊΠ° ΠΈΠ· Π½ΠΈΡ ΠΈ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΠΊΠ°ΠΊ ΡΠΈΡΡΠ°ΡΠΈΠΈ, Π³Π΄Π΅ ΠΎΠ½ΠΈ ΠΏΠΎΠΌΠΎΠ³Π°ΡΡ ΡΡΠΊΠΎΡΠΈΡΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΡΠ°ΠΊ ΠΈ ΡΠ΅, Π³Π΄Π΅ Π΄Π°Π½Π½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ Π½Π΅ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΡ.
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π ΠΎΠΌΠ°Π½ Π ΡΡΡΠ΅Π² ΠΏΠΎΠ΄Π²ΠΎΠ΄ΠΈΡ ΡΠ»ΡΡΠ°ΡΠ΅Π»Π΅ΠΉ ΠΊ Π²ΡΠ²ΠΎΠ΄Ρ, ΡΡΠΎ ΠΊΠΎΠ΄, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ ΡΠ°Π±ΠΎΡΡ Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡΠΌΠΈ, Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ Π²ΡΠ΅Π³Π΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»Π½ΡΡΡ Ρ Π½ΡΠ»Π΅Π²ΡΠΌΠΈ Π½Π°ΠΊΠ»Π°Π΄Π½ΡΠΌΠΈ ΡΠ°ΡΡ ΠΎΠ΄Π°ΠΌΠΈ, ΠΈ Π΄Π°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΠΎΠ²Π΅ΡΡ:
- ΠΏΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ ΡΡΠΎΠΈΡ ΠΎΡΠΊΠ°Π·Π°ΡΡΡΡ ΠΎΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ Π² ΠΏΡΠΈΠ½ΡΠΈΠΏΠ΅;
- Π΅ΡΠ»ΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π²ΡΡ ΠΆΠ΅ Π½ΡΠΆΠ½Ρ, ΡΠΎ ΠΏΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π²Π΅Π·Π΄Π΅ ΡΡΠΎΠΈΡ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ noexcept (ΠΈ const), ΡΡΠΎΠ±Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΌΠΎΠ³ ΡΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π±ΠΎΠ»ΡΡΠ΅.
Π ΡΠ΅Π»ΠΎΠΌ, Π΄ΠΎΠΊΠ»Π°Π΄ΡΠΈΠΊ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠ΄ΠΈΠ» ΠΌΠ½Π΅Π½ΠΈΠ΅, ΡΡΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π»ΡΡΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠΎ ΠΌΠΈΠ½ΠΈΠΌΡΠΌΡ ΠΈΠ»ΠΈ Π²ΠΎΠΎΠ±ΡΠ΅ ΠΎΡ Π½ΠΈΡ ΠΎΡΠΊΠ°Π·Π°ΡΡΡΡ.
Π‘Π»Π°ΠΉΠ΄Ρ Π΄ΠΎΠΊΠ»Π°Π΄Π° Π΄ΠΎΡΡΡΠΏΠ½Ρ ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅:
Generators, coroutines and other brain-unrolling sweetness, Adi Shavit
Yendani kuchokera
ΠΠ΄ΠΈΠ½ ΠΈΠ· ΠΌΠ½ΠΎΠ³ΠΈΡ Π΄ΠΎΠΊΠ»Π°Π΄ΠΎΠ² ΡΡΠΎΠΉ ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΠΈ, ΠΏΠΎΡΠ²ΡΡΡΠ½Π½ΡΡ Π½ΠΎΠ²ΠΎΠ²Π²Π΅Π΄Π΅Π½ΠΈΡΠΌ C++20, Π·Π°ΠΏΠΎΠΌΠ½ΠΈΠ»ΡΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΊΡΠ°ΡΠΎΡΠ½ΠΎ ΠΎΡΠΎΡΠΌΠ»Π΅Π½Π½ΠΎΠΉ ΠΏΡΠ΅Π·Π΅Π½ΡΠ°ΡΠΈΠ΅ΠΉ, Π½ΠΎ ΠΈ ΡΡΡΠΊΠΈΠΌ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΈΠΌΠ΅ΡΡΠΈΡ ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Ρ Π»ΠΎΠ³ΠΈΠΊΠΎΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΉ (ΡΠΈΠΊΠ» for, callback-ΠΈ).
Adi Shavit Π²ΡΠ΄Π΅Π»ΡΠ΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅: ΠΈΠΌΠ΅ΡΡΠΈΠ΅ΡΡ Π½Π° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΏΡΠΎΡ ΠΎΠ΄ΡΡ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ ΡΠ΅Π»ΠΈΠΊΠΎΠΌ ΠΈ ΠΏΡΠΈ ΡΡΠΎΠΌ Π½Π΅ Π΄Π°ΡΡ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΌΡ Π²Π½ΡΡΡΠ΅Π½Π½Π΅ΠΌΡ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΠΎΠΌΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ (Π»ΠΈΠ±ΠΎ Π΄Π°ΡΡ Π² ΡΠ»ΡΡΠ°Π΅ callback-ΠΎΠ², Π½ΠΎ Ρ Π±ΠΎΠ»ΡΡΠΈΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΠΌ Π½Π΅ΠΏΡΠΈΡΡΠ½ΡΡ ΠΏΠΎΠ±ΠΎΡΠ½ΡΡ ΡΡΡΠ΅ΠΊΡΠΎΠ², ΡΠΈΠΏΠ° ΡΠΎΠ³ΠΎ ΠΆΠ΅ Callback Hell). ΠΠ°Π·Π°Π»ΠΎΡΡ Π±Ρ, Π΅ΡΡΡ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΡ, Π½ΠΎ ΠΈ Ρ Π½ΠΈΠΌΠΈ Π²ΡΡ Π½Π΅ ΡΠ°ΠΊ Π³Π»Π°Π΄ΠΊΠΎ: Π½Π΅Ρ ΠΎΠ±ΡΠΈΡ ΡΠΎΡΠΊΠΈ Π²Ρ ΠΎΠ΄Π° ΠΈ Π²ΡΡ ΠΎΠ΄Π° (begin β end ΠΏΡΠΎΡΠΈΠ² rbegin β rend ΠΈ ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅), Π½Π΅ΠΏΠΎΠ½ΡΡΠ½ΠΎ, ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²ΠΎΠΎΠ±ΡΠ΅ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠ΅ΡΠΈΡΠΎΠ²Π°ΡΡΡΡ? ΠΠ°ΡΠΈΠ½Π°Ρ Ρ C++20 Π΄Π°Π½Π½ΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΡΠ΅ΡΠ°ΡΡΡΡ!
ΠΠ΅ΡΠ²ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ: ranges. ΠΠ° ΡΡΡΡ ΠΎΠ±ΡΡΡΠΊΠΈ ΠΏΠΎΠ²Π΅ΡΡ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠΎΠ² ΠΌΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΎΠ±ΡΠΈΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π΄Π»Ρ Π½Π°ΡΠ°Π»Π° ΠΈ ΠΊΠΎΠ½ΡΠ° ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΈΠΈ. ΠΡΡ ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π»Π΅Π³ΠΊΠΎ ΡΡΡΠΎΠΈΡΡ ΠΏΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΡΠ΅ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π΄Π°Π½Π½ΡΡ . ΠΠΎ Π½Π΅ Π²ΡΡ ΡΠ°ΠΊ Π³Π»Π°Π΄ΠΊΠΎ: ΡΠ°ΡΡΡ Π»ΠΎΠ³ΠΈΠΊΠΈ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π²Π½ΡΡΡΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠ°, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΡΡΠ»ΠΎΠΆΠ½ΠΈΡΡ ΠΊΠΎΠ΄ Π΄Π»Ρ Π²ΠΎΡΠΏΡΠΈΡΡΠΈΡ ΠΈ ΠΎΡΠ»Π°Π΄ΠΊΠΈ.
Yendani kuchokera
Π§ΡΠΎ ΠΆΠ΅, Π½Π° ΡΡΠΎΡ ΡΠ»ΡΡΠ°ΠΉ Π² C++20 Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ ΠΊΠΎΡΡΡΠΈΠ½Ρ (ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΊΠΎΡΠΎΡΡΡ ΠΏΠΎΡ ΠΎΠΆΠ΅ Π½Π° Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΡ Π² ΡΠ·ΡΠΊΠ΅ Python): ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠ»ΠΎΠΆΠΈΡΡ, Π²Π΅ΡΠ½ΡΠ² Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠ΅ΠΊΡΡΠ΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Ρ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΌΡ Π΄ΠΎΡΡΠΈΠ³Π°Π΅ΠΌ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ°Π±ΠΎΡΡ Ρ Π΄Π°Π½Π½ΡΠΌΠΈ ΠΏΠΎ ΠΌΠ΅ΡΠ΅ ΠΈΡ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΡ, Π½ΠΎ ΠΈ ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»ΠΈΡΡΠ΅ΠΌ Π²ΡΡ Π»ΠΎΠ³ΠΈΠΊΡ Π²Π½ΡΡΡΠΈ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ ΠΊΠΎΡΡΡΠΈΠ½Ρ.
ΠΠΎ Π΅ΡΡΡ Π»ΠΎΠΆΠΊΠ° Π΄ΡΠ³ΡΡ: Π½Π° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΎΠ½ΠΈ Π»ΠΈΡΡ ΡΠ°ΡΡΠΈΡΠ½ΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ ΠΈΠΌΠ΅ΡΡΠΈΠΌΠΈΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°ΠΌΠΈ, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ Π½Π΅ ΡΠ°ΠΊ Π°ΠΊΠΊΡΡΠ°ΡΠ½ΠΎ, ΠΊΠ°ΠΊ Ρ ΠΎΡΠ΅Π»ΠΎΡΡ Π±Ρ: Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎΠΊΠ° Π½Π΅ ΡΡΠΎΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² ΠΊΠΎΡΡΡΠΈΠ½Π°Ρ ΡΡΡΠ»ΠΊΠΈ ΠΈ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ. ΠΠ»ΡΡ, Π΅ΡΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΠΎΠΌΡ, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΊΠΎΡΡΡΠΈΠ½Π°ΠΌΠΈ, ΠΈ constexpr-ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΡ/Π΄Π΅ΡΡΡΡΠΊΡΠΎΡΡ, Π° ΡΠ°ΠΊΠΆΠ΅ main Π² ΡΡΠΎΡ ΡΠΏΠΈΡΠΎΠΊ Π½Π΅ Π²Ρ ΠΎΠ΄ΡΡ.
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΊΠΎΡΡΡΠΈΠ½Ρ ΡΠ΅ΡΠ°ΡΡ Π·Π°ΠΌΠ΅ΡΠ½ΡΡ ΡΠ°ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Ρ ΠΏΡΠΎΡΡΠΎΡΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π΄Π°Π½Π½ΡΡ , Π½ΠΎ ΠΈΡ ΡΠ΅ΠΊΡΡΠΈΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΡΠ΅Π±ΡΡΡ Π΄ΠΎΡΠ°Π±ΠΎΡΠΊΠΈ.
Zida:
- Π‘Π»Π°ΠΉΠ΄Ρ Ρ C++ Russia β
[Β«Generators, coroutines and other brain-unrolling sweetnessΒ»] ΠΠΈΠ΄Π΅ΠΎΠ·Π°ΠΏΠΈΡΡ Π΄ΠΎΠΊΠ»Π°Π΄Π° Ρ CppCon 2019
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<kImplSize, kImplAlign> data_;
};
ΠΠ΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°: Π½ΡΠΆΠ½ΠΎ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΎΠ±ΡΡΡΠΊΠΈ ΠΏΡΠΎΠΏΠΈΡΡΠ²Π°ΡΡ ΡΠ°Π·ΠΌΠ΅Ρ ΠΈ Π²ΡΡΠ°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ β ΡΠ΄Π΅Π»Π°Π΅ΠΌ Π½Π°Ρ pimpl ΡΠ°Π±Π»ΠΎΠ½Π½ΡΠΌ Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ <T,SizeT,AlignmentT>, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Ρ ΠΊΠ°ΠΊΠΈΠΌΠΈ-Π½ΠΈΠ±ΡΠ΄Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π² Π΄Π΅ΡΡΡΡΠΊΡΠΎΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ, ΡΡΠΎ ΠΌΡ Π²ΡΡ ΡΠ³Π°Π΄Π°Π»ΠΈ:
~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-ΡΠ°ΠΉΠ» Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΈΠ³ΠΎΠ΄Π½ΡΡ Π΄Π»Ρ ΠΊΠ΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠΌ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ.
ΠΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΏΠ°ΡΡΠΈΠ½Π³ ΠΏΠΎΠΊΠ°Π·Π°Π»ΠΈΡΡ ΠΌΠ΅Π½Π΅Π΅ Π²ΠΏΠ΅ΡΠ°ΡΠ»ΡΡΡΠΈΠΌΠΈ, Π° ΠΏΠΎΡΡΠΎΠΌΡ Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΎΠ±Π·ΠΎΡΠ΅ ΡΠΏΠΎΠΌΡΠ½ΡΡΡ Π½Π΅ Π±ΡΠ΄ΡΡ.
Π‘Π»Π°ΠΉΠ΄Ρ Π΄ΠΎΠΊΠ»Π°Π΄Π° Π΄ΠΎΡΡΡΠΏΠ½Ρ ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅:
Modern techniques for keeping your code DRY, BjΓΆrn Fahller
Π ΡΡΠΎΠΌ Π΄ΠΎΠΊΠ»Π°Π΄Π΅ BjΓΆrn Fahller ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² Π±ΠΎΡΡΠ±Ρ Ρ ΡΠ°ΠΊΠΈΠΌ ΡΡΠΈΠ»ΠΈΡΡΠΈΡΠ΅ΡΠΊΠΈΠΌ Π½Π΅Π΄ΠΎΡΡΡΠΎΠΌ, ΠΊΠ°ΠΊ ΠΏΠΎΠ²ΡΠΎΡΡΡΡΠΈΠ΅ΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΡΠ»ΠΎΠ²ΠΈΠΉ:
assert(a == IDLE || a == CONNECTED || a == DISCONNECTED);
ΠΠ½Π°ΠΊΠΎΠΌΠΎ? ΠΡΠΏΠΎΠ»ΡΠ·ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠΎΡΠ½ΡΡ ΡΠ΅Ρ Π½ΠΈΠΊ Π‘++, ΠΏΠΎΡΠ²ΠΈΠ²ΡΠΈΡ ΡΡ Π² Π½Π΅Π΄Π°Π²Π½ΠΈΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ°Ρ , ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΡΡΠ½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΡ ΠΆΠ΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ Π±Π΅Π· ΠΌΠ°Π»Π΅ΠΉΡΠΈΡ ΠΏΠΎΡΠ΅ΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ. Π‘ΡΠ°Π²Π½ΠΈΡΠ΅:
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 <typename ... Ts>
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 <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, Π½ΠΎ ΠΈ Ρ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΡΠΌΠΈ ΡΠΈΠΏΠ°ΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ non-type template parameters:
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);
Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ deduction guide ΡΠ»ΡΠΆΠΈΡ Π΄Π»Ρ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠΈ ΠΆΠ΅Π»Π°Π΅ΠΌΡΡ ΡΠ°Π±Π»ΠΎΠ½Π½ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΡΡΡΠΊΡΡΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ, Π·Π½Π°ΡΡΠ΅ΠΌΡ ΡΠΈΠΏΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ°.
ΠΠ°Π»ΡΡΠ΅ β ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Π΅Π΅. ΠΡΠΎΡΠ½ ΡΡΠΈΡ ΠΎΠ±ΠΎΠ±ΡΠ°ΡΡ ΠΏΠΎΠ»ΡΡΠΈΠ²ΡΠΈΠΉΡΡ ΠΊΠΎΠ΄ Π΄Π»Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ² ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ ΠΏΠΎΠΌΠΈΠΌΠΎ ==, Π° Π·Π°ΡΠ΅ΠΌ ΠΈ Π΄Π»Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ. ΠΠΎΠΏΡΡΠ½ΠΎ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΎΠ±ΡΡΡΠ½ΡΡΡΡΡ ΡΠ°ΠΊΠΈΠ΅ ΡΠΈΡΠΈ ΠΊΠ°ΠΊ no_unique_address attribute (C++20) ΠΈ ΡΠ°Π±Π»ΠΎΠ½Π½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π² Π»ΡΠΌΠ±Π΄Π°-ΡΡΠ½ΠΊΡΠΈΡΡ (C++20). (ΠΠ°, ΡΠ΅ΠΏΠ΅ΡΡ ΡΠΈΠ½ΡΠ°ΠΊΡ Π»ΡΠΌΠ±Π΄ Π΅ΡΡ Π»Π΅Π³ΡΠ΅ Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡΡ β ΡΡΠΎ ΡΠ΅ΡΡΡΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΏΠ°ΡΡ ΡΠΊΠΎΠ±ΠΎΠΊ Π²ΡΠ΅Ρ ΡΠΎΡΡΠΎΠ².) ΠΡΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΊΠ°ΠΊ Π΄Π΅ΡΠ°Π»Π΅ΠΊ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ° Π»ΠΈΡΠ½ΠΎ ΠΌΠ½Π΅ ΠΎΡΠ΅Π½Ρ Π³ΡΠ΅Π΅Ρ Π΄ΡΡΡ, Π½Π΅ Π³ΠΎΠ²ΠΎΡΡ ΡΠΆΠ΅ ΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΈ tuple Π² Π»ΡΡΡΠΈΡ ΡΡΠ°Π΄ΠΈΡΠΈΡΡ Π»ΡΠΌΠ±Π΄Π°-ΠΈΡΡΠΈΡΠ»Π΅Π½ΠΈΡ.
Π ΠΊΠΎΠ½ΡΠ΅ Π½Π΅ Π·Π°Π±ΡΠ²Π°Π΅ΠΌ Π½Π°Π²Π΅ΡΡΠΈ Π»ΠΎΡΠΊ:
- ΠΡΠΏΠΎΠΌΠ½ΠΈΠΌ, ΡΡΠΎ Π»ΡΠΌΠ±Π΄Ρ β constexpr Π·Π° Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΠΎ;
- ΠΠΎΠ±Π°Π²ΠΈΠΌ perfect forwarding ΠΈ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ Π½Π° Π΅Π³ΠΎ ΡΡΠΎΠ΄Π»ΠΈΠ²ΡΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΊ parameter pack Π² Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠΈ Π»ΡΠΌΠ±Π΄;
- ΠΠ°Π΄ΠΈΠΌ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ Π±ΠΎΠ»ΡΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ Π΄Π»Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΉ Ρ conditional noexcept;
- ΠΠΎΠ·Π°Π±ΠΎΡΠΈΠΌΡΡ ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ½ΡΡΠ½ΠΎΠΌ Π²ΡΠ²ΠΎΠ΄Π΅ ΠΎΡΠΈΠ±ΠΎΠΊ Π² ΡΠ°Π±Π»ΠΎΠ½Π°Ρ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΡΠ²Π½ΡΠΌ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌ Π»ΡΠΌΠ±Π΄. ΠΡΠΎ Π·Π°ΡΡΠ°Π²ΠΈΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π΄Π΅Π»Π°ΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΎΠΊ Π΄ΠΎ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ Π²ΡΠ·ΠΎΠ²Π° ΡΠ°Π±Π»ΠΎΠ½Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ β Π½Π° ΡΡΠ°Π΄ΠΈΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠΈΠΏΠΎΠ².
ΠΠ° ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΡΠΌΠΈ ΠΎΠ±ΡΠ°ΡΠ°ΠΉΡΠ΅ΡΡ ΠΊ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Π°ΠΌ Π»Π΅ΠΊΡΠΈΠΈ:
- Π‘Π»Π°ΠΉΠ΄Ρ Π΄ΠΎΠΊΠ»Π°Π΄Π°:
[Modern Techniques for Keeping Your Code DRY] ΠΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ Π½Π° github ΠΠ²ΡΠΎΡΡΠΊΠ°Ρ ΡΡΠ°ΡΡΡ Π² Π±Π»ΠΎΠ³Π΅
ΠΠ°ΡΠΈ Π²ΠΏΠ΅ΡΠ°ΡΠ»Π΅Π½ΠΈΡ
ΠΠ°ΡΠ΅ ΠΏΠ΅ΡΠ²ΠΎΠ΅ ΡΡΠ°ΡΡΠΈΠ΅ Π² C++ Russia Π·Π°ΠΏΠΎΠΌΠ½ΠΈΠ»ΠΎΡΡ ΡΠ²ΠΎΠ΅ΠΉ Π½Π°ΡΡΡΠ΅Π½Π½ΠΎΡΡΡΡ. Π‘Π»ΠΎΠΆΠΈΠ»ΠΎΡΡ Π²ΠΏΠ΅ΡΠ°ΡΠ»Π΅Π½ΠΈΠ΅ ΠΎ Π‘++ Russia ΠΊΠ°ΠΊ ΠΎ Π΄ΡΡΠ΅Π²Π½ΠΎΠΌ ΠΌΠ΅ΡΠΎΠΏΡΠΈΡΡΠΈΠΈ, Π³Π΄Π΅ Π³ΡΠ°Π½Ρ ΠΌΠ΅ΠΆΠ΄Ρ ΠΎΠ±ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΈ ΠΆΠΈΠ²ΡΠΌ ΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎΡΡΠΈ Π½Π΅ ΠΎΡΡΡΠΈΠΌΠ°. ΠΡΡ, ΠΎΡ Π½Π°ΡΡΡΠΎΡ Π΄ΠΎΠΊΠ»Π°Π΄ΡΠΈΠΊΠΎΠ² Π΄ΠΎ ΠΊΠΎΠ½ΠΊΡΡΡΠΎΠ² ΠΎΡ ΠΏΠ°ΡΡΠ½ΡΡΠΎΠ² ΠΌΠ΅ΡΠΎΠΏΡΠΈΡΡΠΈΡ, ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°Π΅Ρ ΠΊ Π±ΡΡΠ½ΡΠΌ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΡΠΌ. Π‘ΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅Π»ΡΠ½Π°Ρ ΡΠ°ΡΡΡ ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΠΈ, Π·Π°ΠΊΠ»ΡΡΠ°ΡΡΠ°ΡΡΡ Π² Π΄ΠΎΠΊΠ»Π°Π΄Π°Ρ , ΠΎΡ Π²Π°ΡΡΠ²Π°Π΅Ρ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΠΈΡΠΎΠΊΠΈΠΉ ΡΠΏΠ΅ΠΊΡΡ ΡΠ΅ΠΌ Π²ΠΊΠ»ΡΡΠ°Ρ Π½ΠΎΠ²ΠΎΠ²Π²Π΅Π΄Π΅Π½ΠΈΡ Π‘++, ΠΏΡΠΈΠΌΠ΅ΡΡ ΠΈΠ· ΠΏΡΠ°ΠΊΡΠΈΠΊΠΈ ΠΊΡΡΠΏΠ½ΡΡ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² ΠΈ ΠΈΠ΄Π΅ΠΎΠ»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ½ΡΠ΅ ΡΠΎΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ. ΠΠΎ Π±ΡΠ»ΠΎ Π±Ρ Π½Π΅ΡΠΏΡΠ°Π²Π΅Π΄Π»ΠΈΠ²ΠΎ ΠΎΠ±Π΄Π΅Π»ΠΈΡΡ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ΠΌ ΠΈ ΡΠΎΡΠΈΠ°Π»ΡΠ½ΡΡ ΡΠΎΡΡΠ°Π²Π»ΡΡΡΡΡ ΠΌΠ΅ΡΠΎΠΏΡΠΈΡΡΠΈΡ, ΡΠΏΠΎΡΠΎΠ±ΡΡΠ²ΡΡΡΡΡ ΠΏΡΠ΅ΠΎΠ΄ΠΎΠ»Π΅Π½ΠΈΡ ΡΠ·ΡΠΊΠΎΠ²ΡΡ Π±Π°ΡΡΠ΅ΡΠΎΠ² Π² ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠΈ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π‘++.
ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΠΈΠΌ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΎΡΠΎΠ² ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΠΈ Π·Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠΎΡΡΠ°ΡΡΠ²ΠΎΠ²Π°ΡΡ Π² ΡΠ°ΠΊΠΎΠΌ ΡΠΎΠ±ΡΡΠΈΠΈ!
ΠΠΎΡΡ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΎΡΠΎΠ² ΠΎ ΠΏΡΠΎΡΠ»ΠΎΠΌ, Π½Π°ΡΡΠΎΡΡΠ΅ΠΌ ΠΈ Π±ΡΠ΄ΡΡΠ΅ΠΌ C++ Russia Π²Ρ ΠΌΠΎΠ³Π»ΠΈ Π²ΠΈΠ΄Π΅ΡΡ
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° ΠΏΡΠΎΡΡΠ΅Π½ΠΈΠ΅, ΠΈ Π½Π°Π΄Π΅Π΅ΠΌΡΡ, ΡΡΠΎ Π½Π°Ρ ΠΏΠ΅ΡΠ΅ΡΠΊΠ°Π· ΡΠΎΠ±ΡΡΠΈΠΉ ΠΎΠΊΠ°Π·Π°Π»ΡΡ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΌ!
Source: www.habr.com