ΠΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΈ ΡΡΠΎ ΡΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
ΠΠΎΠ΄Π΅Π»ΠΈ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΎΠ² ΠΈ ΠΌΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ: Go, Rust, Swift, D ΠΈ Π΄ΡΡΠ³ΠΈΠ΅
Π Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΡΠ΅ΡΠ°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ Ρ ΠΎΡΠ΅ΡΡ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΠ°ΠΊΡΡ ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ ΠΈΠ»ΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ ΡΠ°Π·Π½ΡΡ ΡΠΈΠΏΠΎΠ². ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΏΠΈΡΠΎΠΊ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΎΠ² ΠΈΠ»ΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ, ΠΊΠΎΡΠΎΡΠΎΠΌΡ Π½ΡΠΆΠ½Π° ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠ½ΠΊΡΠΈΡ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ. Π ΡΠ°Π·Π½ΡΡ ΡΠ·ΡΠΊΠ°Ρ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½Ρ Π²ΡΠ΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠ΅ ΡΠΏΠΎΡΠΎΠ±Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΡΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ: ΠΎΡ ΠΏΡΠΎΡΡΠΎΠ³ΠΎ ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ°ΠΌ Π½Π° ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΠ΅ ΠΎΠ±ΡΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ (Π‘, Go) Π΄ΠΎ ΡΠ°ΠΊΠΈΡ ΠΌΠΎΡΠ½ΡΡ ΡΠΈΡΡΠ΅ΠΌ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΎΠ², ΡΡΠΎ ΠΎΠ½ΠΈ ΡΡΠ°Π»ΠΈ ΠΏΠΎΠ»Π½ΡΠΌΠΈ ΠΏΠΎ Π’ΡΡΡΠΈΠ½Π³Ρ (Rust, C++). Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ Ρ ΡΠ°ΡΡΠΊΠ°ΠΆΡ ΠΎ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΎΠ² ΠΈΠ· ΡΠ°Π·Π½ΡΡ ΡΠ·ΡΠΊΠΎΠ² ΠΈ ΠΈΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ. ΠΠ°ΡΠ½Ρ Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π·Π°Π΄Π°ΡΠΈ Π² ΡΠ·ΡΠΊΠ°Ρ Π±Π΅Π· ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ (Π²ΡΠΎΠ΄Π΅ Π‘), Π° Π·Π°ΡΠ΅ΠΌ ΠΏΠΎΠΊΠ°ΠΆΡ, ΠΊΠ°ΠΊ ΠΏΠΎΡΡΠ΅ΠΏΠ΅Π½Π½ΠΎΠ΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠΉ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΡΠΈΡΡΠ΅ΠΌΠ°ΠΌ ΠΈΠ· Π΄ΡΡΠ³ΠΈΡ ΡΠ·ΡΠΊΠΎΠ².
Π― ΡΡΠΈΡΠ°Ρ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΈ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠΌ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠΌ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΠ½ΠΈ ΡΠ²Π»ΡΡΡΡΡ ΠΏΡΠΎΡΡΡΠΌ ΡΠ°ΡΡΠ½ΡΠΌ ΡΠ»ΡΡΠ°Π΅ΠΌ ΠΎΠ±ΡΠ΅ΠΉ Π·Π°Π΄Π°ΡΠΈ ΠΌΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ: Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, ΡΠΏΠΎΡΠΎΠ±Π½ΡΡ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠ»Π°ΡΡΡ Π΄ΡΡΠ³ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ. Π Π΄ΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΡΡΡΠ²ΠΎ Ρ ΠΏΠΎΠΊΠ°ΠΆΡ, ΠΊΠ°ΠΊ ΡΡΠΈ ΡΠ°Π·Π½ΡΡ ΠΈ Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎ ΠΎΠ±ΡΠΈΡ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΌΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΌΠΎΠ³ΡΡ ΡΡΠΈΡΠ°ΡΡΡΡ ΡΠ°Π·Π½ΠΎΠ½Π°ΠΏΡΠ°Π²Π»Π΅Π½Π½ΡΠΌΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡΠΌΠΈ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΡΠΈΡΡΠ΅ΠΌ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΎΠ²: Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠ·ΡΠΊΠΎΠ² Π²ΡΠΎΠ΄Π΅ Python, ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ½ΡΡ ΡΠΈΡΡΠ΅ΠΌ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ² Π²ΡΠΎΠ΄Π΅ Template Haskel ΠΈ ΠΏΠΎΡΡΠ°ΠΏΠ½ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π²ΡΠΎΠ΄Π΅ Zig ΠΈ Terra.
ΠΠ±Π·ΠΎΡ
Π― Π½Π°ΡΠΈΡΠΎΠ²Π°Π» Π±Π»ΠΎΠΊ-ΡΡ Π΅ΠΌΡ Π²ΡΠ΅Ρ ΠΎΠΏΠΈΡΠ°Π½Π½ΡΡ Π² ΡΡΠ°ΡΡΠ΅ ΡΠΈΡΡΠ΅ΠΌ, ΡΡΠΎΠ±Ρ Π²Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ»ΠΈ Π΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΈ ΠΊΠ°ΠΊ Π²Π·Π°ΠΈΠΌΠΎΡΠ²ΡΠ·Π°Π½Ρ ΡΡΠΈ ΡΠΈΡΡΠ΅ΠΌΡ:
ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΈΠ΄Π΅ΠΈ
ΠΠΎΠΏΡΡΡΠΈΠΌ, ΠΌΡ ΠΏΠΈΡΠ΅ΠΌ Π½Π° ΡΠ·ΡΠΊΠ΅ Π±Π΅Π· ΡΠΈΡΡΠ΅ΠΌ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΎΠ², ΠΈ Ρ ΠΎΡΠΈΠΌ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ ΡΡΠ΅ΠΊΠ° Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΎΠ² (generic stack data structure), ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ Π΄Π°Π½Π½ΡΠΌΠΈ Π»ΡΠ±ΡΡ ΡΠΈΠΏΠΎΠ². ΠΡΠΎΠ±Π»Π΅ΠΌΠ° Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΊΠ°ΠΆΠ΄Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ° Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Ρ Π΄Π°Π½Π½ΡΠΌΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΠΈ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ ΠΎΠ΄Π½ΠΈΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ, ΠΈ, Π² ΡΠ΅Π»ΠΎΠΌ, ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΠΌΠΈ ΠΏΠΎΡ ΠΎΠΆΠ΅.
ΠΠ±ΠΎΠΉΡΠΈ ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π²ΡΠΌΡ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ: Π»ΠΈΠ±ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ Π²ΡΠ΅ ΡΠΈΠΏΡ Π΄Π°Π½Π½ΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°Π»ΠΈ Π² Π½Π°ΡΠ΅ΠΉ ΡΡΡΡΠΊΡΡΡΠ΅ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ, Π»ΠΈΠ±ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΏΠΈΠΉ ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ Ρ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΠΌΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΠΌΠΈ Π΄Π»Ρ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ Ρ ΠΊΠ°ΠΆΠ΄ΡΠΌ ΡΠΈΠΏΠΎΠΌ Π΄Π°Π½Π½ΡΡ . ΠΡΠΈ ΠΈΠ΄Π΅ΠΈ Π»Π΅Π³Π»ΠΈ Π² ΠΎΡΠ½ΠΎΠ²Ρ Π΄Π²ΡΡ Π±ΠΎΠ»ΡΡΠΈΡ Π³ΡΡΠΏΠΏ ΡΠ΅ΡΠ΅Π½ΠΈΠΉ Ρ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠ°ΠΌΠΈ: ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠ° (boxing) ΠΈ ΠΌΠΎΠ½ΠΎΠΌΠΎΡΡΠΈΠ·Π°ΡΠΈΡ (monomorphization).
Π£ΠΏΠ°ΠΊΠΎΠ²ΠΊΠ° ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΡΠΊΠ»Π°Π΄ΡΠ²Π°Π½ΠΈΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΏΠΎΠ΄ΡΡΠ΄ Π² ΡΠ½ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Β«ΠΊΠΎΡΠΎΠ±ΠΊΠΈΒ», ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ. ΠΠ±ΡΡΠ½ΠΎ ΡΡΠΎ Π΄Π΅Π»Π°ΡΡ ΡΠ°ΠΊ: Π΄Π°Π½Π½ΡΠ΅ ΠΊΠ»Π°Π΄ΡΡ Π² ΠΊΡΡΡ (heap), Π° ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ Π½Π° Π½ΠΈΡ ΡΠ°Π·ΠΌΠ΅ΡΠ°ΡΡ Π² ΡΡΡΡΠΊΡΡΡΠ΅ Π΄Π°Π½Π½ΡΡ . ΠΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ Π½Π° Π²ΡΠ΅ ΡΠΈΠΏΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ, ΡΠ°ΠΊ ΡΡΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ ΠΊΠΎΠ΄ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Π΄Π°Π½Π½ΡΠΌΠΈ Π»ΡΠ±ΡΡ ΡΠΈΠΏΠΎΠ²! ΠΠ΄Π½Π°ΠΊΠΎ ΡΡΠΎ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΡ ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΡ ΠΏΠ°ΠΌΡΡΠΈ, Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΌΡ ΠΏΠΎΠΈΡΠΊΡ ΠΈ ΠΏΡΠΎΠΌΠ°Ρ Π°ΠΌ ΠΊΡΡΠ°. Π ΡΠ·ΡΠΊΠ΅ Π‘ ΡΡΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΡΠΎΠΌΡ, ΡΡΠΎ Π²Π°ΡΠ° ΡΡΡΡΠΊΡΡΡΠ° Π΄Π°Π½Π½ΡΡ Ρ ΡΠ°Π½ΠΈΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ void* ΠΈ ΠΏΡΠΎΡΡΠΎ ΠΊΡΡΠΈΡΡΠ΅Ρ Π΄Π°Π½Π½ΡΠ΅ Π² ΠΈ ΠΈΠ· void* (Π΅ΡΠ»ΠΈ Π΄Π°Π½Π½ΡΠ΅ Π½Π΅ Π² ΠΊΡΡΠ΅, ΠΎΠ½ ΠΈΡ ΡΠ°ΠΌ ΡΠ°Π·ΠΌΠ΅ΡΠ°Π΅Ρ).
ΠΠΎΠ½ΠΎΠΌΠΎΡΡΠΈΠ·Π°ΡΠΈΡ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡΠ°ΡΠ½ΠΎΠ΅ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π΄Π»Ρ ΡΠ°Π·Π½ΡΡ ΡΠΈΠΏΠΎΠ² Π΄Π°Π½Π½ΡΡ , ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ Ρ ΠΎΡΠΈΠΌ Ρ ΡΠ°Π½ΠΈΡΡ. Π’ΠΎΠ³Π΄Π° ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠΎΠ΄Π° ΠΌΠΎΠΆΠ΅Ρ Π½Π°ΠΏΡΡΠΌΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ°Π·ΠΌΠ΅Ρ ΠΈ ΠΌΠ΅ΡΠΎΠ΄Ρ Π΄Π°Π½Π½ΡΡ , Ρ ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ, Π±Π΅Π· Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ°. ΠΡΠΈ ΡΠ°ΠΊΠΎΠΌ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π΅ ΠΊΠΎΠ΄ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π±ΡΡΡΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ, Π½ΠΎ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ Π΅Π³ΠΎ ΡΠ°Π·ΠΌΠ΅Ρ ΠΈ Π΄Π»ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π²Π΅Π΄Ρ ΠΌΡ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡΠ°ΡΠ½ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌ ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ ΠΊΠΎΠ΄ Ρ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΠΌΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΠΌΠΈ. Π ΡΠ·ΡΠΊΠ΅ Π‘ ΡΡΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π²ΡΠ΅ΠΉ ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ Π² Π²ΠΈΠ΄Π΅ ΠΌΠ°ΠΊΡΠΎΡΠ° Ρ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ Π΅Π³ΠΎ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° Π΄Π°Π½Π½ΡΡ .
Π ΡΠ΅Π»ΠΎΠΌ, ΠΏΡΠΈ ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠ΅ ΠΊΠΎΠ΄ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ Π±ΡΡΡΡΠ΅Π΅, Π½ΠΎ Π΅Π³ΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΏΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ ΡΡ ΡΠ΄ΡΠ°ΡΡΡΡ, Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ ΠΏΡΠΈ ΠΌΠΎΠ½ΠΎΠΌΠΎΡΡΠΈΠ·Π°ΡΠΈΠΈ ΠΌΡ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΠΌ Π±ΡΡΡΡΡΠΉ ΠΊΠΎΠ΄, Π½ΠΎ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ Π²ΡΠ΅Ρ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠ² ΠΊΠΎΠ΄Π°. ΠΡΡ ΠΎΠ΄Π½ΠΎ ΡΠ°Π·Π»ΠΈΡΠΈΠ΅ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΏΡΠΈ ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠ΅ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π΄Π΅Π»Π°ΡΡ Π±ΠΎΠ»Π΅Π΅ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, Π° ΠΌΠΎΠ½ΠΎΠΌΠΎΡΡΠΈΠ·Π°ΡΠΈΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π³ΠΈΠ±ΡΠ΅ ΡΠ°Π·Π΄Π΅Π»ΡΡΡ ΡΠ°Π·Π½ΡΠ΅ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊ-ΠΊΠΎΠ΄Π°. Π’Π°ΠΊΠΆΠ΅ ΡΡΠΎΠΈΡ Π·Π°ΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ Π² Π½Π΅ΠΊΠΎΡΠΎΡΡΡ Π±ΠΎΠ»ΡΡΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Ρ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° ΠΌΠΎΠ½ΠΎΠΌΠΎΡΡΠΈΠ·Π°ΡΠΈΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π½ΠΈΠ²Π΅Π»ΠΈΡΠΎΠ²Π°Π½Ρ ΠΏΡΠΎΠΌΠ°Ρ Π°ΠΌΠΈ ΠΊΡΡΠ° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ ΠΈΠ· ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.
ΠΠ°ΠΆΠ΄Π°Ρ ΠΈΠ· ΠΎΠΏΠΈΡΠ°Π½Π½ΡΡ ΡΡ Π΅ΠΌ ΡΠ°Π±ΠΎΡΡ Ρ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠ°ΠΌΠΈ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ°ΡΡΠΈΡΠ΅Π½Π° Π² ΡΠ°Π·Π½ΡΡ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡΡ , Π΅ΡΠ»ΠΈ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π±ΠΎΠ»ΡΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ ΠΈΠ»ΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ, ΠΈ Π² Π°Π²ΡΠΎΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠ·ΡΠΊΠΎΠ² ΠΏΡΠΈΡΠ»ΠΈ ΠΊ ΠΎΡΠ΅Π½Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΡΠΌ. Π ΠΏΡΠΈΠΌΠ΅ΡΡ, Π² Rust ΠΈ C# Π²ΠΎΠΎΠ±ΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ±Π° ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π°!
Π£ΠΏΠ°ΠΊΠΎΠ²ΠΊΠ°
ΠΠ°ΡΠ½ΡΠΌ Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ° Π±Π°Π·ΠΎΠ²ΠΎΠΉ ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ Π² Go:
Π’Π°ΠΊΠΆΠ΅ ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² C ( void* ), Go ( interface<> ), Π΄ΠΎ-Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΎΠ²ΠΎΠΉ Java ( Object ) ΠΈ Π΄ΠΎ-Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΎΠ²ΠΎΠΌ Objective-C ( id ).
Π£ΠΏΠ°ΠΊΠΎΠ²Π°Π½Π½ΡΠ΅ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΈ Ρ Π·Π°ΡΠΈΡΠ°Π½ΠΈΠ΅ΠΌ ΡΠΈΠΏΠΎΠ²
Π£ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ Π΅ΡΡΡ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠΈ:
Java ΠΈ Objective-C Π½Π°ΡΠΈΠ½Π°Π»ΠΈ Ρ ΠΎΠ±ΡΡΠ½ΠΎΠΉ ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ, Π° ΠΏΠΎΠ·Π΄Π½Π΅Π΅ ΠΎΠ±Π·Π°Π²Π΅Π»ΠΈΡΡ ΡΠ·ΡΠΊΠΎΠ²ΡΠΌΠΈ ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌΠΈ Π΄Π»Ρ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΎΠ² Ρ Π·Π°ΡΠΈΡΠ°Π½ΠΈΠ΅ΠΌ ΡΠΈΠΏΠΎΠ², ΡΠ°Π΄ΠΈ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠ°ΠΊΠΈΠ΅ ΠΆΠ΅ ΡΠΈΠΏΡ-ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ, ΠΊΠ°ΠΊ ΠΈ ΡΠ°Π½ΡΡΠ΅, Π½ΠΎ Ρ ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΌΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ ΡΠΈΠΏΠΎΠ²-Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΎΠ². Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΠ· ΡΡΠ°ΡΡΠΈ Π½Π° ΠΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΠΈ ΠΏΡΠΎ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΈ Π² Java:
ΠΡΠ²Π΅Π΄Π΅Π½Π½ΡΠ΅ ΡΠΏΠ°ΠΊΠΎΠ²Π°Π½Π½ΡΠ΅ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΈ Ρ ΡΠ½ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ
Π OCaml ΡΠ°ΠΊΠΆΠ΅ Π΅ΡΡΡ ΡΠΈΡΡΠ΅ΠΌΠ° Π²ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ ΡΠΈΠΏΠΎΠ², ΡΠ°ΠΊ ΡΡΠΎ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π²ΡΠ²Π΅Π΄Π΅Ρ ΡΠ°ΠΌΡΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΠΉ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊ-ΡΠΈΠΏ, Π΅ΡΠ»ΠΈ Π²Ρ Π½Π΅ Π°Π½Π½ΠΎΡΠΈΡΡΠ΅ΡΠ΅ Π΅Π³ΠΎ, ΠΈ ΠΏΠΎΡΡΠΎΠΌΡ ΡΡΠ½ΠΊΡΠΈΠΈ Π±ΡΠ΄ΡΡ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΠ°ΠΊ, ΡΠ»ΠΎΠ²Π½ΠΎ ΡΡΠΎ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠ·ΡΠΊ:
ΠΡΠΈΠ²Π΅Π΄ΡΠ½Π½ΡΠΉ ΡΠΈΠΏ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π·Π²Π°ΡΡ Β«ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ ΠΈΠ· ΡΠΏΠΈΡΠΊΠ° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΠΈΠΏΠ° ‘a Π²ΠΎ ΡΡΠΎ-ΡΠΎ Ρ ΡΠΈΠΏΠΎΠΌ ‘a Β». ΠΡΠΎ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠΉ ΡΠΈΠΏ Π±ΡΠ΄Π΅Ρ ΡΠ°ΠΊΠΈΠΌ ΠΆΠ΅, ΠΊΠ°ΠΊ ΡΠΈΠΏ ΡΠΏΠΈΡΠΊΠ°, ΠΈ ΠΏΡΠΈ ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π»ΡΠ±ΡΠΌ ΡΠΈΠΏΠΎΠΌ.
ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ
ΠΡΡΠ³ΠΈΠΌ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΎΠ±ΡΡΠ½ΠΎΠΉ ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎ, ΡΡΠΎ ΡΠΏΠ°ΠΊΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠΈΠΏΡ Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎ Π½Π΅ΠΏΡΠΎΠ·ΡΠ°ΡΠ½Ρ. ΠΡΠΎ Π½Π΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π΄Π»Ρ ΡΡΡΡΠΊΡΡΡ Π΄Π°Π½Π½ΡΡ Π²ΡΠΎΠ΄Π΅ ΡΡΠ΅ΠΊΠ°, Π½ΠΎ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΠΌ Π²ΡΠΎΠ΄Π΅ ΡΠΎΡΡΠΈΡΡΡΡΠΈΡ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊ-ΡΡΠ½ΠΊΡΠΈΠΉ Π½ΡΠΆΠ½Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π΄Π»Ρ ΡΠΈΠΏΠ° ΡΡΠ½ΠΊΡΠΈΠΈ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ. ΠΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΡΠΎ Π² runtime ΠΈ ΠΎΡΡΠ°Π·ΠΈΡΡ Π² ΡΠ·ΡΠΊΠ΅, ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈ ΡΡΠΎ ΡΠ°Π·Π½ΡΠ΅ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ, ΠΈ Π²Ρ ΠΌΠΎΠΆΠ΅Ρ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΠΎΡ ΠΆΠ΅ ΡΠ·ΡΠΊ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΎΠ². ΠΠ΄Π½Π°ΠΊΠΎ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ ΡΠ°Π·Π½ΡΡ ΡΠ·ΡΠΊΠΎΠ² Π²Π»ΠΈΡΡΡ Π½Π° ΠΈΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ, Π° ΡΠΆΠ΅ Π·Π°ΡΠ΅ΠΌ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΡΡΠΈΠ»ΠΈΠ²Π°ΡΡ ΡΠΈΠ»ΡΠ½ΡΠ΅ ΡΡΠΎΡΠΎΠ½Ρ Π²ΡΠ±ΡΠ°Π½Π½ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΉ. ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π΄Π²Π° ΡΠ΅ΠΌΠ΅ΠΉΡΡΠ²Π° ΡΠ·ΡΠΊΠΎΠ², ΠΎΡΠ½ΠΎΠ²Π°Π½Π½ΡΡ Π½Π° ΡΠ°Π·Π½ΡΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π°Ρ ΠΊ runtime: ΡΠ°Π±Π»ΠΈΡΠ°Ρ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² (vtables) ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ ΡΠ»ΠΎΠ²Π°ΡΡ.
ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ½ΡΠ΅ ΡΠ°Π±Π»ΠΈΡΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ²
ΠΡΠ»ΠΈ ΠΌΡ Ρ ΠΎΡΠΈΠΌ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π΄Π»Ρ ΡΠΈΠΏΠΎΠ², ΠΏΡΠΈΠ΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡ ΡΡΡΠ°ΡΠ΅Π³ΠΈΠΈ ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ ΡΠ°Π΄ΠΈ ΡΠ½ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ ΡΠΎ Π²ΡΠ΅ΠΌ ΠΏΠΎΠ΄ΡΡΠ΄, ΡΠΎ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΈΠΌΠ΅ΡΡ ΡΠ½ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± Π½Π°Ρ ΠΎΠ΄ΠΈΡΡ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΎΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ Β«ΡΠ°Π±Π»ΠΈΡΠ°ΠΌΠΈ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ²Β» (vtables, virtual method tables), Ρ ΠΎΡΡ Π½ΠΈΠΊΡΠΎ Π½Π΅ ΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΏΠΎΠ»Π½ΡΠΌ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ. ΠΠ½ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΡΠ°ΠΊ: Π½Π° Π½ΡΠ»Π΅Π²ΠΎΠΌ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠΈ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ΅ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊ-ΡΡΡΡΠΊΡΡΡΡ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΠ°Π±Π»ΠΈΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΉ Ρ ΠΊΠΎΠ½ΡΠΈΡΡΠ΅Π½ΡΠ½ΠΎΠΉ ΡΡ Π΅ΠΌΠΎΠΉ. Π ΡΡΠΈΡ ΡΠ°Π±Π»ΠΈΡΠ°Ρ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊ-ΠΊΠΎΠ΄ ΠΈΡΠ΅Ρ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ Π½Π° ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π΄Π»Ρ ΡΠΈΠΏΠΎΠ², ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΠ΅ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ Π½Π° ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΡΡ .
Π’Π°ΠΊ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ ΡΠΈΠΏΡ interface Π² Go ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΡ dyn trait Π² Rust. ΠΠΎΠ³Π΄Π° Π²Ρ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΠ΅ ΡΠΈΠΏ ΠΊ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ½ΠΎΠΌΡ ΡΠΈΠΏΡ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΎΠ½ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ, Π΄Π»Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΡΠΎΠ·Π΄Π°ΡΡΡΡ ΠΎΠ±ΡΡΡΠΊΠ°, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ°Ρ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΈ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° vtable ΡΡΠ½ΠΊΡΠΈΠΉ, ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΡ Π΄Π»Ρ ΡΠΈΠΏΠΎΠ². ΠΠΎ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΡΡΠΎΠ²Π΅Π½Ρ ΠΊΠΎΡΠ²Π΅Π½Π½ΠΎΠΉ Π°Π΄ΡΠ΅ΡΠ°ΡΠΈΠΈ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΉ ΠΈ Π΄ΡΡΠ³Π°Ρ ΡΡ Π΅ΠΌΠ°. ΠΠΎΡΡΠΎΠΌΡ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ° Π² Go ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π΄Π»Ρ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° Ρ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ Swap, Π° Π½Π΅ Π±Π΅ΡΡΡ ΡΠ»Π°ΠΉΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Comparable, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΡΠΎ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°Π»ΠΎ Π±Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ Π² ΠΏΠ°ΠΌΡΡΠΈ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎΠ³ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡΠ»Π°ΠΉΡΠ° ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ½ΡΡ ΡΠΈΠΏΠΎΠ², ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΡΡΠΈΡΠΎΠ²Π°Π»ΡΡ Π±Ρ Π²ΠΌΠ΅ΡΡΠΎ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ»Π°ΠΉΡΠ°!
ΠΠ±ΡΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
ΠΠΠ β ΡΡΠΎ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ ΡΠ·ΡΠΊΠ°, Ρ ΠΎΡΠΎΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠ΅Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΠ°Π±Π»ΠΈΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΡΠΈΠΏΠΎΠ². ΠΠΌΠ΅ΡΡΠΎ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ½ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Ρ vtables, ΠΠΠ-ΡΠ·ΡΠΊΠΈ Π²ΡΠΎΠ΄Π΅ Java ΠΏΡΠΎΡΡΠΎ Π²ΡΡΠ°Π²Π»ΡΡΡ Π² Π½Π°ΡΠ°Π»ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΠ°Π±Π»ΠΈΡΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΡΠΈΠΏΠΎΠ². Java-ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠ΅ ΡΠ·ΡΠΊΠΈ ΠΈΠΌΠ΅ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅Π»ΠΈΠΊΠΎΠΌ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΡΡ ΡΠ°Π±Π»ΠΈΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΡΠΈΠΏΠΎΠ².
ΠΡΠΎΠΌΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ, Π²ΡΡΡΠ°ΠΈΠ²Π°Π½ΠΈΠ΅ vtable Π² ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠ΅ΡΠ°Π΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΊΠΎΠ½ΡΡΡΡΠΈΡΠΎΠ²Π°ΡΡ Π½ΠΎΠ²ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ½ΡΠ΅ ΡΠΈΠΏΡ Ρ ΠΊΠΎΡΠ²Π΅Π½Π½ΠΎΠΉ Π°Π΄ΡΠ΅ΡΠ°ΡΠΈΠ΅ΠΉ (indirection). Π ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ Go, Π² Java ΡΡΠ½ΠΊΡΠΈΡ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Comparable ΠΊ ΡΠΈΠΏΠ°ΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ½Π° ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ.
Π Π΅ΡΠ»Π΅ΠΊΡΠΈΡ
ΠΡΠ»ΠΈ Ρ Π²Π°Ρ Π΅ΡΡΡ ΡΠ°Π±Π»ΠΈΡΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΡΠΈΠΏΠΎΠ², ΡΠΎ Π²Π°ΠΌ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΠ»ΠΎΠΆΠ½ΠΎ Π·Π°ΡΡΠ°Π²ΠΈΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈ ΡΠ°Π±Π»ΠΈΡΡ Π΄ΡΡΠ³ΠΈΡ ΡΠΈΠΏΠΎΠ² ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈΠΌΡΠ½ ΠΏΠΎΠ»Π΅ΠΉ, ΡΠΈΠΏΠΎΠ² ΠΈ ΠΌΠ΅ΡΡ (locations). ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ ΠΊΠΎ Π²ΡΠ΅ΠΌ Π΄Π°Π½Π½ΡΠΌ ΡΡΠΎΠ³ΠΎ ΡΠΈΠΏΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ Π²ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π»ΡΠ±ΡΡ Π΄ΡΡΠ³ΠΈΡ ΡΠΈΠΏΠΎΠ². Π’Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ Π² ΡΠ·ΡΠΊ Β«ΡΠ΅ΡΠ»Π΅ΠΊΡΠΈΠΈΒ», ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠ΅ΠΉ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΈ ΠΊΡΠ°ΡΠΈΠ²ΠΎΠ΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΡ ΡΠΈΠΏΠΎΠ². Π£ ΡΠ΅ΡΠ»Π΅ΠΊΡΠΈΠΈ, ΠΊΠ°ΠΊ Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΠΏΠ°ΡΠ°Π΄ΠΈΠ³ΠΌΡ ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ, Π΅ΡΡΡ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΠΊ: Π΄Π»Ρ Π½Π΅Ρ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π»ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΏΠΈΠΈ ΠΊΠΎΠ΄Π°, Π½ΠΎ ΠΏΡΠΈ ΡΡΠΎΠΌ Π½ΡΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΡ ΠΏΠΎΠΈΡΠΊΠΎΠ², ΡΡΠΎ ΡΠ½ΠΈΠΆΠ°Π΅Ρ ΡΠΊΠΎΡΠΎΡΡΡ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ.
Π―Π·ΡΠΊΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠ΅ ΡΠ΅ΡΠ»Π΅ΠΊΡΠΈΡ Π΄Π»Ρ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈ ΠΏΡΠΎΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ: Java, C# ΠΈ Go.
ΠΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠ·ΡΠΊΠΈ
Π Π΅ΡΠ»Π΅ΠΊΡΠΈΡ β ΠΎΡΠ΅Π½Ρ ΠΌΠΎΡΠ½ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠΉ ΡΠ΅ΡΠ°ΡΡ ΠΊΡΡΡ ΡΠ°Π·Π½ΡΡ Π·Π°Π΄Π°Ρ ΠΌΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΠΎ ΠΎΠ½Π° Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π½ΠΎΠ²ΡΠ΅ ΡΠΈΠΏΡ ΠΈΠ»ΠΈ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠΈΠΏΠ°Ρ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ. ΠΡΠ»ΠΈ ΠΌΡ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈ Π΄Π΅Π»Π°Π΅ΠΌ ΡΠ°ΠΊ, ΡΡΠΎ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΊ Π΄Π°Π½Π½ΡΠΌ ΠΈ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΡ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΡΠ΅ΡΠ»Π΅ΠΊΡΠΈΡ, ΡΠΎ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠ·ΡΠΊΠΈ! ΠΠ΅Π²Π΅ΡΠΎΡΡΠ½Π°Ρ Π³ΠΈΠ±ΠΊΠΎΡΡΡ ΠΌΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² ΡΠ·ΡΠΊΠ°Ρ Π²ΡΠΎΠ΄Π΅ Python ΠΈ Ruby Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΌ, ΠΌΠΎΡΠ½Π΅ΠΉΡΠΈΠΌ ΡΠΈΡΡΠ΅ΠΌΠ°ΠΌ ΡΠ΅ΡΠ»Π΅ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π»ΡΠ±ΡΡ Π·Π°Π΄Π°Ρ.
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΊΠ°Π·Π°ΡΡ: Β«ΠΠΎ Π²Π΅Π΄Ρ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠ·ΡΠΊΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π΅ ΡΠ°ΠΊ, ΠΎΠ½ΠΈ ΠΏΡΠΎΡΡΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡ Π²ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Ρ ΡΡ-ΡΠ°Π±Π»ΠΈΡ!Β». Π₯ΡΡ-ΡΠ°Π±Π»ΠΈΡΡ β Π»ΠΈΡΡ Ρ ΠΎΡΠΎΡΠ°Ρ ΡΡΡΡΠΊΡΡΡΠ° Π΄Π°Π½Π½ΡΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΡΠ΅ΠΌΡΡ ΡΠ°Π±Π»ΠΈΡ Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ΅ΠΉ ΠΎ ΡΠΈΠΏΠ°Ρ . Π ΡΠΎΠΌΡ ΠΆΠ΅ ΡΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, CPython. Π Π²ΡΡΠΎΠΊΠΎΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΌ JIT, ΡΠΊΠ°ΠΆΠ΅ΠΌ, V8, ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ°Π±Π»ΠΈΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΡΠΈΠΏΠΎΠ² ΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ ΡΠ΅ΡΠ»Π΅ΠΊΡΠΈΠΈ (reflection info). Π V8 ΡΠΊΡΡΡΡΠ΅ ΠΊΠ»Π°ΡΡΡ (vtables ΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠ΅ΡΠ»Π΅ΠΊΡΠΈΠΈ) ΠΈ ΡΡΡΡΠΊΡΡΡΠ° ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½Ρ ΡΠ΅ΠΌ, ΡΡΠΎ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ²ΠΈΠ΄Π΅ΡΡ Π² Java VM, Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΡ Π·Π°ΠΌΠ΅Π½ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π½ΠΎΠ²ΡΠΌΠΈ ΡΠ°Π±Π»ΠΈΡΠ°ΠΌΠΈ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΡΠΈΠΏΠΎΠ² Π² Ρ ΠΎΠ΄Π΅ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. ΠΡΠΎ Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠΉ Π½Π΅ Π±ΡΠ²Π°Π΅Ρ: ΡΠΎΠ·Π΄Π°ΡΠ΅Π»Ρ V8 ΡΠ°Π½ΡΡΠ΅ ΡΠ°Π±ΠΎΡΠ°Π» Π½Π°Π΄ Π²ΡΡΠΎΠΊΠΎΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ Java VM.
ΠΠ΅ΡΠ΅Π΄Π°ΡΠ° ΡΠ»ΠΎΠ²Π°ΡΡ
ΠΡΡΠ³ΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ² Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ ΡΠ°Π±Π»ΠΈΡΡ Ρ ΡΡΠ΅Π±ΡΠ΅ΠΌΡΠΌΠΈ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΡΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ ΡΠΎΠΉ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊ-ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΎΠ½ΠΈ Π½ΡΠΆΠ½Ρ. ΠΡΠΎ ΡΠ΅ΠΌ-ΡΠΎ ΠΏΠΎΡ ΠΎΠΆΠ΅ Π½Π° ΠΊΠΎΠ½ΡΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Go-ΠΎΠ±ΡΠ°Π·Π½ΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ½ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π² ΠΌΠ΅ΡΡΠ΅ Π²ΡΠ·ΠΎΠ²Π°, ΡΠΎΠ»ΡΠΊΠΎ Π² Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠ°Π±Π»ΠΈΡΠ° ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ Π² Π²ΠΈΠ΄Π΅ ΡΠΊΡΡΡΠΎΠ³ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°, Π° Π½Π΅ ΠΏΠ°ΠΊΡΠ΅ΡΡΡ Π² Π±Π°Π½Π΄Π» ΠΊΠ°ΠΊ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ².
Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² ΠΊΠ»Π°ΡΡΠ°Ρ ΡΠΈΠΏΠΎΠ² (type classes) Π² Haskell, Ρ ΠΎΡΡ GHC ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΈΠ½Π»Π°ΠΉΠ½ΠΈΠ½Π³Π° ΠΈ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΊΠ°ΠΊΡΡ-ΡΠΎ ΠΌΠΎΠ½ΠΎΠΌΠΎΡΡΠΈΠ·Π°ΡΠΈΡ. Π OCaml ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ° ΡΠ»ΠΎΠ²Π°ΡΡ Ρ ΡΠ²Π½ΡΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ Π² Π²ΠΈΠ΄Π΅ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°, Π½ΠΎ ΡΠΆΠ΅ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ΄Π΅Π»Π°ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Π½Π΅ΡΠ²Π½ΡΠΌ.
Witness-ΡΠ°Π±Π»ΠΈΡΡ Π² Swift
ΠΠ²ΡΠΎΡΡ Swift ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠ»ΠΈ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅: ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ° ΡΠ»ΠΎΠ²Π°ΡΡ, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ Π² ΡΠ°Π±Π»ΠΈΡΡ Π΄Π°Π½Π½ΡΡ ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ°Ρ ΡΠΈΠΏΠΎΠ² ΠΈ ΡΠΏΠΎΡΠΎΠ±Π°Ρ ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΡ, ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ Π²ΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π΄Π»Ρ ΡΠ½ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ Ρ Π»ΡΠ±ΡΠΌΠΈ ΡΠΈΠΏΠ°ΠΌΠΈ Π±Π΅Π· ΠΈΡ ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Swift ΠΌΠΎΠΆΠ΅Ρ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²ΡΠ²Π°ΡΡ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΈ Π±Π΅Π· ΠΌΠΎΠ½ΠΎΠΌΠΎΡΡΠΈΠ·Π°ΡΠΈΠΈ ΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ Π² ΠΏΠ°ΠΌΡΡΠΈ Π² ΡΠ½ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠΈ Π²ΡΠ΅Ρ ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ! ΠΠ°, ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ ΡΠ°ΡΠΏΠ»Π°ΡΠΈΠ²Π°ΡΡΡΡ Π·Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΏΠΎΠΈΡΠΊΠΈ, ΠΊΠ°ΠΊ ΡΡΠΎ ΡΠ²ΠΎΠΉΡΡΠ²Π΅Π½Π½ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ΅ΠΌΠ΅ΠΉΡΡΠ²Ρ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠ΅ΠΌΡ ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΡ, Π½Π° Π·Π°ΡΠΎ ΡΠΊΠΎΠ½ΠΎΠΌΡΡΡΡ ΡΠ΅ΡΡΡΡΡ Π½Π° ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ Π² ΠΏΠ°ΠΌΡΡΠΈ, Π΅Ρ ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΠ΅ ΠΈ Π½Π΅ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΊΡΡΠ°. ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Swift ΡΠ°ΠΊΠΆΠ΅ ΡΠΌΠ΅Π΅Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ, Π°Π½Π½ΠΎΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΠΊΠ°ΠΊ @inlinable, ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ (ΠΌΠΎΠ½ΠΎΠΌΠΎΡΡΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ) ΠΈ ΠΈΠ½Π»Π°ΠΉΠ½ΠΈΡΡ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΈ Π²Π½ΡΡΡΠΈ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΈΠ»ΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΠΌΠΎΠ΄ΡΠ»ΡΠΌΠΈ, ΡΡΠΎΠ±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΡΠΏΠΎΠΌΡΠ½ΡΡΡΡ ΡΠ°ΡΡ ΠΎΠ΄ΠΎΠ². ΠΠ΅ΡΠΎΡΡΠ½ΠΎ, ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΡΠ²ΡΠΈΡΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΎΡΠ΅Π½ΠΊΠ° Π²Π»ΠΈΡΠ½ΠΈΡ Π½Π° ΡΠ°Π·ΠΌΠ΅Ρ ΠΊΠΎΠ΄Π°.
ΠΡΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΎΠ±ΡΡΡΠ½ΡΠ΅Ρ, ΠΊΠ°ΠΊ Swift ΠΌΠΎΠΆΠ΅Ρ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ABI-ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎΡΡΡ, ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΠΈ ΠΏΠ΅ΡΠ΅ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΠΏΠΎΠ»Ρ Π² ΡΡΡΡΠΊΡΡΡΠ΅, Ρ ΠΎΡΡ Π°Π²ΡΠΎΡΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ Π°ΡΡΠΈΠ±ΡΡ @frozen Π΄Π»Ρ ΠΎΡΠΊΠ°Π·Π° ΠΎΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ° ΡΠ°Π΄ΠΈ ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ.
ΠΠ½ΡΠ΅Π½ΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΉ Π°Π½Π°Π»ΠΈΠ· ΡΠΈΠΏΠΎΠ² (Intensional Type Analysis)
ΠΡΡΡ Π΅ΡΡ ΠΎΠ΄ΠΈΠ½ ΡΠΏΠΎΡΠΎΠ± ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ² Π΄Π»Ρ ΡΠΏΠ°ΠΊΠΎΠ²Π°Π½Π½ΡΡ ΡΠΈΠΏΠΎΠ². ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΡΠΈΠΏΠ° Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΡ ΡΠ°ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, ΠΏΠΎ ΠΏΡΠΈΠΌΠ΅ΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° vtable, Π° Π·Π°ΡΠ΅ΠΌ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π°, ΠΈΠΌΠ΅ΡΡΠ΅Π³ΠΎ Π±ΠΎΠ»ΡΡΠΎΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ switch Π΄Π»Ρ Π²ΡΠ΅Ρ ΡΠΈΠΏΠΎΠ², ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠΈΡ ΡΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄, ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΌ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠΌΡ ΠΌΠ΅ΡΠΎΠ΄Ρ, ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠΌΡ Π΄Π»Ρ ΡΠΈΠΏΠ°.
Π― Π½Π΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ΅ΡΠ΅Π³Π°Ρ ΠΎΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ·ΡΠΊΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΡ ΡΡΠΎΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄, Π½ΠΎ ΠΏΠΎΡ ΠΎΠΆΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Π΄Π΅ΠΉΡΡΠ²ΡΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ Π‘++ ΠΈ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΌΠ°ΡΠΈΠ½Ρ Java, ΠΊΠΎΠ³Π΄Π° Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΏΡΠΎΡΠΈΠ»Π΅ΠΉ Π²ΡΡΡΠ½ΡΡΡ, ΡΡΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΠΎΠ΅ ΠΌΠ΅ΡΡΠΎ Π²ΡΠ·ΠΎΠ²Π° Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΎΠ² ΠΏΠΎ Π±ΠΎΠ»ΡΡΠ΅ΠΉ ΡΠ°ΡΡΠΈ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΡ ΡΠΈΠΏΠΎΠ². ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ ΠΈ ΠΠ Π·Π°ΠΌΠ΅Π½ΡΡΡ ΠΌΠ΅ΡΡΠ° Π²ΡΠ·ΠΎΠ²Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ°ΠΌΠΈ Π½Π° ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΎΠ±ΡΡΠ½ΡΠΉ ΡΠΈΠΏ, Π° Π·Π°ΡΠ΅ΠΌ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π΄Π΅ΡΠΏΠ΅ΡΡΠ΅ΡΠΈΠ·ΠΈΡΡΡΡ ΡΡΠΈ ΡΠΈΠΏΡ, Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π·Π°ΠΏΠ°ΡΠ½ΠΎΠ³ΠΎ Π²Π°ΡΠΈΠ°Π½ΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΎΠ±ΡΡΠ½ΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΡΡ Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅ΡΠΈΠ·Π°ΡΠΈΡ. ΠΠΎΡΡΠΎΠΌΡ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·Π°Π½ΠΈΡ Π²Π΅ΡΠ²Π»Π΅Π½ΠΈΡ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΠ³Π½ΠΎΠ·ΠΈΡΠΎΠ²Π°ΡΡ, ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΉ Π²Π΅ΡΠΊΠ΅ ΠΏΠΎΠΉΠ΄ΡΡ ΠΊΠΎΠ΄, ΠΈ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅ΡΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ Π²ΡΠ·ΠΎΠ²ΠΎΠ².
ΠΠΎΠ½ΠΎΠΌΠΎΡΡΠΈΠ·Π°ΡΠΈΡ
ΠΡΠΎ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π° ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠ΅. ΠΡΠΈ ΠΌΠΎΠ½ΠΎΠΌΠΎΡΡΠΈΠ·Π°ΡΠΈΠΈ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ ΡΠΏΠΎΡΠΎΠ± Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΌΠ½ΠΎΠ³ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΡ Π²Π΅ΡΡΠΈΠΉ ΠΊΠΎΠ΄Π° Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ Ρ ΠΎΡΠΈΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ. Π£ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠ² Π΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π· ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ, ΡΠ΅ΡΠ΅Π· ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΡ ΠΊΠΎΠ΄, ΠΈ, ΡΠ΅ΠΎΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈ, ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ Π½Π° Π»ΡΠ±ΠΎΠΉ ΠΈΠ· ΡΡΠΈΡ ΡΡΠ°Π΄ΠΈΠΉ.
ΠΠ΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°
ΠΡΠΎΡΡΠ΅ΠΉΡΠΈΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΌΠΎΠ½ΠΎΠΌΠΎΡΡΠΈΠ·Π°ΡΠΈΠΈ β ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ Π½Π° ΡΡΠ°Π΄ΠΈΠΈ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ: ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄! Π’ΠΎΠ³Π΄Π° Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π΄Π°ΠΆΠ΅ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΈ, ΠΈ ΡΠ°ΠΊ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΏΠΎΡΡΡΠΏΠ°ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ ΡΠ·ΡΠΊΠΎΠ² Π‘ ΠΈ Go, Π² ΡΡΠΈΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°Ρ ΡΠ°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ Π½Π΅Ρ.
ΠΠ΅Π΄ΠΎΡΡΠ°ΡΠΎΠΊ Π΄ΡΠ±Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ, Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠ·ΡΠΊΠ°, ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡΡ ΡΠ°Π·Π±ΠΈΡΠ°ΡΡΡΡ Ρ ΠΌΠ½ΠΎΠ³ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΠΌΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ ΠΈ ΠΊΡΠ°Π΅Π²ΡΠΌΠΈ ΡΠ»ΡΡΠ°ΡΠΌΠΈ, ΠΊ ΡΠΎΠΌΡ ΠΆΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΏΠΎ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ°Π· ΠΏΠ°ΡΡΠΈΡ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ ΡΠΈΠΏΡ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΠΊΠΎΠ΄Π°. ΠΠΏΡΡΡ ΠΆΠ΅, Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠ·ΡΠΊΠ° ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ², ΡΡΠΈ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΡΡΠ΄Π½ΡΠΌΠΈ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ, ΠΊΠ°ΠΊ Π΅ΡΠ»ΠΈ Π±Ρ Π²Π½ΡΡΡΠΈ Π‘-ΠΌΠ°ΠΊΡΠΎΡΠ° ΠΊΠ°ΠΆΠ΄Π°Ρ ΡΡΡΠΎΠΊΠ° Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°Π»Π°ΡΡ ΠΎΠ±ΡΠ°ΡΠ½ΡΠΌ ΡΠ»Π΅ΡΠ΅ΠΌ ΠΈ Π²ΡΠ΅ ΡΠΈΠΏΡ ΠΈ ΠΈΠΌΠ΅Π½Π° ΡΡΠ½ΠΊΡΠΈΠΉ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ Π²ΡΡΡΠ½ΡΡ ΡΠΊΠ»Π΅Π΅Π½Ρ Π² ΠΈΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ Π΄Π»Ρ ΠΈΠ·Π±Π΅ΠΆΠ°Π½ΠΈΡ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΉ.
Π‘ΡΡΠΎΠΊΠΎΠ²ΡΠ΅ ΠΌΠΈΠΊΡΠΈΠ½Ρ Π² D
ΠΠ΄Π½Π°ΠΊΠΎ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° ΠΈΠΌΠ΅Π΅Ρ ΡΠ²ΠΎΠΈ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π°, Π²ΡΠΎΠ΄Π΅ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅, Π·Π½Π°ΠΊΠΎΠΌΠΎΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌ.
ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ·ΡΠΊΠΈ, Π² ΠΊΠΎΡΠΎΡΡΡ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ ΠΈΠ½Π°ΡΠ΅, ΡΠΎΠΆΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π΄Π»Ρ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ±ΡΠΈΡ ΡΠ»ΡΡΠ°Π΅Π² ΠΌΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π½Π΅ ΡΡΡΡΠ½Π½ΡΡ Π² ΠΈΡ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΎΠ², Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ. Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ½ΡΡΠ½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ β ΡΡΡΠΎΠΊΠΎΠ²ΡΠ΅ ΠΌΠΈΠΊΡΠΈΠ½Ρ Π² D, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠ΅ ΠΏΠΎΡΡΠ΅Π΄ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ D-ΠΊΠΎΠ΄ Π² Π²ΠΈΠ΄Π΅ ΡΡΡΠΎΠΊΠΎΠ²ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ, ΠΏΠΎΠ»ΡΠ·ΡΡΡΡ Π²ΡΠ΅ΠΌΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠΌΠΈ ΡΠ·ΡΠΊΠ°.
ΠΡΠΎΡΠ΅Π΄ΡΡΠ½ΡΠ΅ ΠΌΠ°ΠΊΡΠΎΡΡ Rust
ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΎΠ»ΡΠΊΠΎ Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Π² ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ΅ Π»ΠΈΡΡ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΡΡΠ°ΠΏΠ΅. ΠΡΠΎΡΠ΅Π΄ΡΡΠ½ΡΠ΅ ΠΌΠ°ΠΊΡΠΎΡΡ Rust ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π²Ρ ΠΎΠ΄Π½ΡΡ ΠΈ Π²ΡΡ ΠΎΠ΄Π½ΡΡ Π΄Π°Π½Π½ΡΡ ΠΏΠΎΡΠΎΠΊΠΈ ΡΠΎΠΊΠ΅Π½ΠΎΠ² (token streams), ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡ ΡΡΠΈΠ»ΠΈΡΡ Π΄Π»Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΡΡΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ² Π² ΡΡΡΠΎΠΊΠΎΠ²ΡΠ΅ ΠΈ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ. ΠΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎ ΡΡΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π° Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΏΠΎΡΠΎΠΊΠΈ ΡΠΎΠΊΠ΅Π½ΠΎΠ² ΠΌΠΎΠ³ΡΡ ΡΠΎΡ ΡΠ°Π½ΡΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΈΠ· ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΎ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ . ΠΠΎΠ΄, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ, ΠΌΠ°ΠΊΡΠΎΡ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΡΠ°Π²Π»ΡΡΡ Π² Π²ΠΈΠ΄Π΅ ΡΠΎΠΊΠ΅Π½ΠΎΠ² Π½Π°ΠΏΡΡΠΌΡΡ ΠΈΠ· Π²Ρ ΠΎΠ΄Π½ΡΡ Π΄Π°Π½Π½ΡΡ Π² Π²ΡΡ ΠΎΠ΄Π½ΡΠ΅. Π Π΅ΡΠ»ΠΈ ΡΡΠΎΡ ΠΊΠΎΠ΄ ΠΏΡΠΈΠ²Π΅Π΄ΡΡ ΠΊ ΠΎΡΠΈΠ±ΠΊΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² Π²ΡΡ ΠΎΠ΄Π½ΡΡ Π΄Π°Π½Π½ΡΡ ΠΌΠ°ΠΊΠΎΡΠ°, ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π²ΡΠ²Π΅Π΄Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΈ ΡΠΎΡΠ½ΠΎ ΡΠΊΠ°ΠΆΠ΅Ρ Π½Π° ΡΠ°ΠΉΠ», ΡΡΡΠΎΠΊΡ ΠΈ ΠΊΠΎΠ»ΠΎΠ½ΠΊΡ ΡΠ»ΠΎΠΌΠ°Π½Π½ΠΎΠΉ ΡΠ°ΡΡΠΈ ΠΊΠΎΠ΄Π°. ΠΠΎ Π΅ΡΠ»ΠΈ ΡΠ»ΠΎΠΌΠ°Π½Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΌΠ°ΠΊΡΠΎΡ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ, ΡΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅ ΡΠΊΠ°ΠΆΠ΅Ρ Π½Π° Π²ΡΠ·ΠΎΠ² ΠΌΠ°ΠΊΡΠΎΡΠ°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ ΠΌΠ°ΠΊΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠ±ΡΡΡΡΠ²Π°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ Π² ΠΆΡΡΠ½Π°Π»ΠΈΡΡΡΡΠΈΡ Π²ΡΠ·ΠΎΠ²Π°Ρ ΠΈ Π΄ΠΎΠΏΡΡΠΊΠ°Π΅Ρ ΠΎΡΠΈΠ±ΠΊΡ Π² ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΎΠ±ΡΡΠ½ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅ ΡΠΊΠ°ΠΆΠ΅Ρ ΠΏΡΡΠΌΠΎ Π½Π° ΠΎΡΠΈΠ±ΠΊΡ Π² ΡΠ°ΠΉΠ»Π΅, Π° Π½Π΅ Π½Π° ΠΊΠΎΠ΄, ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΌΠ°ΠΊΡΠΎΡΠΎΠΌ.
ΠΠ°ΠΊΡΠΎΡΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π΄Π΅ΡΠ΅Π²Π°
ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ·ΡΠΊΠΈ ΠΈΠ΄ΡΡ Π΅ΡΡ Π΄Π°Π»ΡΡΠ΅ ΠΈ ΠΏΡΠ΅Π΄Π»Π°Π³Π°ΡΡ ΡΡΠ΅Π΄ΡΡΠ²Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π² ΠΌΠ°ΠΊΡΠΎΡΠ°Ρ ΡΠ°Π·Π½ΡΡ ΡΠΈΠΏΠΎΠ² Π΄Π΅ΡΠ΅Π²Π° Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΠΎΠ³ΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° (Abstract Syntax Tree, AST). Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π·Π²Π°ΡΡ Template Haskell, ΠΌΠ°ΠΊΡΠΎΡΡ Nim, OCaml PPX ΠΈ ΠΏΠΎΡΡΠΈ Π²ΡΠ΅ Lisp.
ΠΠ΅Π΄ΠΎΡΡΠ°ΡΠΎΠΊ AST-ΠΌΠ°ΠΊΡΠΎΡΠΎΠ² Π² ΡΠΎΠΌ, ΡΡΠΎ Π²Π°ΠΌ Π½Π΅ Π·Π°Ρ ΠΎΡΠ΅ΡΡΡ Π·Π°ΡΡΠ°Π²Π»ΡΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ ΠΈΠ·ΡΡΠ°ΡΡ ΠΊΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ Π΄Π»Ρ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ AST-ΡΠΈΠΏΠΎΠ², ΠΊΠ°ΠΊ ΠΈ Π±Π°Π·ΠΎΠ²ΡΡ ΡΠ·ΡΠΊΠΎΠ². Π ΡΠ΅ΠΌΠ΅ΠΉΡΡΠ²Π΅ ΡΠ·ΡΠΊΠΎΠ² Lisp ΡΡΠΎ ΡΠ΅ΡΠ°Π΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΈΠ»ΡΠ½ΠΎΠ³ΠΎ ΡΠΏΡΠΎΡΠ΅Π½ΠΈΡ ΠΈ ΠΏΡΠ΅Π΄Π΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° ΠΈ ΡΡΡΡΠΊΡΡΡΡ AST, ΠΎΠ΄Π½Π°ΠΊΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΡΡΡΡΠΊΡΡΡΡ Π½Π΅ Π²ΡΠ΅Π³Π΄Π° Π»Π΅Π³ΠΊΠΎ.
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π²ΠΎ Π²ΡΠ΅Ρ ΡΠΏΠΎΠΌΡΠ½ΡΡΡΡ ΠΌΠ½ΠΎΠΉ ΡΠ·ΡΠΊΠ°Ρ Π΅ΡΡΡ Π² ΡΠΎΠΌ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΌ Π²ΠΈΠ΄Π΅ ΠΏΡΠΈΠΌΠΈΡΠΈΠ² Β«quoteΒ», ΠΊΠΎΡΠΎΡΠΎΠΌΡ Π²Ρ Π΄Π°ΡΡΠ΅ ΡΡΠ°Π³ΠΌΠ΅Π½Ρ ΠΊΠΎΠ΄Π° Π½Π° ΡΠ·ΡΠΊΠ΅, Π° ΡΠΎΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π΄Π΅ΡΠ΅Π²ΠΎ. ΠΡΠΈ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Ρ ΠΌΠΎΠ³ΡΡ ΡΡΠ°ΡΠΈΠ²Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π΄Π΅ΡΠ΅Π²Π° Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΠΎΠ΄ΠΎΠ±ΠΈΡ ΡΡΡΠΎΠΊΠΎΠ²ΠΎΠΉ ΠΈΠ½ΡΠ΅ΡΠΏΠΎΠ»ΡΡΠΈΠΈ. ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ Π½Π° Template Haskell:
ΠΠ΄Π½ΠΈΠΌ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠΎΠΌ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ½ΡΡ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ² Π½Π° ΡΡΠΎΠ²Π½Π΅ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π΄Π΅ΡΠ΅Π²Π°, Π° Π½Π΅ Π½Π° ΡΡΠΎΠ²Π½Π΅ ΡΠΎΠΊΠ΅Π½ΠΎΠ², ΡΠ²Π»ΡΠ΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΡΠΈΠΏΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π΄Π΅ΡΠ΅Π²Π° ΡΠ°ΡΡΠΎ ΠΌΠ΅Π½ΡΡΡΡΡ ΠΏΡΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ Π½ΠΎΠ²ΡΡ ΡΠ·ΡΠΊΠΎΠ²ΡΡ ΡΠ²ΠΎΠΉΡΡΠ². Π ΡΠΈΠΏΡ ΡΠΎΠΊΠ΅Π½ΠΎΠ² ΠΌΠΎΠ³ΡΡ ΠΎΡΡΠ°ΡΡΡΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΡΠΌΠΈ. Π ΠΏΡΠΈΠΌΠ΅ΡΡ, ΡΠΈΡΡΠ΅ΠΌΠ΅ PPX Π² OCaml Π½ΡΠΆΠ½Π° ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½Π°Ρ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ° Π΄Π»Ρ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ Π΄Π΅ΡΠ΅Π²ΡΠ΅Π² ΠΏΠ°ΡΡΠΈΠ½Π³Π° Π²/ΠΈΠ· ΡΠ·ΡΠΊΠΎΠ²ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠΉ ΠΌΠ°ΠΊΡΠΎΡΠΎΠΌ. Π Rust Π΅ΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, Π΄ΠΎΠ±Π°Π²Π»ΡΡΡΠΈΠ΅ ΡΡΠΈΠ»ΠΈΡΡ parsing ΠΈ quotation, ΠΏΠΎΡΡΠΎΠΌΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΈΡΠ°ΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ½ΡΠ΅ ΠΌΠ°ΠΊΡΠΎΡΡ Π² ΡΠΎΠΌ ΠΆΠ΅ ΡΡΠΈΠ»Π΅, ΡΡΠΎ ΠΈ Π² ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ² ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΡ Π΄Π΅ΡΠ΅Π²ΡΠ΅Π². Π Π΅ΡΡ Π² Rust Π΅ΡΡΡ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»ΡΠ½Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΡΠ°Π΅ΡΡΡ ΡΠ΅ΠΏΠ»ΠΈΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌΡΠ΅ ΡΠ΅ΡΠ»Π΅ΠΊΡΠΈΠ΅ΠΉ!
Π¨Π°Π±Π»ΠΎΠ½Ρ
ΠΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΈ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΡΠΈΠΏΠ° β ΡΡΠΎ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠ΅ ΡΠ°Π·Π²ΠΈΡΠΈΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠ° Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΊΠΎΠ΄Π° Π² ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ΅. Π¨Π°Π±Π»ΠΎΠ½Ρ Π² Π‘++ ΠΈ D ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΡΠΎΠ±ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΎΠ², ΠΏΡΠΈ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π»Ρ ΡΠΈΠΏΠΎΠ² ΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ Π·Π°Π΄Π°Π²Π°ΡΡ Β«ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ²Β». Π ΠΊΠΎΠ³Π΄Π° Π²Ρ ΡΠΎΠ·Π΄Π°ΡΡΠ΅ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΡΠ°Π±Π»ΠΎΠ½Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°, ΡΡΠΎΡ ΡΠΈΠΏ ΠΏΠΎΠ΄ΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ Π² ΡΡΠ½ΠΊΡΠΈΡ, ΠΈ ΡΠΎΠ³Π΄Π° ΡΡΠ½ΠΊΡΠΈΡ ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ ΡΠΈΠΏΠΎΠ², ΡΠΎ Π΅ΡΡΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π±ΡΡΡ ΡΠ²Π΅ΡΠ΅Π½Ρ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ Π²Π°Π»ΠΈΠ΄Π½Π°.
Π C++20 Π΅ΡΡΡ Β«ΠΊΠΎΠ½ΡΠ΅ΠΏΡΡΒ», ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ»ΡΠΆΠ°Ρ Π΄Π»Ρ ΡΠΎΠΉ ΠΆΠ΅ ΡΠ΅Π»ΠΈ, ΡΠΎΠ»ΡΠΊΠΎ ΠΈΡ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° Π±ΠΎΠ»ΡΡΠ΅ ΠΏΠΎΡ ΠΎΠΆΠ° Π½Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ² ΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΡΠΈΠΏΠΎΠ².
Π€ΡΠ½ΠΊΡΠΈΠΈ ΡΡΠ°ΠΏΠ° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ
ΠΡΡΡ ΡΠ·ΡΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π΅ΡΡ Π΄Π°Π»ΡΡΠ΅ ΡΠ°Π·Π²ΠΈΠ²Π°ΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ Β«Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΈ ΠΊΠ°ΠΊ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΡΠ°ΠΏΠ° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΡΒ». ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Zig:
ΠΠ΅Π·ΡΠΌΠ½ΡΠΉ ΡΡΠΎΠ²Π΅Π½Ρ ΠΌΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² Terra ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²ΡΠ²Π°ΡΡ Π² Π²ΠΈΠ΄Π΅ ΠΏΡΠΎΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΡΡΡΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ Π΄Π»Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ (domain specific) ΡΠ·ΡΠΊΠΎΠ², ΠΈΠ»ΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²ΡΠ²Π°ΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ½ΡΠ΅ ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ Java ΠΈ Go Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ Ρ ΠΌΠ°Π»Π΅Π½ΡΠΊΠΈΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΠΌ ΠΊΠΎΠ΄Π°. Π Π·Π°ΡΠ΅ΠΌ Π² Terra ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Π² Ρ ΠΎΠ΄Π΅ runtime ΠΊΠΎΠ΄ Π² Π²ΠΈΠ΄Π΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ², Π½Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ.
ΠΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΈ Π² Rust
Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠΈΠΏ ΠΌΠΎΠ½ΠΎΠΌΠΎΡΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΎΠ² ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΡ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π² ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ΅ Π΅ΡΡ Π΄Π°Π»ΡΡΠ΅, ΠΏΠΎΡΠ»Π΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠΈΠΏΠΎΠ². Π― ΡΠΏΠΎΠΌΠΈΠ½Π°Π», ΡΡΠΎ ΡΠΈΠΏ Π²Π½ΡΡΡΠΈΠ±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΡΠ½ΡΡ ΠΎΡΠΈΠ±ΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π² Π‘++, ΠΏΠΎΡ ΠΎΠΆΠΈ Π½Π° ΠΎΡΠΈΠ±ΠΊΠΈ Π² Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ ΡΠ·ΡΠΊΠ΅. ΠΡΠΎ ΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠ΅ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π² ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°Ρ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ², ΠΏΠΎ ΡΡΡΠΈ, Π΅ΡΡΡ Π»ΠΈΡΡ ΠΎΠ΄ΠΈΠ½ Π²ΠΈΠ΄ ΡΠΈΠΏΠΎΠ², ΠΊΠ°ΠΊ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠ·ΡΠΊ. Π Π·Π½Π°ΡΠΈΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΅ΡΠΈΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, Π΄ΠΎΠ±Π°Π²ΠΈΠ² ΡΠΈΡΡΠ΅ΠΌΡ ΡΠΈΠΏΠΎΠ² Π½Π° ΠΌΠ΅ΡΠ°ΡΡΠΎΠ²Π΅Π½Ρ ΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΡΡ ΠΌΠ½ΠΎΠ³ΠΎ Π²ΠΈΠ΄ΠΎΠ² ΡΠΈΠΏΠΎΠ² ΡΠΎ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΎΠΉ Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ Π²Π°ΠΌΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ. Π’Π°ΠΊ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΈ Π² Rust, ΠΈ Π½Π° ΡΡΠΎΠ²Π½Π΅ ΡΠ·ΡΠΊΠ° β Π² Swift ΠΈ Haskell.
Π Rust Π½ΡΠΆΠ½ΠΎ Π² ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°Ρ ΡΠΈΠΏΠΎΠ² ΠΎΠ±ΡΡΠ²Π»ΡΡΡ Β«Π³ΡΠ°Π½ΠΈΡΡ ΠΏΡΠΈΠ·Π½Π°ΠΊΠΎΠ²Β» (trait bounds). Trait β ΡΡΠΎ ΠΊΠ°ΠΊ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ Π² Π΄ΡΡΠ³ΠΈΡ ΡΠ·ΡΠΊΠ°Ρ , ΠΎΠ½ΠΈ ΠΎΠ±ΡΡΠ²Π»ΡΡΡ Π½Π°Π±ΠΎΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌΡΡ ΡΠΈΠΏΠΎΠΌ. ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Rust ΠΏΡΠΎΠ²Π΅ΡΠΈΡ, Π±ΡΠ΄Π΅Ρ Π»ΠΈ ΡΠ΅Π»ΠΎ Π²Π°ΡΠΈΡ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊ-ΡΡΠ½ΠΊΡΠΈΠΉ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Π»ΡΠ±ΡΠΌ ΡΠΈΠΏΠΎΠΌ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΌ Π³ΡΠ°Π½ΠΈΡΠ°ΠΌ ΠΏΡΠΈΠ·Π½Π°ΠΊΠΎΠ², ΠΈ Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΠΈΠΏΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Ρ Π² ΡΡΠΈΡ Π³ΡΠ°Π½ΠΈΡΠ°Ρ . ΠΠΎΡΡΠΎΠΌΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊ-ΡΡΠ½ΠΊΡΠΈΠΉ Π² Rust Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΠΎΡΠΈΠ±ΠΎΠΊ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠ² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π»ΠΈΡΡ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π· Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ ΡΠΈΠΏΠΎΠ² Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊ-ΡΡΠ½ΠΊΡΠΈΠΈ.
ΠΠ° ΡΡΠΎΠ²Π½Π΅ ΡΠ·ΡΠΊΠ° ΡΡΠΎ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΡ ΠΎΠΆΠ΅ Π½Π° ΡΠ°ΠΊΡΡ ΡΠ°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡΡ ΡΠΈΡΡΠ΅ΠΌΡ ΡΠΈΠΏΠΎΠ², ΠΊΠΎΡΠΎΡΠ°Ρ Π½ΡΠΆΠ½Π° Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΎΠ² Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ½ΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΎΠ². ΠΠΎΡΡΠΎΠΌΡ Rust ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΎΠ±Π° Π²Π°ΡΠΈΠ°Π½ΡΠ° Π² ΡΠ°ΠΌΠΊΠ°Ρ ΠΎΠ΄Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ. Π Rust 2018 Π΄Π°ΠΆΠ΅ ΠΏΠΎΡΠ²ΠΈΠ»ΡΡ ΡΠ½ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ v: &impl SomeTrait ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ ΠΌΠΎΠ½ΠΎΠΌΠΎΡΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ, Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ v: &dyn SomeTrait ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΡ. ΠΡΠΎ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°ΠΌ Π²ΡΠΎΠ΄Π΅ GHC Π² Swift ΠΈ Haskell ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠΎΠ½ΠΎΠΌΠΎΡΡΠΈΠ·Π°ΡΠΈΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ, Π΄Π°ΠΆΠ΅ Ρ ΠΎΡΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΎΠ½ΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΡ.
ΠΠΎΠ½ΠΎΠΌΠΎΡΡΠΈΠ·Π°ΡΠΈΡ ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°
Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠ°Π³ Π² ΠΌΠΎΠ΄Π΅Π»ΡΡ ΠΌΠΎΠ½ΠΎΠΌΠΎΡΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΎΠ² β ΡΡΠΎ ΠΏΠ΅ΡΠ΅Π½Π΅ΡΡΠΈ ΠΈΡ Π² ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°Ρ Π½Π° Π΅ΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ·Π΄Π½ΡΡ ΡΡΠ°Π΄ΠΈΡ, ΠΏΠΎΡΠ»Π΅ Π±ΡΠΊΠ΅Π½Π΄Π°. ΠΠ°ΠΊ ΠΌΡ ΠΊΠΎΠΏΠΈΡΡΠ΅ΠΌ ΡΠ°Π±Π»ΠΎΠ½Ρ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΡΠ΅ Π°Π½Π½ΠΎΡΠΈΡΠΎΠ²Π°Π½Ρ Π·Π°Π³Π»ΡΡΠΊΠ°ΠΌΠΈ (placeholders) Π΄Π»Ρ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊ-ΡΠΈΠΏΠΎΠ², ΡΠ°ΠΊ ΠΆΠ΅ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΌΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄ Ρ Π·Π°Π³Π»ΡΡΠΊΠ°ΠΌΠΈ Π΄Π»Ρ ΡΠ°ΡΡΠ΅ΠΉ, ΠΎΡΠ½ΠΎΡΡΡΠΈΡ ΡΡ ΠΊ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΠΌ ΡΠΈΠΏΠ°ΠΌ. Π Π·Π°ΡΠ΅ΠΌ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΡΠ΅Π½Ρ Π±ΡΡΡΡΠΎ Π½Π°ΡΡΠ°ΠΌΠΏΠΎΠ²Π°ΡΡ ΡΡΠΈ ΡΠ°Π±Π»ΠΎΠ½Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ memcpy ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΏΠ°ΡΡΠ΅ΠΉ, ΡΠ»ΠΎΠ²Π½ΠΎ Π»ΠΈΠ½ΠΊΠΎΠ²ΡΠΈΠΊ! ΠΠ΅Π΄ΠΎΡΡΠ°ΡΠΊΠΎΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎ, ΡΡΠΎ ΠΌΠΎΠ½ΠΎΠΌΠΎΡΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΊΠΎΠΏΠΈΠΈ Π½Π΅Π»ΡΠ·Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΡΡΠΈ. ΠΠ΄Π½Π°ΠΊΠΎ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΠΎΡΡΡΡΡΡΠ²ΠΈΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Π΄ΡΠ±Π»ΠΈΠΊΠ°ΡΠΎΠ² ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΡΡ Π³ΠΎΡΠ°Π·Π΄ΠΎ Π±ΡΡΡΡΠ΅Π΅. ΠΡ Π΄Π°ΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡΠ΅Π²ΡΠ°ΡΠΈΡΡ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡ ΠΊΠΎΠ΄Π° Π² ΠΌΠ°Π»Π΅Π½ΡΠΊΠΈΠΉ JIT, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ Π²ΡΡΠ°Π²Π»ΡΡΡΡΡ Π² Π±ΠΈΠ½Π°ΡΠ½ΠΈΠΊΠΈ ΠΈ Π² Ρ ΠΎΠ΄Π΅ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΌΠΎΠ½ΠΎΠΌΠΎΡΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΊΠΎΠΏΠΈΠΈ, ΡΡΠΎΠ±Ρ Π½Π΅ ΡΠ°Π·Π΄ΡΠ²Π°ΡΡ ΡΠ°Π·ΠΌΠ΅ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ².
ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅, Ρ Π½Π΅ Π·Π½Π°Ρ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎ ΠΏΡΠΎΡΡΠΎ ΠΈΠ΄Π΅Ρ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΈΡΠ»Π° ΠΊΠΎ ΠΌΠ½Π΅ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΡΡΠ°ΡΡΠΈ, ΠΊΠ°ΠΊ Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ ΡΡΠΎΠΉ ΡΠ°ΠΊΡΠΎΠ½ΠΎΠΌΠΈΠΈ, Π½Π° ΡΡΠΎ Ρ ΠΈ Π½Π°Π΄Π΅ΡΠ»ΡΡ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΡΡΠΎΠΌΡ ΡΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΡ! Π― Π½Π°Π΄Π΅ΡΡΡ, ΡΡΠΎ ΡΡΠ° ΡΡΠ°ΡΡΡ Π΄Π°ΡΡ Π²Π°ΠΌ Π±ΠΎΠ»Π΅Π΅ ΡΠ΅ΡΠΊΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΎΠ² Π² ΡΠ°Π·Π½ΡΡ ΡΠ·ΡΠΊΠ°Ρ , ΠΈ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡΡ Π²ΠΏΠΈΡΠ°ΡΡΡΡ Π² Π΅Π΄ΠΈΠ½ΡΡ ΡΠ°ΠΊΡΠΎΠ½ΠΎΠΌΠΈΡ. Π’Π°ΠΊΠΆΠ΅ Π½Π°Π΄Π΅ΡΡΡ, ΡΡΠΎ ΡΡΠΎΡ ΡΠ΅ΠΊΡΡ ΠΏΠΎΠ±ΡΠ΄ΠΈΡ Π²Π°Ρ Π·Π°Π΄ΡΠΌΠ°ΡΡΡΡ ΠΎ ΡΠΎΠΌ, Π² ΠΊΠ°ΠΊΠΎΠΌ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΈ Π² ΡΠ°ΠΌΠΊΠ°Ρ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠ΄Π΅ΠΉ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΠΉΡΠΈ Π½ΠΎΠ²ΡΠ΅ ΠΊΠ»Π°ΡΡΠ½ΡΠ΅ ΡΠ·ΡΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
ΠΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΈ Π² TypeScript: ΡΠ°Π·Π±ΠΈΡΠ°Π΅ΠΌΡΡ Π²ΠΌΠ΅ΡΡΠ΅
ΠΡΠ΅ΠΌ ΠΏΡΠΈΠ²Π΅Ρ! ΠΠΎΠΌΠ°Π½Π΄Π° TestMace ΠΏΡΠ±Π»ΠΈΠΊΡΠ΅Ρ ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠΉ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ ΡΡΠ°ΡΡΠΈ ΠΈΠ· ΠΌΠΈΡΠ° web-ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ. ΠΠ° ΡΡΠΎΡ ΡΠ°Π· Π΄Π»Ρ Π½ΠΎΠ²ΠΈΡΠΊΠΎΠ²! ΠΡΠΈΡΡΠ½ΠΎΠ³ΠΎ ΡΡΠ΅Π½ΠΈΡ.
Π Π°Π·Π²Π΅Π΅ΠΌ ΠΏΠ΅Π»Π΅Π½Ρ ΡΠ°ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΡΡΠΈ ΠΈ Π½Π΅Π΄ΠΎΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ Π½Π°Π΄ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠΎΠΌ ΠΈ Π½Π°ΠΊΠΎΠ½Π΅Ρ ΠΏΠΎΠ΄ΡΡΠΆΠΈΠΌΡΡ Ρ Π½ΠΈΠΌ
ΠΠ°Π²Π΅ΡΠ½ΠΎΠ΅, ΡΠΎΠ»ΡΠΊΠΎ ΠΌΠ°ΡΡΡΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ Java ΠΈΠ»ΠΈ Π΄ΡΡΠ³ΠΈΡ ΡΡΡΠΎΠ³ΠΎ ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΡΠ·ΡΠΊΠΎΠ² Π½Π΅ Ρ Π»ΠΎΠΏΠ°ΡΡ Π³Π»Π°Π·Π°ΠΌΠΈ, ΡΠ²ΠΈΠ΄Π΅Π² Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊ Π² TypeScript. ΠΠ³ΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΠΊΠΎΡΠ΅Π½Π½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ Π²ΡΠ΅Π³ΠΎ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΌΡ ΠΏΡΠΈΠ²ΡΠΊΠ»ΠΈ Π²ΠΈΠ΄Π΅ΡΡ Π² JavaScript, ΠΏΠΎΡΡΠΎΠΌΡ ΡΠ°ΠΊ Π½Π΅ΠΏΡΠΎΡΡΠΎ ΡΡ ΠΎΠ΄Ρ Π΄ΠΎΠ³Π°Π΄Π°ΡΡΡΡ, ΡΡΠΎ ΠΎΠ½ Π²ΠΎΠΎΠ±ΡΠ΅ Π΄Π΅Π»Π°Π΅Ρ.
Π― Π±Ρ Ρ ΠΎΡΠ΅Π» ΠΏΠΎΠΊΠ°Π·Π°ΡΡ Π²Π°ΠΌ, ΡΡΠΎ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π²ΡΡ Π³ΠΎΡΠ°Π·Π΄ΠΎ ΠΏΡΠΎΡΠ΅, ΡΠ΅ΠΌ ΠΊΠ°ΠΆΠ΅ΡΡΡ. Π― Π΄ΠΎΠΊΠ°ΠΆΡ, ΡΡΠΎ Π΅ΡΠ»ΠΈ Π²Ρ ΡΠΏΠΎΡΠΎΠ±Π½Ρ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Π½Π° JavaScript ΡΡΠ½ΠΊΡΠΈΡ Ρ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ, ΡΠΎ Π²Ρ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΈ Π±Π΅Π· Π»ΠΈΡΠ½ΠΈΡ ΡΡΠΈΠ»ΠΈΠΉ. ΠΠΎΠ΅Ρ Π°Π»ΠΈ!
ΠΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΈ Π² TypeScript
Π Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ TypeScript ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅: «Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΈ β ΡΡΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ, ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΠ΅ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Ρ ΠΎΠ΄Π½ΠΈΠΌ, Π° Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΡΠΈΠΏΠ°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ ».
ΠΠ΄ΠΎΡΠΎΠ²ΠΎ! ΠΠ½Π°ΡΠΈΡ, ΠΎΡΠ½ΠΎΠ²Π½Π°Ρ ΠΈΠ΄Π΅Ρ ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π½Π°ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π½Π΅ΠΊΠΈΠ΅ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ, ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΠ΅ Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ ΡΠΈΠΏΠ°ΠΌΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π΅ΠΌΡΡ ΠΈΠΌ Π΄Π°Π½Π½ΡΡ . ΠΠΎ ΠΊΠ°ΠΊ ΡΡΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ? ΠΠΎΡ ΡΡΠΎ Ρ Π΄ΡΠΌΠ°Ρ.
ΠΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΈ ΠΈ ΡΠΈΠΏΡ ΡΠΎΠΎΡΠ½ΠΎΡΡΡΡΡ Π΄ΡΡΠ³ Ρ Π΄ΡΡΠ³ΠΎΠΌ, ΠΊΠ°ΠΊ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΡΠΎ ΡΠ°ΠΊΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠΎΠΎΠ±ΡΠΈΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌ (ΡΡΠ½ΠΊΡΠΈΡΠΌ, ΠΊΠ»Π°ΡΡΠ°ΠΌ ΠΈΠ»ΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°ΠΌ), ΠΊΠ°ΠΊΠΎΠΉ ΡΠΈΠΏ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠΈ ΠΈΡ Π²ΡΠ·ΠΎΠ²Π΅ ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠ·ΠΎΠ²Π° ΠΌΡ ΡΠΎΠΎΠ±ΡΠ°Π΅ΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠ°ΠΊΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ².
ΠΡΡΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡ ΡΡΠΎ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠ° ΡΠΎΠΆΠ΄Π΅ΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ. Π’ΠΎΠΆΠ΄Π΅ΡΡΠ²Π΅Π½Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ β ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΠ°Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π² Π½Π΅Ρ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°. Π JavaScript ΠΎΠ½Π° Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
Π‘Π΄Π΅Π»Π°Π΅ΠΌ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΎΠ½Π° ΡΠ°Π±ΠΎΡΠ°Π»Π° Ρ ΡΠΈΡΠ»Π°ΠΌΠΈ:
ΠΡΠ»ΠΈΡΠ½ΠΎ, ΠΌΡ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠΎΠΆΠ΄Π΅ΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠΈΠΏ, Π½ΠΎ Ρ ΠΎΡΠ΅Π»ΠΎΡΡ Π±Ρ, ΡΡΠΎΠ±Ρ ΠΎΠ½Π° Π±ΡΠ»Π° Π±ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠΎΠΉ ΠΈ ΡΡΠ°Π±Π°ΡΡΠ²Π°Π»Π° Π΄Π»Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π»ΡΠ±ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°, Π° Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΠΈΡΠ΅Π». ΠΠΌΠ΅Π½Π½ΠΎ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΈ Π½ΡΠΆΠ½Ρ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΈ. ΠΠ½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π»ΡΠ±ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° Π΄Π°Π½Π½ΡΡ Π½Π° Π²Ρ ΠΎΠ΄Π΅ ΠΈ, Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π½ΠΈΡ , ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²ΡΠ²Π°ΡΡ ΡΠ°ΠΌΡ ΡΡΠ½ΠΊΡΠΈΡ.
ΠΠΎΡΠΌΠΎΡΡΠΈΡΠ΅ Π½Π° Π²ΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ. Π’Π΅ΠΏΠ΅ΡΡ-ΡΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΎΠ² Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Π°Ρ ΠΏΡΠ³Π°ΡΡ. T ΠΈ U β ΡΡΠΎ ΠΏΡΠΎΡΡΠΎ ΠΈΠΌΠ΅Π½Π° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ , ΠΊΠΎΡΠΎΡΡΠ΅ Π²Ρ Π½Π°Π·Π½Π°ΡΠ°Π΅ΡΠ΅ ΡΠ°ΠΌΠΈ. ΠΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π²ΠΌΠ΅ΡΡΠΎ Π½ΠΈΡ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΡΡ ΡΠΈΠΏΡ, Ρ ΠΊΠΎΡΠΎΡΡΠΌΠΈ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π΄Π°Π½Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ.
ΠΠ»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½Π°Ρ Π²Π΅ΡΡΠΈΡ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΈ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΎΠ² ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΎΠ½ΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° Π΄Π°Π½Π½ΡΡ . ΠΠ° Π°Π½ΠΈΠΌΠ°ΡΠΈΠΈ Π½ΠΈΠΆΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ ΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π·Π°ΠΏΠΈΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΏΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΡΠΈΠΏΠ°.
ΠΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΈΠ΄Π΅ΡΡ, ΡΡΠ½ΠΊΡΠΈΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π»ΡΠ±ΠΎΠΉ ΡΠΈΠΏ, ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠΈΠΏΠΎΠ², ΠΊΠ°ΠΊ ΠΈ Π±ΡΠ»ΠΎ ΠΎΠ±Π΅ΡΠ°Π½ΠΎ Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ.
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ ΠΎΡΠΎΠ±ΠΎΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π²ΡΠΎΡΠΎΠΉ Π²ΡΠ·ΠΎΠ² console.log Π½Π° Π°Π½ΠΈΠΌΠ°ΡΠΈΠΈ Π²ΡΡΠ΅ β Π² Π½Π΅Π³ΠΎ Π½Π΅ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ ΡΠΈΠΏ. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ TypeScript ΠΏΠΎΠΏΡΡΠ°Π΅ΡΡΡ Π²ΡΡΠΈΡΠ»ΠΈΡΡ ΡΠΈΠΏ ΠΏΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΠΌ Π΄Π°Π½Π½ΡΠΌ.
ΠΠ±ΠΎΠ±ΡΡΠ½Π½ΡΠ΅ ΠΊΠ»Π°ΡΡΡ ΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ
ΠΠ°ΠΌ ΡΠΆΠ΅ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ, ΡΡΠΎ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΈ β ΡΡΠΎ Π²ΡΠ΅Π³ΠΎ Π»ΠΈΡΡ ΡΠΏΠΎΡΠΎΠ± ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΡΠΈΠΏΡ Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ. Π’ΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ Π²Ρ Π²ΠΈΠ΄Π΅Π»ΠΈ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ, ΠΈ Ρ ΠΌΠ΅Π½Ρ Ρ ΠΎΡΠΎΡΠΈΠ΅ Π½ΠΎΠ²ΠΎΡΡΠΈ: Ρ ΠΊΠ»Π°ΡΡΠ°ΠΌΠΈ ΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°ΠΌΠΈ ΠΎΠ½ΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠΎΡΠ½ΠΎ ΡΠ°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ ΡΠΈΠΏΠΎΠ² ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΠΎΡΠ»Π΅ ΠΈΠΌΠ΅Π½ΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΠΈΠ»ΠΈ ΠΊΠ»Π°ΡΡΠ°.
ΠΠΎΡΠΌΠΎΡΡΠΈΡΠ΅ Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ ΠΈ ΠΏΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ ΡΠ°ΠΌΠΈ. ΠΠ°Π΄Π΅ΡΡΡ, Ρ Π²Π°Ρ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΎΡΡ.
ΠΡΠ»ΠΈ ΠΊΠΎΠ΄ ΡΡΠ°Π·Ρ Π½Π΅ ΠΏΠΎΠ½ΡΡΠ΅Π½, ΠΏΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ ΠΎΡΡΠ»Π΅Π΄ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ type ΡΠ²Π΅ΡΡ Ρ Π²Π½ΠΈΠ· Π²ΠΏΠ»ΠΎΡΡ Π΄ΠΎ Π²ΡΠ·ΠΎΠ²ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΠΎΡΡΠ΄ΠΎΠΊ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ:
Π Π΅Π°Π»ΡΠ½ΡΠ΅ ΡΠ»ΡΡΠ°ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ: Π²ΡΡ ΠΎΠ΄ΠΈΠΌ Π·Π° ΡΠ°ΠΌΠΊΠΈ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΡΡ ΡΠΈΠΏΠΎΠ²
Π Π΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π±ΡΠ΄Π΅Ρ:
ΠΠΎΠ΄Π²Π΅Π΄Π΅ΠΌ ΠΈΡΠΎΠ³ΠΈ
ΠΠ°Π΄Π΅ΡΡΡ, Ρ ΠΏΠΎΠΌΠΎΠ³ Π²Π°ΠΌ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ Ρ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠ°ΠΌΠΈ. ΠΠ°ΠΏΠΎΠΌΠ½ΠΈΡΠ΅, Π²ΡΡ, ΡΡΠΎ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ, β ΡΡΠΎ Π²ΡΠ΅Π³ΠΎ Π»ΠΈΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ type Π² ΡΡΠ½ΠΊΡΠΈΡ π
ΠΡΠ»ΠΈ Ρ ΠΎΡΠΈΡΠ΅ Π΅ΡΡ ΠΏΠΎΡΠΈΡΠ°ΡΡ ΠΏΡΠΎ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΈ, Ρ ΠΏΡΠΈΠΊΡΠ΅ΠΏΠΈΠ» Π΄Π°Π»Π΅Π΅ ΠΏΠ°ΡΡ ΡΡΡΠ»ΠΎΠΊ.