python ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ Π² Π±Π°ΠΉΡ ΠΊΠΎΠ΄
ΠΠΎΠ³ΡΡΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΏΡΡΠΈΠ½Ρ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ° Python. Π§1
ΠΡ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΡΠΈΠΊΠ°: ΠΠ°Π²Π΅ΡΠ½ΠΎ Π²ΡΠ΅ΠΌ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ, ΡΡΠΎ Π²Π½ΡΡΡΠΈ Ρ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡ, ΡΡΠΎΡ ΠΈΠ½ΡΠ΅ΡΠ΅Ρ ΠΎΠ²Π»Π°Π΄Π΅Π» ΠΈ ΠΌΠ½ΠΎΠΉ, Π½ΠΎ Π³Π»Π°Π²Π½ΠΎΠ΅ Π½Π΅ ΡΡΠΎΠΏΠ°ΡΡ Π² Π½ΡΠΌ ΠΈ Π½Π΅ Π·Π°ΠΊΠΎΠΏΠ°ΡΡΡΡ ΡΠ°ΠΊ ΡΡΠΎ Π½Π΅ Π²ΡΠ»Π΅Π·ΡΠΈ. ΠΠ°ΠΉΠ΄Ρ Π΄Π»Ρ ΡΠ΅Π±Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠΉ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π», Ρ ΡΠ΅ΡΠΈΠ» Π·Π°Π±ΠΎΡΠ»ΠΈΠ²ΠΎ ΠΏΠ΅ΡΠ΅Π²Π΅ΡΡΠΈ Π΅Π³ΠΎ ΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ Ρ Π°Π±ΡΠΎΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²Ρ (ΠΌΠΎΡ ΠΏΠ΅ΡΠ²Π°Ρ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡ, ΠΏΡΠΎΡΡ Π½ΠΎΠ³Π°ΠΌΠΈ ΡΠΈΠ»ΡΠ½ΠΎ Π½Π΅ ΠΏΠΈΠ½Π°ΡΡ). Π’Π΅ΠΌ, ΠΊΠΎΠΌΡ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ΅Π½ ΠΊΠ°ΠΊ Python ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅, ΠΏΡΠΎΡΡ ΠΏΡΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ ΠΏΠΎΠ΄ ΠΊΠ°Ρ.
ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ ΡΡΠΈ ΠΌΠ΅ΡΡΡΠ° Ρ ΠΏΠΎΡΡΠ°ΡΠΈΠ» ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π½Π° byterun, ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ ΠΏΠΈΡΠΎΠ½ΠΎΠ²ΡΠΊΠΎΠ³ΠΎ Π±Π°ΠΉΡΠΊΠΎΠ΄Π°, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΠΎΠ³ΠΎ Π½Π° ΠΏΠΈΡΠΎΠ½Π΅. Π Π°Π±ΠΎΡΠ° Π½Π°Π΄ ΡΡΠΈΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠΌ Π±ΡΠ»Π° Π΄Π»Ρ ΠΌΠ΅Π½Ρ Π·Π°Ρ Π²Π°ΡΡΠ²Π°ΡΡΠ΅ Π²Π΅ΡΡΠ»ΠΎΠΉ ΠΈ ΠΏΠΎΠ·Π½Π°Π²Π°ΡΠ΅Π»ΡΠ½ΠΎΠΉ. Π― Π±ΡΠ» Π±Ρ ΡΠ°Π΄, Π΅ΡΠ»ΠΈ Π±Ρ Π²Ρ ΡΠΎΠΆΠ΅ Π΅Π³ΠΎ ΠΏΠΎΡΡΠΊΠ°Π»ΠΈ. ΠΠΎ ΠΏΡΠ΅ΠΆΠ΄Π΅ Π½Π°ΠΌ Π½Π°Π΄ΠΎ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΡΡΠ΅ΠΏΠ΅Π½ΠΈΡΡΡ, ΠΏΠΎΠ½ΡΡΡ ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ python, ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΌΡ Π·Π½Π°Π»ΠΈ, ΡΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΠΈ Ρ ΡΠ΅ΠΌ Π΅Π³ΠΎ Π΅Π΄ΡΡ.
Π― ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Ρ, ΡΡΠΎ Π²Ρ ΡΠ΅ΠΉΡΠ°Ρ Π² ΡΠΎΠΌ ΠΆΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, ΡΡΠΎ ΠΈ Ρ ΡΡΠΈ ΠΌΠ΅ΡΡΡΠ° Π½Π°Π·Π°Π΄. ΠΡ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΡΠ΅ python, Π½ΠΎ ΠΏΠΎΠ½ΡΡΠΈΡ Π½Π΅ ΠΈΠΌΠ΅Π΅ΡΠ΅ ΠΊΠ°ΠΊ ΠΎΠ½ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ.
ΠΠ΅Π±ΠΎΠ»ΡΡΠ°Ρ Π·Π°ΠΌΠ΅ΡΠΊΠ°: Π― ΡΠ°Π±ΠΎΡΠ°Ρ Ρ Π²Π΅ΡΡΠΈΠ΅ΠΉ 2.7 Π² ΡΡΠΎΠΌ ΠΏΠΎΡΡΠ΅. Π’ΡΠ΅ΡΡΡ Π²Π΅ΡΡΠΈΡ ΠΏΠΎΡΡΠΈ ΡΡ ΠΎΠΆΠ° ΡΠΎ Π²ΡΠΎΡΠΎΠΉ, Π΅ΡΡΡ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΠ΅ ΡΠ°Π·Π»ΠΈΡΠΈΡ Π² ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ ΠΈ Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΡΡ , Π½ΠΎ Π² ΡΠ΅Π»ΠΎΠΌ Π²ΡΡ ΡΠΎΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅.
ΠΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ python?
ΠΡ Π½Π°ΡΠ½ΡΠΌ Ρ ΠΎΡΠ΅Π½Ρ (ΠΎΡΠ΅Π½Ρ ΠΎΡΠ΅Π½Ρ) Π²ΡΡΠΎΠΊΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ Π²Π½ΡΡΡΠ΅Π½Π½Π΅ΠΉ ΡΠ°Π±ΠΎΡΡ. Π§ΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΊΠΎΠ³Π΄Π° Π²Ρ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΠ΅ ΠΊΠΎΠ΄ Π² Π²Π°ΡΠ΅ΠΌ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ΅?
ΠΠΎΠ΄Ρ ΠΈΠ΄ΡΡ, Π»Π΅Π΄ΡΠ½ΠΊΠΈ ΡΠ°ΡΡ, ΠΠΈΠ½ΡΡ Π’ΠΎΡΠ²Π°Π»ΡΠ΄Ρ ΠΏΠΈΠ»ΠΈΡ ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠ΅ ΡΠ΄ΡΠΎ, Π° 64 Π±ΠΈΡΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ Π±Π΅Π· ΡΡΡΠ°Π»ΠΈ ΡΡΡΠ΄ΠΈΡΡΡ, ΡΠ΅ΠΌ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΡΠ΅ΡΡΡΠ΅ ΡΠ°Π³Π°: Π»Π΅ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠΉ Π°Π½Π°Π»ΠΈΠ·, ΠΏΠ°ΡΡΠΈΠ½Π³, ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ ΠΈ Π½Π°ΠΊΠΎΠ½Π΅Ρ ΡΠ°ΠΊΠΈ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΈΡ. ΠΠ°ΡΡΠ΅Ρ Π·Π°Π±ΠΈΡΠ°Π΅Ρ ΡΠΊΠΎΡΠΌΠ»Π΅Π½Π½ΡΠ΅ Π΅ΠΌΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΈ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΡΡΡΡΠΊΡΡΡΡ ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΠ±ΡΡΡΠ½ΡΠ΅Ρ ΠΈΡ ΡΠ²ΡΠ·Ρ ΡΠΎΡΠΌΠΈΡΡΡ AST( ΠΠ±ΡΡΡΠ°ΠΊΡΠ½ΠΎΠ΅ Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΠ΅ΡΠ΅Π²ΠΎ). ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π·Π°ΡΠ΅ΠΌ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅Ρ AST Π² ΠΎΠ΄Π½ΠΈ (ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ) ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΊΠΎΠ΄Π° (Π±Π°ΠΉΡΠΊΠΎΠ΄ + ΠΎΠ±Π²ΡΠ·ΠΊΠ°). ΠΠΎΡΠΎΠΌ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ.
Π― Π½Π΅ ΡΠΎΠ±ΠΈΡΠ°ΡΡΡ Π³ΠΎΠ²ΠΎΡΠΈΡΡ ΠΎΠ± Π»Π΅ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠΌ Π°Π½Π°Π»ΠΈΠ·Π΅, ΠΏΠ°ΡΡΠΈΠ½Π³Π΅ ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΡΠ΅Π³ΠΎΠ΄Π½Ρ, Π½Π°Π²Π΅ΡΠ½ΠΎ ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Ρ ΡΠ°ΠΌ ΠΏΡΠΎ ΡΡΠΈ Π²Π΅ΡΠΈ Π½ΠΈ ΡΠ΅Π³ΠΎ Π½Π΅ Π·Π½Π°Ρ, Π½ΠΎ Π½Π΅ ΡΠ½ΡΠ²Π°ΠΉΡΠ΅: Π²Ρ Π²ΡΠ΅Π³Π΄Π° ΡΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΠ·ΡΡΠΈΡΡ ΡΡΠΎ, ΠΏΠΎΡΡΠ°ΡΠΈΠ² ΡΠ°ΡΠΎΠ² ΡΡΠ°ΠΊ ΠΏΡΡΡΠ΄Π΅ΡΡΡ. ΠΡ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΡΡΠΎ ΡΡΠΈ ΡΠ°Π³ΠΈ ΠΏΡΠΎΡΠ»ΠΈ Ρ ΠΎΡΠΎΡΠΎ ΠΈ ΡΡΠΏΠ΅ΡΠ½ΠΎ, ΠΈ Ρ Π½Π°Ρ Π΅ΡΡΡ Π½Π° ΡΡΠΊΠ°Ρ ΠΎΠ±ΡΠ΅ΠΊΡΡ python ΠΊΠΎΠ΄Π°.
ΠΠ΅ΡΠ΅Π΄ ΡΠ΅ΠΌ ΠΊΠ°ΠΊ ΠΏΡΠΈΡΡΡΠΏΠΈΡΡ ΠΊ Π΄Π΅Π»Ρ, Ρ Ρ ΠΎΡΡ ΡΠ΄Π΅Π»Π°ΡΡ Π½Π΅Π±ΠΎΠ»ΡΡΡΡ ΡΠ΅ΠΌΠ°ΡΠΊΡ: Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠΎΠΏΠΈΠΊΠ΅ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ Π³ΠΎΠ²ΠΎΡΠΈΡΡ ΠΎΠ± ΠΎΠ±ΡΠ΅ΠΊΡΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡΡ , ΠΎΠ±ΡΠ΅ΠΊΡΠ°Ρ ΠΊΠΎΠ΄Π°, ΠΈ Π±Π°ΠΉΡΠΊΠΎΠ΄Π΅. ΠΡΠΎ Π²ΡΡ ΡΠ°Π·Π½ΡΠ΅ Π²Π΅ΡΠΈ. ΠΠ°Π²Π°ΠΉΡΠ΅ Π½Π°ΡΠ½ΡΠΌ Ρ ΡΡΠ½ΠΊΡΠΈΠΉ. ΠΠ°ΠΌ Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π²Π½ΠΈΠΊΠ°ΡΡ Π³Π»ΡΠ±ΠΎΠΊΠΎ Π² Π½ΠΈΡ , ΡΡΠΎΠ±Ρ Π΄ΠΎΠ±ΡΠ°ΡΡΡΡ Π΄ΠΎ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ°, Π½ΠΎ Ρ ΠΏΡΠΎΡΡΠΎ Ρ ΠΎΡΡ ΠΏΡΠΎΡΡΠ½ΠΈΡΡ, ΡΡΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΊΠΎΠ΄Π° β ΡΡΠΎ Π΄Π²Π΅ Π±ΠΎΠ»ΡΡΠΈΠ΅ ΡΠ°Π·Π½ΠΈΡΡ, Π° ΠΎΠ±ΡΠ΅ΠΊΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ β ΡΠ°ΠΌΡΠ΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠ΅.
ΠΠ±ΡΠ΅ΠΊΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ
ΠΡ Π½Π°Π²Π΅ΡΠ½ΠΎ ΠΌΠΎΠ³Π»ΠΈ ΡΠ»ΡΡΠ°ΡΡ ΠΏΡΠΎ Β«ΠΎΠ±ΡΠ΅ΠΊΡΡ ΡΡΠ½ΠΊΡΠΈΠΈΒ». ΠΡΠΎ Π²Π΅ΡΠΈ ΠΊΠΎΡΠΎΡΡΠ΅ Π»ΡΠ΄ΠΈ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°ΡΡ ΠΊΠΎΠ³Π΄Π° Π³ΠΎΠ²ΠΎΡΡΡ: Β«Π€ΡΠ½ΠΊΡΠΈΠΈ β ΡΡΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°Β». ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΈΠ·ΡΡΠΈΠΌ ΠΈΡ ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅:
Β«Π€ΡΠ½ΠΊΡΠΈΠΈ ΡΡΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°Β» ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ β ΡΡΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΡΠ°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ ΡΠΏΠΈΡΠΎΠΊ ΡΡΠΎ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΈΠ»ΠΈ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ MyObject ΡΡΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΡ. Π Π°Π· foo ΡΡΠΎ ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Ρ Π΅Π³ΠΎ Π½Π΅ Π²ΡΠΏΠΎΠ»Π½ΡΡ Π΅Π³ΠΎ (Π² ΡΡΠΎΠΌ ΠΈ Π΅ΡΡΡ ΡΠ°Π·Π½ΠΈΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ foo() ΠΈ foo). ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡΠ΅Π΄Π°ΡΡ foo ΠΊΠ°ΠΊ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Π² Π΄ΡΡΠ³ΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΈΠ»ΠΈ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡΠΈΡΠ²ΠΎΠΈΡΡ Π΅Π³ΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ.
ΠΠ°Π²Π°ΠΉΡΠ΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ Π½Π° foo ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅ΠΉ:
ΠΠ°ΠΊ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΠΈΠ΄Π΅ΡΡ Π² Π²ΡΡΠ΅ ΠΏΡΠΈΠ²Π΅Π΄ΡΠ½Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅, ΠΎΠ±ΡΠ΅ΠΊΡ ΠΊΠΎΠ΄Π° ΡΡΠΎ Π°ΡΡΠΈΠ±ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΠ±ΡΠ΅ΠΊΡ ΠΊΠΎΠ΄Π° Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΡΡΡ ΠΏΠΈΡΠΎΠ½ΠΎΠ²ΡΠΊΠΈΠΌ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ ΠΈ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ, ΠΎΠ½ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ°. ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ Π½Π° Π°ΡΡΠΈΠ±ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΊΠΎΠ΄Π°:
ΠΠ΄Π΅ΡΡ ΡΠ΅Π»Π°Ρ ΠΊΡΡΠ° Π½ΠΈΡΡΡΠΊΠΎΠ², Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ Π½ΠΌ ΡΠ΅ΠΉΡΠ°Ρ Π½Π΅ Π½ΡΠΆΠ½ΠΎ. ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΡΠΈ Π°ΡΡΠΈΠ±ΡΡΠ° ΠΎΠ±ΡΠ΅ΠΊΡΠ° foo.
ΠΠΎΡ ΡΡΠΎ Π·Π΄Π΅ΡΡ Π΅ΡΡΡ: ΠΈΠΌΠ΅Π½Π° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΈ ΠΊΠΎΠ½ΡΡΠ°Π½Ρ ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π² Π½Π°ΡΠ΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ². ΠΠΎ ΠΌΡ Π²ΡΡ Π΅ΡΡ Π½Π΅ Π²ΠΈΠ΄ΠΈΠΌ Π½ΠΈ ΡΠ΅Π³ΠΎ ΡΡΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΠΏΠΎΡ ΠΎΠΆΠ΅ Π½Π° ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ. ΠΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π½Π°Π·ΡΠ²Π°ΡΡ Π±Π°ΠΉΡΠΊΠΎΠ΄ΠΎΠΌ ΡΡΡΠ»ΠΊΠ°, ΠΊΡΡΠ°ΡΠΈ ΡΡΠΎ Π°ΡΡΠΈΠ±ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΊΠΎΠ΄Π°:
ΠΠ°ΠΏΠΎΠΌΠΈΠ½Π°Ρ ΡΡΠΎ Π±Π°ΠΉΡΠΊΠΎΠ΄ ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΊΠΎΠ΄Π° ΡΡΠΎ Π½Π΅ ΠΎΠ΄Π½ΠΎ ΠΈ ΡΠΎΠΆΠ΅. ΠΠ°ΠΉΡΠΊΠΎΠ΄ ΡΡΠΎ Π°ΡΡΠΈΠ±ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΊΠΎΠ΄Π° ΠΏΠΎΠΌΠΈΠΌΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ Π΄ΡΡΠ³ΠΈΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ². Π’Π°ΠΊ ΡΡΠΎ ΠΆΠ΅ ΡΠ°ΠΊΠΎΠ΅ Π±Π°ΠΉΡΠΊΠΎΠ΄? ΠΡ ΡΡΠΎ ΠΏΡΠΎΡΡΠΎ Π½Π°Π±ΠΎΡ Π±Π°ΠΉΡ. ΠΠ½ΠΈ Π²ΡΠ³Π»ΡΠ΄ΡΡ ΡΡΡΠ°Π½Π½ΠΎ ΠΊΠΎΠ³Π΄Π° ΠΌΡ ΠΈΡ ΠΏΠ΅ΡΠ°ΡΠ°Π΅ΠΌ ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌ Π±Π°ΠΉΡΠΎΠΌ ΡΠΎΠΏΠΎΡΡΠ°Π²ΠΈΠΌΡ ΡΠΈΠΌΠ²ΠΎΠ»Ρ Π° Π΄ΡΡΠ³ΠΈΠΌ Π½Π΅Ρ, Π΄Π°Π²Π°ΠΉΡΠ΅ Π²ΡΠ²Π΅Π΄Π΅ΠΌ ΠΈΡ ΠΊΠ°ΠΊ ΡΠΈΡΠ»Π°.
ΠΠΎΡ Π±Π°ΠΉΡΡ ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ²ΠΎΡΡΡ Π²ΡΡ ΠΌΠ°Π³ΠΈΡ. ΠΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ ΠΈ Π±Π΅Π·ΡΡΡΠ°Π½Π½ΠΎ Π²ΡΠ±ΠΈΡΠ°ΡΡ Π±Π°ΠΉΡΡ, ΡΠΌΠΎΡΡΠ΅ΡΡ ΠΊΠ°ΠΊΠΈΠ΅ ΠΎΠ½ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΈ Ρ ΠΊΠ°ΠΊΠΈΠΌΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ ΠΈ ΠΈΡΠΏΠΎΠ»Π½ΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ. ΠΠ»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΠΏΠΎΠΉΡΠΈ Π΅ΡΡ Π΄Π°Π»ΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ Cpython Π° ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎ ceval.c ΡΡΠΎ ΠΌΡ ΡΠ΄Π΅Π»Π°Π΅ΠΌ ΠΏΠΎΠ·Π΄Π½Π΅Π΅.
ΠΠΈΠ·Π°ΡΡΠ΅ΠΌΠ±Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π±Π°ΠΉΡΠΊΠΎΠ΄Π°
ΠΠΈΠ·Π°ΡΡΠ΅ΠΌΠ±Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ Π²Π·ΡΡΡ Π²ΡΠ΅ ΡΡΠΈ Π±Π°ΠΉΡΡ ΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ ΠΈΡ Π²ΠΎ ΡΡΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ, ΡΡΠΎ ΠΌΡ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊΠΈ ΡΠΏΠΎΡΠΎΠ±Π½Ρ ΠΏΠΎΠ½ΡΡΡ. ΠΡΠΎ Π½Π΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΌ ΡΠΈΠΊΠ»Π΅ ΠΏΠΈΡΠΎΠ½Π°. Π‘Π΅Π³ΠΎΠ΄Π½Ρ Π΄Π»Ρ ΡΡΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ Π΅ΡΡΡ ΠΎΡΠ»ΠΈΡΠ½ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ β ΠΌΠΎΠ΄ΡΠ»Ρ dis. ΠΡ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ dis.dis ΡΡΠΎΠ±Ρ ΠΏΡΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠΎ Π΄Π΅Π»Π°Π΅Ρ Π½Π°ΡΠ° foo.
ΠΠ΅ΡΠ²ΡΠΉ Π½ΠΎΠΌΠ΅Ρ ΡΡΠΎ ΡΡΡΠΎΠΊΠ° ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ python ΠΊΠΎΠ΄Π°, Π²ΡΠΎΡΠΎΠΉ Π½ΠΎΠΌΠ΅Ρ ΡΡΠΎ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ Π²Π½ΡΡΡΠΈ Π±Π°ΠΉΡΠΊΠΎΠ΄Π°: LOAD_CONST Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π½Π° ΠΏΠΎΠ·ΠΈΡΠΈΠΈ 0, Π° STORE_FAST Π½Π° ΠΏΠΎΠ·ΠΈΡΠΈΠΈ 3 ΠΈ ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅. Π‘ΡΠ΅Π΄Π½ΡΡ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ° ΡΡΠΎ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΡΠ°ΠΌΠΎΠΉ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ, ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ Π΄Π²Π΅ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ Π΄Π°ΡΡ ΠΏΠΎΠ½ΡΡΠΈΠ΅ ΠΎΠ± Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ (Π΅Π»ΠΈ ΠΎΠ½ΠΈ Π΅ΡΡΡ), ΡΠ΅ΡΠ²Π΅ΡΡΠ°Ρ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ° ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΡΠ°ΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΠΈΠ½Π΄Π΅ΠΊΡ Π² Π΄ΡΡΠ³ΠΈΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΊΠΎΠ΄Π°. Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ Π΄Π»Ρ LOAD_CONST ΡΡΠΎ ΠΈΠ½Π΄Π΅ΠΊΡ Π² ΡΠΏΠΈΡΠΊΠ΅ co_consts, Π° Π°ΡΠ³ΡΠΌΠ΅Π½Ρ Π΄Π»Ρ STORE_FAST ΡΡΠΎ ΠΈΠ½Π΄Π΅ΠΊΡ Π² co_varnames, Π² ΠΏΡΡΠΎΠΉ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ΅ Π²ΡΠ²ΠΎΠ΄ΡΡΡΡ ΠΈΠΌΠ΅Π½Π° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΈΠ»ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΡΠ°Π½Ρ. ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ Ρ Π»Π΅Π³ΠΊΠΎΡΡΡΡ ΡΡΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ:
ΠΡΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΎΠ±ΡΡΡΠ½ΡΠ΅Ρ Π²ΡΠΎΡΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ STORE_FAST ΠΊΠΎΡΠΎΡΠ°Ρ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ ΠΏΠΎ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ 3 Π² Π±Π°ΠΉΡΠΊΠΎΠ΄Π΅. ΠΡΠ»ΠΈ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ ΠΈΠΌΠ΅Π΅Ρ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π΄Π²Π° Π±Π°ΠΉΡΠ° ΠΈ Π΅ΡΡΡ ΡΡΠΎΡ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ. Π Π°Π±ΠΎΡΠ° ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ° ΠΊΠ°ΠΊ ΡΠ°Π· ΡΠ°ΠΊΠΈ Π² ΡΠΎΠΌ ΡΡΠΎΠ±Ρ Π½Π΅ Π·Π°ΠΏΡΡΠ°Π΅ΡΡΡ ΠΈ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡΡ ΡΠ΅ΡΡΡ ΡΠ°Π·ΡΠΌΠ½ΠΎΠ΅, Π΄ΠΎΠ±ΡΠΎΠ΅, Π²Π΅ΡΠ½ΠΎΠ΅. (Π²Ρ ΠΌΠΎΠ³Π»ΠΈ Π·Π°ΠΌΠ΅ΡΠΈΡΡ ΡΡΠΎ BINARY_ADD Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ², Π½Π΅ Π²ΠΎΠ»Π½ΡΠΉΡΠ΅ΡΡ ΠΌΡ Π΅ΡΡ Π²Π΅ΡΠ½Π΅ΠΌΡΡ ΠΊ ΡΡΠΎΠΌΡ)
ΠΡΠ»Π° ΠΎΠ΄Π½Π° Π²Π΅ΡΡ ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ΄ΠΈΠ²Π»ΡΠ»Π° ΠΌΠ΅Π½Ρ ΠΊΠΎΠ³Π΄Π° Ρ Π½Π°ΡΠ΅Π» ΡΠ°Π·Π±ΠΈΡΠ°ΡΡΡΡ Π² ΡΠΎΠΌ ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ python, ΠΊΠ°ΠΊ python ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠΌ, Π΅ΡΠ»ΠΈ ΠΎΠ½ Π΅ΡΡ ΠΈ Β«ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡΒ»? ΠΠ±ΡΡΠ½ΠΎ ΡΡΠΈ Π΄Π²Π° ΡΠ»ΠΎΠ²Π° Β«Π°Π½ΡΠΎΠ½ΠΈΠΌΡΒ», Π΅ΡΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠ·ΡΠΊΠΈ ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Python, Ruby, ΠΈ Javascript, Π° Π΅ΡΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌΡΠ΅ ΡΠ°ΠΊΠΈ ΠΊΠ°ΠΊ C, Java, ΠΈ Haskell.
ΠΠΎΠ³Π΄Π° Π»ΡΠ΄ΠΈ Π³ΠΎΠ²ΠΎΡΡΡ ΠΎΠ± ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌΡΡ ΡΠ·ΡΠΊΠ°Ρ ΠΎΠ½ΠΈ ΠΈΠΌΠ΅ΡΡ Π²Π²ΠΈΠ΄Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ Π² Π½Π°ΡΠΈΠ²Π½ΡΠ΅ x86/ARM/etc ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ. ΠΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΡΠ΅ΠΌΡΠΉ ΡΠ·ΡΠΊ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π²ΠΎΠΎΠ±ΡΠ΅, ΡΠ°Π·Π²Π΅ ΡΡΠΎ ΡΠΎΠ»ΡΠΊΠΎ Β«ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡΒ» Π½Π° Π»Π΅ΡΡ Π² Π±Π°ΠΉΡΠΊΠΎΠ΄. ΠΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ ΠΏΠΈΡΠΎΠ½Π° ΡΠ°Π·Π±ΠΈΡΠ°Π΅Ρ Π±Π°ΠΉΡΠΊΠΎΠ΄ ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ Π΅Π³ΠΎ Π²Π½ΡΡΡΠΈ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ, ΡΡΠΎ ΠΊΡΡΠ°ΡΠΈ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ°Π±ΠΎΡΡ, Π½ΠΎ ΠΌΡ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ ΠΎΠ± ΡΡΠΎΠΌ ΠΏΠΎΠ·Π΄Π½Π΅Π΅.
ΠΠ»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ Π±ΡΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠΌ Π½Π°Π΄ΠΎ Π±ΡΡΡ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΡΠΌ, Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ ΡΡΠΎ ΡΡΠΎ Π·Π½Π°ΡΠΈΡ:
ΠΡΠ° Π΄ΠΈΠ·Π°ΡΡΠ΅ΠΌΠ±Π»ΠΈΡΠΎΠ²Π°Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ Π² Π±Π°ΠΉΡΠΊΠΎΠ΄Π΅. Π ΡΠΎΠΌΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΊΠ°ΠΊ ΠΌΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΏΡΠΈΠ³Π»Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΡ modus Π±ΡΠ»Π° ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π° ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΊΠΎΡΠ΄Π° Π±ΡΠ» ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½. ΠΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π²Π½Π΅Π·Π°ΠΏΠ½ΠΎ, Π½ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΎΡΡΠ°ΡΠΊΠ° ΠΎΡ Π΄Π΅Π»Π΅Π½ΠΈΡ % (ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ modulus) ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅ΡΡΡ Π² BINARY_MODULO. ΠΠΎΡ ΠΎΠΆΠ΅ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ ΡΠΈΡΠ΅Π»:
ΠΠ΅ΠΏΠ»ΠΎΡ ΠΎ, Π° ΡΡΠΎ Π΅ΡΠ»ΠΈ ΠΌΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π΄ΠΈΠΌ ΡΡΠΎ ΡΠΎ Π΄ΡΡΠ³ΠΎΠ΅, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΡΡΡΠΎΠΊΡ.
ΠΠΏΠ°Π½Π°, ΡΡΠΎ ΡΡΠΎ ΡΡΡ? ΠΡ Π½Π°Π²Π΅ΡΠ½ΠΎ ΡΠΆΠ΅ Π²ΠΈΠ΄Π΅Π»ΠΈ ΡΡΠΎ ΡΠ°Π½ΡΡΠ΅:
ΠΠΎΠ³Π΄Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ BINARY_MODULO Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π΄Π»Ρ Π΄Π²ΡΡ ΡΡΡΠΎΠΊ ΠΎΠ½Π° Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΡ ΡΡΡΠΎΠΊ Π²ΠΌΠ΅ΡΡΠΎ ΠΎΡΡΠ°ΡΠΊΠ° ΠΎΡ Π΄Π΅Π»Π΅Π½ΠΈΡ. ΠΡΠ° ΡΠΈΡΡΠ°ΡΠΈΡ ΠΎΡΠ»ΠΈΡΠ½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΠΈ. ΠΠΎΠ³Π΄Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΊΠΎΠ΄Π° Π΄Π»Ρ modulus ΠΎΠ½ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ ΠΏΠΎΠ½ΡΡΠΈΡ ΡΡΠΎ ΡΠ°ΠΊΠΎΠ΅ x ΠΈ y, ΡΡΡΠΎΠΊΠΈ Π»ΠΈ ΠΎΠ½ΠΈ ΠΈΠ»ΠΈ ΡΠΈΡΠ»Π° ΠΈΠ»ΠΈ ΡΡΠΎ-ΡΠΎ Π΅ΡΡ. ΠΠ½ ΠΏΡΠΎΡΡΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ: Π·Π°Π³ΡΡΠ·ΠΈΡΡ ΠΎΠ΄Π½Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π΅Π½Π½ΡΡ, Π·Π°Π³ΡΡΠ·ΠΈΡΡ Π΄ΡΡΠ³ΡΡ, Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΏΡΠ΅ΠΏΠ°ΡΠ°ΡΠΈΡ Π±ΠΈΠ½Π°ΡΠ½ΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ, Π²Π΅ΡΠ½ΡΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ. Π Π°Π±ΠΎΡΠ° ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ° Π² ΡΠΎΠΌ ΡΡΠΎΠ±Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ ΡΡΠΎ BINARY_MODULO Π·Π½Π°ΡΠΈΡ Π² ΡΠ΅ΠΊΡΡΠ΅ΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅. ΠΠ°ΡΠ° ΡΡΠ½ΠΊΡΠΈΡ modulus ΠΌΠΎΠΆΠ΅Ρ ΡΡΠΈΡΠ°ΡΡ ΠΎΡΡΠ°ΡΠΎΠΊ, ΠΏΠΎΠ΄ΡΡΠ°Π²Π»ΡΡΡ ΡΡΡΠΎΠΊΠΈβ¦ ΠΌΠΎΠΆΠ΅Ρ ΡΡΠΎ-ΡΠΎ Π΅ΡΡ? ΠΡΠ»ΠΈ ΠΌΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠΌ ΠΊΠ»Π°ΡΡ Ρ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ __mod__ ΡΠΎ ΠΌΡ ΡΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ ΡΠ³ΠΎΠ΄Π½ΠΎ.
ΠΠ΄Π½Π° ΠΈ ΡΠ° ΠΆΠ΅ ΡΡΠ½ΠΊΡΠΈΡ Ρ ΠΎΠ΄Π½ΠΈΠΌ ΠΈ ΡΠ΅ΠΌ ΠΆΠ΅ Π±Π°ΠΉΡΠΊΠΎΠ΄ΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΡΠ°Π·Π½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠΈΠΏΠ° ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°. Π’Π°ΠΊΠΆΠ΅ ΡΡΠ½ΠΊΡΠΈΡ modulus ΠΌΠΎΠΆΠ΅Ρ Π²ΠΎΠ·Π±ΡΠ΄ΠΈΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ° TypeError Π΅ΡΠ»ΠΈ ΠΌΡ Π²ΡΠ·ΠΎΠ²Π΅ΠΌ Π΅Π³ΠΎ Π΄Π»Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ.
ΠΡΠΎ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΏΡΠΈΡΠΈΠ½ ΡΠΎΠ³ΠΎ, ΠΏΠΎΡΠ΅ΠΌΡ ΡΡΡΠ΄Π½ΠΎ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ python. ΠΡ Π½Π΅ Π·Π½Π°Π΅ΡΠ΅, ΠΊΠΎΠ³Π΄Π° Π²Ρ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΡΠ΅ ΠΊΠΎΠ΄ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΈ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄, ΡΡΠΎ Π·Π° ΠΎΠ±ΡΠ΅ΠΊΡΡ Π±ΡΠ΄ΡΡ Π² ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΌ ΠΈΡΠΎΠ³Π΅. Russell Power ΠΈ Alex Rubinsteyn Π½Π°ΠΏΠΈΡΠ°Π»ΠΈ ΡΡΠ°ΡΡΡ Β«ΠΊΠ°ΠΊ Π±ΡΡΡΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ pythonΒ», ΡΡΠΎ ΡΡΠ°ΡΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅Π»ΡΠ½Π°Ρ.
ΠΠ° ΡΠ΅Π³ΠΎΠ΄Π½Ρ ΠΏΠΎΠΊΠ° Π²ΡΠ΅. ΠΡΠΈΠ³ΠΈΠ½Π°Π» ΡΡΠ°ΡΡΠΈ ΡΡΡ. ΠΡΠΎΡΡ ΠΏΡΠΎΡΠ΅Π½ΠΈΡ Π·Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ Ρ.ΠΊ. ΠΎΡ ΠΏΡΠΈΡΠΎΠ΄Ρ ΠΎΠ±Π»Π°Π΄Π°Ρ Π²ΡΠΎΠΆΠ΄ΡΠ½Π½ΠΎΠΉ Π±Π΅Π·Π³ΡΠ°ΠΌΠΎΡΠ½ΠΎΡΡΡΡ ΠΈ Π²ΡΠ½ΡΠΆΠ΄Π΅Π½ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΌΠ°ΡΠΈΠ½Π½ΡΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠ΅ΠΊΡΡΠ°.
Π Π΅Π°Π»ΠΈΠ·ΡΠ΅ΠΌ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΠΊΠΎΠ΄Π° Π½Π° Python
Π‘Π΅Π³ΠΎΠ΄Π½Ρ ΠΌΡ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅ΠΌ Π²Π°ΠΌ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ ΡΡΠ°ΡΡΠΈ, Π·Π°ΡΡΠ°Π³ΠΈΠ²Π°ΡΡΠ΅ΠΉ Π½Π΅ ΡΠ°ΠΌΡΡ ΠΎΠ±ΡΡΠΆΠ΄Π°Π΅ΠΌΡΡ ΡΠ΅ΠΌΡ: ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ ΠΊΠΎΠ΄Π° Π² Python, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ: ΡΠ°Π±ΠΎΡΡ Ρ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΡΠΌ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΌ Π΄Π΅ΡΠ΅Π²ΠΎΠΌ (AST) ΠΈ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄ΠΎΠΌ. ΠΡΠΈΡΠΎΠΌ, ΡΡΠΎ Python ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΡΠ΅ΠΌΡΠΌ ΡΠ·ΡΠΊΠΎΠΌ, ΡΠ°ΠΊΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π² Π½Π΅ΠΌ ΡΡΠ΅Π·Π²ΡΡΠ°ΠΉΠ½ΠΎ Π²Π°ΠΆΠ½Ρ Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ. Π Π½ΠΈΡ ΠΌΡ ΡΠ΅Π³ΠΎΠ΄Π½Ρ ΠΈ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ.
ΠΡ ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡΠ΄Ρ Π·Π°Π΄ΡΠΌΡΠ²Π°Π»ΠΈΡΡ, ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΡΠ΅Ρ Π²Π°Ρ ΠΊΠΎΠ΄, ΡΡΠΎΠ±Ρ ΠΎΠ½ ΡΠ°Π±ΠΎΡΠ°Π» Π±ΡΡΡΡΠ΅Π΅? Π₯ΠΎΡΠΈΡΠ΅ ΡΠ·Π½Π°ΡΡ, ΡΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΠΎΠ΅ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π΄Π΅ΡΠ΅Π²ΠΎ (AST) ΠΈ Π΄Π»Ρ ΡΠ΅Π³ΠΎ ΠΎΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ?
Π ΡΡΠΎΠΉ ΠΎΠ±Π·ΠΎΡΠ½ΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ΡΠ°ΡΡΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ ΠΊΠΎΠ΄ Python ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅ΡΡΡ Π² Π΄ΡΠ΅Π²ΠΎΠ²ΠΈΠ΄Π½ΡΡ ΡΠΎΡΠΌΡ (AST). Π‘ΠΎΠΎΡΡΠ΄ΠΈΠ² AST Π²Π°ΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π²Ρ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ ΠΊ ΠΏΠΎΠΈΡΠΊΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ Π²Π°ΡΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π°. ΠΠ΄Π½Π°ΠΊΠΎ ΡΡΡΠΈΡΠ΅, ΡΡΠΎ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ Python Π½Π΅ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½ΡΠΌΠΈ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ»ΠΎΠΆΠ½Π°.
ΠΠΎΠ΄ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΊΠ°ΠΊ Π΄Π΅ΡΠ΅Π²ΠΎ
ΠΠ°ΠΊ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΡ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ ΠΎΠ½ Π²ΡΡΠΈΡΠ»ΡΠ΅Ρ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΈΠ· Π²Π°ΡΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π° Π² ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅?
ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΎΠ½ ΡΠ½Π°ΡΠ°Π»Π° ΠΏΠ΅ΡΠ΅Π΄Π΅Π»ΡΠ²Π°Π΅Ρ ΠΊΠΎΠ΄ Π²Π°ΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π² Π΄ΡΠ΅Π²ΠΎΠ²ΠΈΠ΄Π½ΡΡ ΡΡΡΡΠΊΡΡΡΡ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ AST.
Π Python ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π° ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ Π½ΠΎΡΠ°ΡΠΈΠΈ (ΡΠ½Π°ΡΠ°Π»Π° ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π·Π°ΡΠ΅ΠΌ ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅). Π§ΡΠΎΠ±Ρ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ ΠΏΠ΅ΡΠ΅ΠΏΡΡΠ°ΡΡ Ρ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΎΠΌ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ², Π² Python ΡΠ½Π°ΡΠ°Π»Π° ΡΡΡΠΎΠΈΡΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠ°ΠΊΠΎΠ΅ Π΄Π΅ΡΠ΅Π²ΠΎ, ΠΊΠ°ΠΊ Π½Π° ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΉ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠ΅. ΠΠ±ΡΠ°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ β ΡΡΠΎ ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ (Ρ ΠΊΠΎΡΠ½Ρ Π΄Π΅ΡΠ΅Π²Π°), ΠΈ, ΡΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ Π»Π΅Π²Π°Ρ ΡΠ°ΡΡΡ ΡΡΠΎΠΉ ΡΡΠΌΠΌΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΠΎΠ±ΡΡΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ, ΡΠΏΡΠ°Π²Π° ΠΌΡ ΠΈΠΌΠ΅Π΅ΠΌ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅. Π Π΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠ°Ρ ΡΡΡΡΠΊΡΡΡΠ° Π΄Π°Π½Π½ΡΡ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ°ΠΊ:
BinOp ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ Binary Operation (ΠΠΈΠ½Π°ΡΠ½Π°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ) ΠΈ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° ΡΠΎ, ΡΡΠΎ Π² ΡΠ°ΠΊΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΡ ΠΊΠ°ΠΊ ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ β ΠΏΠΎ Π΄Π²Π° ΠΎΠΏΠ΅ΡΠ°Π½Π΄Π°. ΠΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ, Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Ρ Π²Π°Ρ Π½Π΅ ΠΏΠΎΠ»ΡΡΠΈΡΡΡ, Π΅ΡΠ»ΠΈ Π² ΠΏΡΠ°Π²ΠΎΠΉ ΡΠ°ΡΡΠΈ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ β ΠΏΠΎΡΡΠΎΠΌΡ ΡΠ½Π°ΡΠ°Π»Π° Π½ΡΠΆΠ½ΠΎ ΠΏΡΠΎΠΈΠ·Π²Π΅ΡΡΠΈ ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅.
ΠΠ΄Π½Π°ΠΊΠΎ Π²Ρ Π·Π°ΠΌΠ΅ΡΠΈΡΠ΅, ΡΡΠΎ Π² AST, ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ Python, Π±ΡΠ΄ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠ·Π»Ρ ΠΈ ΠΏΠΎΠ»Ρ, Π° Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡΡ ΠΎΠ½ΠΎ Π±ΡΠ΄Π΅Ρ Π² ΠΎΠ΄Π½Ρ ΡΡΡΠΎΠΊΡ, ΠΈΠ·-Π·Π° ΡΠ΅Π³ΠΎ Π½Π° ΠΏΠ΅ΡΠ²ΡΠΉ Π²Π·Π³Π»ΡΠ΄ ΠΎΠ½ΠΎ ΠΊΠ°ΠΆΠ΅ΡΡΡ ΡΠ»ΠΎΠΆΠ½Π΅Π΅, ΡΠ΅ΠΌ Π΅ΡΡΡ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅.
ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠ°Π·ΠΎΠ±ΡΠ΅ΠΌ Π΅Π³ΠΎ Π½Π° ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ ΡΠ·Π»Ρ, ΠΊΠ°ΠΊ ΠΈ Π² ΠΏΡΠΎΡΠ»ΡΠΉ ΡΠ°Π· β ΠΈ Π·Π°Π½ΠΎΠ²ΠΎ ΠΎΡΠΊΡΠΎΠ΅ΠΌ AST, ΡΠΆΠ΅ ΡΠ²Π΅ΡΡ Ρ, ΠΊΠ°ΠΊ ΡΠ°ΡΡΡ Π²ΡΠ΅Π³ΠΎ Π΄Π΅ΡΠ΅Π²Π°:
ΠΡΠΎΡΠ΅ΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ: ΠΎΡΡΠ°Π²ΡΠ°ΡΡΡ ΡΠ°ΡΡΡ
ΠΠ½ΡΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, ΠΏΡΠΎΡΠ΅ΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΠΎΠΉ Π½Π° Python, ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΡ Π² Π΄Π²Π° ΡΡΠ°ΠΏΠ°. Π‘Π½Π°ΡΠ°Π»Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°, ΠΏΠΎΠ»ΡΡΠ΅Π½Π½Π°Ρ Π½Π° Π²Ρ ΠΎΠ΄, ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΡ ΠΏΠ°ΡΡΠΈΠ½Π³, ΠΈ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΠΎΠ΅ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π΄Π΅ΡΠ΅Π²ΠΎ (AST). ΠΠ°ΡΠ΅ΠΌ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΡ ΠΏΠΎ AST ΠΈ ΠΏΡΠΈ ΡΡΠΎΠΌ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄. ΠΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ Python Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΡΠΎΡ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄. ΠΠ·ΡΠ²ΡΠΈΡΡ Π·Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ, Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ ΠΈΠ»ΠΈ Π½Π° ΡΡΠΎΠ²Π½Π΅ AST, ΠΈΠ»ΠΈ Π½Π° ΡΡΠΎΠ²Π½Π΅ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄Π°. ΠΠ±ΠΎΠΈΠΌ ΡΡΠΈΠΌ Π²Π°ΡΠΈΠ°Π½ΡΠ°ΠΌ ΡΠ²ΠΎΠΉΡΡΠ²Π΅Π½Π½Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ Π΄ΠΎΡΡΠΎΠΈΠ½ΡΡΠ²Π° ΠΈ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠΈ.
ΠΠ°ΠΊΠΎΠ½Π΅Ρ, Π½ΡΠΆΠ½ΠΎ ΡΡΠΈΡΡΠ²Π°ΡΡ, ΡΡΠΎ, Ρ ΠΎΡΡ, AST Π² Π»ΡΠ±ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Python ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ΅ΠΉ, ΠΏΡΠΎΡΠ΅ΡΡ ΡΡΠ°Π½ΡΠ»ΡΡΠΈΠΈ AST Π² Π±Π°ΠΉΡ-ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ, ΠΈ Π² Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡΡ Python Π½Π° ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΠΎΠΌ ΡΡΠ°ΠΏΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡΡΡ, ΡΠΊΠ°ΠΆΠ΅ΠΌ, JavaScript, Π° Π½Π΅ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄.
ΠΠ°ΡΠ°Π΄ΠΈΠ³ΠΌΡ ΠΈΠ· Π΄ΡΡΠ³ΠΈΡ ΡΠ·ΡΠΊΠΎΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ
ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ·Π»Π° Π²Π½ΡΡΡΠΈ AST
ΠΠΌΠ΅Ρ AST ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠ°ΠΊ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²ΡΠ²Π°ΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ ΡΠ°ΡΡΠΈ ΡΡΠΎΠ³ΠΎ Π΄Π΅ΡΠ΅Π²Π°? ΠΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΡΠ΄ΠΎΠ±Π½ΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ Python.
ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎΠ»Ρ, ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΠΈΠ΅ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΡΠ·Π»Π° Π² ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅, Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΠ°ΡΡΠΎ. ΠΠΎΡΡΠΎΠΌΡ Π² ΠΌΠΎΠ΄ΡΠ»Π΅ ast Π΅ΡΡΡ Π²ΡΠ΄Π΅Π»Π΅Π½Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ copy_location ΠΊΠ°ΠΊ ΡΠ°Π· Π΄Π»Ρ ΡΡΠΎΠΉ ΡΠ΅Π»ΠΈ, ΠΈ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΠΏΠΈΡΠ°ΡΡ:
ΠΡΡΠ°ΡΠΈ, ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ CPython ΡΠΆΠ΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΡΠ΅Ρ ΡΠ·Π»Ρ BinOp ΡΠ°ΠΊ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π·Π΄Π΅ΡΡ. Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄ Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° C ΠΈ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡΡ Π² Python/ast_opt.c. ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΎΡ CPython Π±ΠΎΠ»Π΅Π΅ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»Π΅Π½ ΠΈ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Ρ ΡΠΈΡΠ»Π°ΠΌΠΈ, ΠΊΠ°ΠΊ Π² ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΠΌΠΎΠΌ Π½Π°ΠΌΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠ΅, Π½ΠΎ Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ ΡΠΈΠΏΠ°ΠΌΠΈ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ.
ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΡΠ·Π»ΠΎΠ² Π² AST
ΠΠ°ΠΊ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ ΡΠ΄Π΅Π»Π°Π½Π½ΡΠ΅ Π½Π°ΠΌΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ Π±ΡΠ»ΠΈ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΌΠΈ? ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΎΠ±ΠΎΠΉΡΠΈ AST ΠΈ ΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π²ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ Π²Ρ ΠΈ Π΄ΠΎΠ±ΠΈΠ²Π°Π»ΠΈΡΡ, Π΄Π΅Π»Π°Ρ pi ΠΈΡΡΠΈΠ½Π½ΠΎΠΉ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΠΎΠΉ, ΠΊΠΎΡΠΎΡΠ°Ρ Π·Π°ΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΠΏΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΈ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½Π°, ΡΠΎ Π΅ΡΡΡ, Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΡΡΠ³ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΠ΄Π½Π°ΠΊΠΎ ΡΡΠΎ, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎ, Π½Π°ΡΡΡΠ°Π΅Ρ ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΡ Python.
Π’Π΅ΠΏΠ΅ΡΡ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΡΠ·Π΅Π» ΠΏΠΎΡΠ΅ΡΠΈΡΠ΅Π»Ρ, ΠΏΠΎΡ ΠΎΠΆΠΈΠΉ Π½Π° ΡΠ·Π΅Π»-ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΠ΅Π»Ρ, ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠΉ Π²ΡΡΠ΅. Π ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΠ΅Π»Ρ, ΠΏΠΎΡΠ΅ΡΠΈΡΠ΅Π»Ρ Π½Π΅ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π΄Π»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΊΠ°ΠΊΠΈΡ -Π»ΠΈΠ±ΠΎ ΡΠ·Π»ΠΎΠ², ΠΎΠ½ ΠΏΡΠΎΡΡΠΎ ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΡ ΠΏΠΎ AST ΠΈ ΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅Ρ ΡΠ·Π»Ρ (ΠΏΠΎΡΠ΅ΡΠ°Π΅Ρ ΠΈΡ ). Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, Π²ΠΈΠ·ΠΈΡΠΈΡΡΡΡΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ.
Π Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΡ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ, ΡΡΡΠ»Π°Π΅ΡΡΡ Π»ΠΈ ΡΠ·Π΅Π» Name Π½Π° pi ΠΈ Π΄Π΅Π»Π°Π΅Ρ Π»ΠΈ ΡΡΠΎ-Π»ΠΈΠ±ΠΎ ΠΊΡΠΎΠΌΠ΅ Π·Π°Π³ΡΡΠ·ΠΊΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ pi (ΠΏΠΎΠΌΠ½ΠΈΠΌ ΠΎ ΠΏΠΎΠ»Π΅ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° ctx ).
ΠΠΎΠΊΠ°Π»ΡΠ½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² Python
ΠΠ°Ρ ΠΌΠ΅ΡΠΎΠ΄, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠΉ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ, Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ» Π»ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ pi, ΠΏΠΎΠ»ΡΡΠΈΠ»ΡΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π³ΡΡΠ±ΡΠΌ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Python Π΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ Π²Π΅ΡΡΠΌΠ° ΡΡ ΠΎΠΆΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΊΠΎΠ³Π΄Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΠΌΠ΅Π½Π° Π² ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ. ΠΡΠ»ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π³Π΄Π΅-Π»ΠΈΠ±ΠΎ Π² ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ (ΠΈ ΡΠ²Π½ΠΎ Π½Π΅ ΡΠ΄Π΅Π»Π°Π½Π° Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠΉ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ global), ΡΠΎ ΡΡΠ° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΡΡΠΈΡΠ°Π΅ΡΡΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ Π²ΠΎ Π²ΡΠ΅ΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ.
Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΎΡΠ»ΠΈΡΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡΡ ΠΈ Π±Π΅Π· ΡΠ΅ΡΠ²Π΅ΡΡΠΎΠΉ ΡΡΡΠΎΠΊΠΈ. ΠΠΎ, Ρ ΠΎΡΡ x = 0 Π² ΡΠ΅ΡΠ²Π΅ΡΡΠΎΠΉ ΡΡΡΠΎΠΊΠ΅ Π½ΠΈΠΊΠΎΠ³Π΄Π° ΠΈ Π½Π΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ, ΡΡΠΎ Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ ΡΡΠΈΡΠ°Π΅ΡΡΡ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΊ x ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, x ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² ΠΌΠ°ΡΡΡΠ°Π±Π°Ρ Π²ΡΠ΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΈ Π΄Π°ΠΆΠ΅ Π² ΡΡΡΠΎΠΊΠ΅ 3. ΠΠΎΡ ΠΏΠΎΡΠ΅ΠΌΡ Python Π±ΡΠ΄Π΅Ρ ΡΡΠ³Π°ΡΡΡΡ, ΡΡΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ x Π² ΡΡΠ΅ΡΡΠ΅ΠΉ ΡΡΡΠΎΠΊΠ΅ Π΅ΡΠ΅ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ.
ΠΡΠ»ΠΈ Π²Π°Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΡΡ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ, ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π½ΠΎ Π·Π΄Π΅ΡΡ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Python, ΠΏΠΎΡΠΌΠΎΡΡΠΈΡΠ΅ Python/symtable.c.
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
Π Python, ΠΊΠ°ΠΊ ΠΈ Π² Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠ·ΡΠΊΠΎΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π½Π΅ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΈΠ· ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅, ΡΡΠ°Π½ΡΠ»ΡΡΠΈΡ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π² Π΄Π²Π° ΡΡΠ°ΠΏΠ°: ΠΈΠ· Π½Π΅Π³ΠΎ ΡΠ½Π°ΡΠ°Π»Π° Π΄Π΅Π»Π°Π΅ΡΡΡ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΠΎΠ΅ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π΄Π΅ΡΠ΅Π²ΠΎ (AST), Π° Π·Π°ΡΠ΅ΠΌ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄ Π΄Π»Ρ ΡΡΠ΅ΠΊΠΎΠ²ΠΎΠΉ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ. Π Python ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΡΡΠ΄ ΠΎΡΠ΅Π½Ρ ΠΏΡΠΈΡΡΠ½ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ Π΄Π»Ρ Π°Π½Π°Π»ΠΈΠ·Π° ΠΈ Π΄Π°ΠΆΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ AST Π»ΡΠ±ΠΎΠΉ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Python, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½ΠΎΠ΅ AST ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Ρ Π»Π΅Π³ΠΊΠΎΡΡΡΡ Π²Π½Π΅Π΄ΡΠΈΡΡ Π½Π°ΡΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ.
Π Π°Π·ΡΠΌΠ΅Π΅ΡΡΡ, Π½Π΅ΠΌΠ°Π»ΠΎ Π΄Π΅ΡΠ°Π»Π΅ΠΉ Ρ Π·Π΄Π΅ΡΡ ΠΏΡΠΎΡΡΠΎ ΠΎΠΏΡΡΡΠΈΠ». Π§ΡΠΎΠ±Ρ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ Π²Π°ΡΠ° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ ΡΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π²ΠΎ Π²ΡΠ΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ ΡΠ»ΡΡΠ°ΡΡ ΠΈ ΠΎΠ±ΡΡΠΎΡΡΠ΅Π»ΡΡΡΠ²Π°Ρ β Π΄Π΅Π»ΠΎ Π²Π΅ΡΡΠΌΠ° Π½Π΅ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½ΠΎΠ΅. ΠΠ΄Π½Π°ΠΊΠΎ ΡΠ΅Π»Ρ ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠΈ β Π½Π΅ ΡΠ°ΡΡΠΊΠ°Π·Π°ΡΡ Π²Π°ΠΌ ΠΎΠ± ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ, Π³ΠΎΡΠΎΠ²ΠΎΠΉ Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π² ΠΏΡΠΎΠ΄Π°ΠΊΡΠ΅Π½Π΅, Π° Π΄Π°ΡΡ Π±Π°Π·ΠΎΠ²ΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ Python Π°Π½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅Ρ Π²Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΉ ΠΊΠΎΠ΄, ΡΡΠΎΠ±Ρ Π²Ρ Π½Π°ΡΡΠΈΠ»ΠΈΡΡ Π΅Π³ΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²ΡΠ²Π°ΡΡ, Π° Π·Π°ΡΠ΅ΠΌ ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ.
ΠΠΎΡΠ΅ΠΌΡ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΡΠ°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎ ΠΠΈΡΠΎΠ½ΠΎΠ²?
Π£Π΄ΠΈΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ, Π½ΠΎ ΡΡΠΎ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°ΡΠ½ΠΎΠ΅ Π·Π°ΡΠ²Π»Π΅Π½ΠΈΠ΅. Π§ΡΠΎ Ρ ΠΈΠΌΠ΅Ρ Π²Π²ΠΈΠ΄Ρ ΠΏΠΎΠ΄ βΠΠΈΡΠΎΠ½ΠΎΠΌβ? ΠΠΎΠΆΠ΅Ρ, Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΠΈΡΠΎΠ½Π°? ΠΠ»ΠΈ CPython, ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½Π°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΠΈΡΠΎΠ½Π° (Π½Π΅ ΠΏΡΡΠ°ΡΡ Ρ ΠΏΠΎΡ ΠΎΠΆΠΈΠΌ ΠΏΠΎ Π½Π°Π·Π²Π°Π½ΠΈΡ Cython)? ΠΠ»ΠΈ Ρ ΠΈΠΌΠ΅Ρ Π²Π²ΠΈΠ΄Ρ ΡΡΠΎ-ΡΠΎ ΡΠΎΠ²ΡΠ΅ΠΌ ΠΈΠ½ΠΎΠ΅? ΠΠΎΠΆΠ΅Ρ, Ρ ΠΊΠΎΡΠ²Π΅Π½Π½ΠΎ ΡΡΡΠ»Π°ΡΡΡ Π½Π° Jython, ΠΈΠ»ΠΈ IronPython, ΠΈΠ»ΠΈ PyPy. ΠΠ»ΠΈ ΠΌΠΎΠΆΠ΅Ρ Ρ ΠΎΡΠ²Π»Π΅ΠΊΡΡ ΡΠ°ΠΊ ΡΠΈΠ»ΡΠ½ΠΎ, ΡΡΠΎ Π³ΠΎΠ²ΠΎΡΡ ΠΎ RPython ΠΈΠ»ΠΈ RubyPython (ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΡΠ΅Π½Ρ ΡΠΈΠ»ΡΠ½ΠΎ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ).
ΠΠ΅ ΡΠΌΠΎΡΡΡ Π½Π° ΡΡ ΠΎΠΆΠ΅ΡΡΡ Π² Π½Π°Π·Π²Π°Π½ΠΈΡΡ ΡΠΊΠ°Π·Π°Π½Π½ΡΡ Π²ΡΡΠ΅ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ, Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ· Π½ΠΈΡ ΠΈΠΌΠ΅ΡΡ ΡΠΎΠ²ΡΠ΅ΠΌ Π΄ΡΡΠ³ΠΈΠ΅ Π·Π°Π΄Π°ΡΠΈ (ΠΈΠ»ΠΈ, ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ, ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ ΠΈΠ½ΡΠΌΠΈ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ)
ΠΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΠΠΈΡΠΎΠ½ΠΎΠΌ Ρ ΡΡΠΎΠ»ΠΊΠ½ΡΠ»ΡΡ Ρ ΠΊΡΡΠ΅ΠΉ ΡΠ°ΠΊΠΈΡ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ. ΠΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ *ython. ΠΠΎ Π»ΠΈΡΡ Π½Π΅Π΄Π°Π²Π½ΠΎ Ρ ΡΠ΄Π΅Π»ΠΈΠ» Π²ΡΠ΅ΠΌΡ, ΡΡΠΎΠ±Ρ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ, ΡΡΠΎ ΠΎΠ½ΠΈ ΡΠΎΠ±ΠΎΠΉ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΈ ΠΏΠΎΡΠ΅ΠΌΡ ΠΎΠ½ΠΈ (ΠΊΠ°ΠΆΠ΄Π°Ρ ΠΏΠΎ-ΡΠ²ΠΎΠ΅ΠΌΡ) Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡ.
Π ΡΡΠΎΠΌ ΠΏΠΎΡΡΠ΅ Ρ Π½Π°ΡΠ½Ρ Ρ Π½ΡΠ»Ρ ΠΈ ΠΏΡΠΎΠΉΠ΄ΡΡΡ ΠΏΠΎ ΡΠ°Π·Π½ΡΠΌ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡΠΌ ΠΠΈΡΠΎΠ½Π°, Π° Π·Π°ΠΊΠΎΠ½ΡΡ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΡΠΌ Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ Π² PyPy, Π·Π° ΠΊΠΎΡΠΎΡΡΠΌ, ΠΏΠΎ ΠΌΠΎΠ΅ΠΌΡ ΠΌΠ½Π΅Π½ΠΈΡ, Π±ΡΠ΄ΡΡΠ΅Π΅ ΡΠ·ΡΠΊΠ°.
ΠΡΠ΅ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ ΡΠΎΠ³ΠΎ, ΡΠ΅ΠΌ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ βΠΠΈΡΠΎΠ½β.
ΠΡΠ»ΠΈ Ρ Π²Π°Ρ Ρ ΠΎΡΠΎΡΠ΅Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½ ΠΈ ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅, ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΠΏΡΡΡΠΈΡΡ ΡΡΠΎΡ ΡΠ°Π·Π΄Π΅Π».
ΠΠΈΡΠΎΠ½ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΡΠ΅ΠΌΡΠΉ ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌΡΠΉ?
ΠΡΠΎ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΡΠΉ ΠΈΡΡΠΎΡΠ½ΠΈΠΊ Π½Π΅ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ ΡΡΠ΅Π΄ΠΈ Π½ΠΎΠ²ΠΈΡΠΊΠΎΠ² ΠΠΈΡΠΎΠ½Π°.
ΠΠ΅ΡΠ²ΠΎΠ΅, ΡΡΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ½ΡΡΡ: βΠΠΈΡΠΎΠ½β β ΡΡΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ. Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ, ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΠ°Ρ, ΡΡΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π΄Π΅Π»Π°ΡΡ ΠΠΈΡΠΎΠ½, ΠΈ ΠΊΠ°ΠΊ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ΅Π±Ρ Π²Π΅ΡΡΠΈ (ΡΡΠΎ ΡΠΏΡΠ°Π²Π΅Π΄Π»ΠΈΠ²ΠΎ Π΄Π»Ρ Π»ΡΠ±ΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°). Π ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ (ΡΡΠΎ ΡΠ°ΠΊΠΆΠ΅ ΡΠΏΡΠ°Π²Π΅Π΄Π»ΠΈΠ²ΠΎ Π΄Π»Ρ Π»ΡΠ±ΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°).
ΠΡΠΎΡΠΎΠ΅: βΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΡΠ΅ΠΌΡΠΉβ ΠΈ βΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌΡΠΉβ ΡΡΠΎ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ, Π½ΠΎ Π½Π΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°.
Π’Π°ΠΊ ΡΡΠΎ ΡΠ°ΠΌ Π²ΠΎΠΏΡΠΎΡ Π½Π΅ ΡΠΎΠ²ΡΠ΅ΠΌ ΠΊΠΎΡΡΠ΅ΠΊΡΠ΅Π½.
Π ΡΠ»ΡΡΠ°Π΅ Ρ ΡΠ°ΠΌΠΎΠΉ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ (CPython: Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠΉ Π½Π° C, ΡΠ°ΡΡΠΎ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠΉ ΠΏΡΠΎΡΡΠΎ βPythonβ, ΠΈ, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅, Π΅ΡΠ»ΠΈ ΠΏΠΎΠ½ΡΡΠΈΡ Π½Π΅ ΠΈΠΌΠ΅Π΅ΡΠ΅ ΠΎ ΡΠ΅ΠΌ Ρ ΡΠΎΠ»ΠΊΡΡ) ΠΎΡΠ²Π΅Ρ: ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΡΠ΅ΠΌΡΠΉ, Ρ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠ΅ΠΉ. CPython ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅Ρ* ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ Π½Π° ΠΠΈΡΠΎΠ½Π΅ Π² Π±Π°ΠΉΡΠΊΠΎΠ΄, Π° Π·Π°ΡΠ΅ΠΌ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΡΠ΅Ρ ΡΡΠΎΡ Π±Π°ΠΉΡΠΊΠΎΠ΄, Π·Π°ΠΏΡΡΠΊΠ°Ρ Π΅Π³ΠΎ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅.
* ΠΠ°ΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: ΡΡΠΎ Π½Π΅ ΡΠΎΠ²ΡΠ΅ΠΌ βΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡβ Π² ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΠΎΠΌ ΡΠΌΡΡΠ»Π΅. ΠΠ±ΡΡΠ½ΠΎ, ΠΌΡ ΡΡΠΈΡΠ°Π΅ΠΌ, ΡΡΠΎ βΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡβ ΡΡΠΎ ΠΊΠΎΠ½Π²Π΅ΡΡΠ°ΡΠΈΡ ΠΈΠ· Π²ΡΡΠΎΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ° Π² ΠΌΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ β Π² Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠΎΠ΄Π΅ ΡΡΠΎ βΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡβ.
ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΈΠ·ΡΡΠΈΠΌ ΡΡΠΎΡ ΠΎΡΠ²Π΅Ρ ΠΏΠΎΠ»ΡΡΡΠ΅, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ Π½Π°ΠΌ ΠΏΠΎΠ½ΡΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΈ, ΠΎΠΆΠΈΠ΄Π°ΡΡΠΈΠ΅ Π½Π°Ρ Π² ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅.
ΠΠ°ΠΉΡΠΊΠΎΠ΄ ΠΈΠ»ΠΈ ΠΌΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄
ΠΡΠ΅Π½Ρ Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡΡ ΡΠ°Π·Π½ΠΈΡΡ ΠΌΠ΅ΠΆΠ΄Ρ Π±Π°ΠΉΡΠΊΠΎΠ΄ΠΎΠΌ ΠΈ ΠΌΠ°ΡΠΈΠ½Π½ΡΠΌ (ΠΈΠ»ΠΈ Π½Π°ΡΠΈΠ²Π½ΡΠΌ) ΠΊΠΎΠ΄ΠΎΠΌ. ΠΠΎΠΆΠ°Π»ΡΠΉ, Π»Π΅Π³ΡΠ΅ Π²ΡΠ΅Π³ΠΎ Π΅Π΅ ΠΏΠΎΠ½ΡΡΡ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅:
β CΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ Π² ΠΌΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠΈ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ Π½Π°ΠΏΡΡΠΌΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠΌ. ΠΠ°ΠΆΠ΄Π°Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ Π·Π°ΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡ ΡΠ°Π·Π½ΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ.
β Java ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ Π² Π±Π°ΠΉΡΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠΈ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ Π½Π° ΠΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π΅ Java (Java Virtual Machine, JVM), Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΠΎΠΌ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠ°ΠΆΠ΄Π°Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΡΡΡ JVM, ΠΊΠΎΡΠΎΡΡΠΉ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ Ρ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠΎΠΌ.
Π‘ΠΈΠ»ΡΠ½ΠΎ ΡΠΏΡΠΎΡΠ°Ρ: ΠΌΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π±ΡΡΡΡΠ΅Π΅, Π½ΠΎ Π±Π°ΠΉΡΠΊΠΎΠ΄ Π»ΡΡΡΠ΅ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌ ΠΈ Π·Π°ΡΠΈΡΠ΅Π½.
ΠΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΠΌΠ°ΡΠΈΠ½Ρ, ΡΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ Π±Π°ΠΉΡΠΊΠΎΠ΄ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΉ Π½Π° Π²ΡΠ΅Ρ ΠΌΠ°ΡΠΈΠ½Π°Ρ . ΠΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ ΠΌΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°Π½ ΠΏΠΎΠ΄ Π²Π°ΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ.
ΠΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΡ ΠΊ CPython, ΡΠ΅ΠΏΠΎΡΠΊΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
1. CPython ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅Ρ Π²Π°Ρ ΠΈΡΡ
ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ Π½Π° ΠΠΈΡΠΎΠ½Π΅ Π² Π±Π°ΠΉΡΠΊΠΎΠ΄.
2. ΠΡΠΎΡ Π±Π°ΠΉΡΠΊΠΎΠ΄ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ Π½Π° Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π΅ CPython.
ΠΠ»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΡΠ΅ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΌΠ°ΡΠΈΠ½Ρ: Jython, IronPython ΠΈ Π΄ΡΡΠ³ΠΈΠ΅
ΠΠ°ΠΊ Ρ Π³ΠΎΠ²ΠΎΡΠΈΠ» Π²ΡΡΠ΅, Ρ ΠΠΈΡΠΎΠ½Π° ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΉ. ΠΠΏΡΡΡ ΠΆΠ΅, ΠΊΠ°ΠΊ Π³ΠΎΠ²ΠΎΡΠΈ-Π»ΠΎΡΡ Π²ΡΡΠ΅, ΡΠ°ΠΌΠΎΠΉ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΎΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ CPython. ΠΡΠ° Π²Π΅ΡΡΠΈΡ ΠΠΈΡΠΎΠ½Π° Π½Π°ΠΏΠΈΡΠ°Π½Π° Π½Π° C ΠΈ ΡΡΠΈΡΠ°Π΅ΡΡΡ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅ΠΉ βΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡβ.
ΠΠΎ ΠΊΠ°ΠΊ Π½Π°ΡΡΠ΅Ρ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²? ΠΠ΄Π½Π° ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²ΠΈΠ΄Π½ΡΡ ΡΡΠΎ Jython, ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΠΈΡΠΎΠ½Π° Π½Π° Java, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ JVM. Π ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ CPython Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ Π±Π°ΠΉΡΠΊΠΎΠ΄ Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° Π½Π° CPython VM, Jython Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ Π±Π°ΠΉΡΠΊΠΎΠ΄ Java Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° Π½Π° JVM (ΡΡΠΎ ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅, ΡΡΠΎ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΡΡΡ ΠΏΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° Java).
βΠΠ°ΡΠ΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ?β, ΡΠΏΡΠΎΡΠΈΡΠ΅ Π²Ρ. ΠΡ, Π΄Π»Ρ Π½Π°ΡΠ°Π»Π°, ΡΠ°Π·Π½ΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Ρ ΠΎΡΠΎΡΠΎ Π»Π°Π΄ΡΡ Ρ ΡΠ°Π·Π½ΡΠΌΠΈ Π½Π°Π±ΠΎΡΠ°ΠΌΠΈ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ.
CPython ΡΠΏΡΠΎΡΠ°Π΅Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ C-ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠΉ Π΄Π»Ρ ΠΊΠΎΠ΄Π° Π½Π° ΠΠΈΡΠΎΠ½Π΅ ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π² ΠΊΠΎΠ½ΡΠ΅ ΠΎΠ½ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ CΠΈ. Jython Π² ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΡΠΏΡΠΎΡΠ°Π΅Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°ΠΌΠΈ Π½Π° Java: Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ Π»ΡΠ±ΡΠ΅ Java-ΠΊΠ»Π°ΡΡΡ Π±Π΅Π· Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΡΠΈΠ»ΠΈΠΉ, ΠΏΡΠΈΠ·ΡΠ²Π°Ρ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π²Π°ΡΠΈ Java-ΠΊΠ»Π°ΡΡΡ ΠΈΠ· ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ Π½Π° Jython. (ΠΠ°ΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: Π΅ΡΠ»ΠΈ Π²Ρ Π΅ΡΠ΅ Π½Π΅ Π΄ΡΠΌΠ°Π»ΠΈ ΠΎΠ± ΡΡΠΎΠΌ Π²ΡΠ΅ΡΡΠ΅Π·, ΡΡΠΎ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π±Π΅Π·ΡΠΌΠ½ΠΎ. ΠΡ Π΄ΠΎΠΆΠΈΠ»ΠΈ Π΄ΠΎ ΡΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΡΠΌΠ΅ΡΠΈΠ²Π°ΡΡ ΡΠ°Π·Π½ΡΠ΅ ΡΠ·ΡΠΊΠΈ ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΠΈΡ Π² ΠΎΠ΄Π½Ρ ΡΡΡΠ½ΠΎΡΡΡ. ΠΠ°ΠΊ Π·Π°ΠΌΠ΅ΡΠΈΠ» Rostin, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΡΠΌΠ΅ΡΠΈΠ²Π°ΡΡΠΈΠ΅ ΠΊΠΎΠ΄ Π½Π° Π€ΠΎΡΡΡΠ°Π½Π΅ Ρ CΠΈ ΠΏΠΎΡΠ²ΠΈΠ»ΠΈΡΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π΄Π°Π²Π½ΠΎ, ΡΠ°ΠΊ ΡΡΠΎ ΡΡΠΎ Π½Π΅ ΡΠΎΠ²ΡΠ΅ΠΌ Π½ΠΎΠ²ΠΈΠ½ΠΊΠ°. ΠΠΎ ΡΡΠΎ Π²ΡΠ΅ ΠΆΠ΅ ΠΊΡΡΡΠΎ.)
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ°, Π²ΠΎΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΡΠΉ ΠΊΠΎΠ΄ Π½Π° Jython:
[Java HotSpot(TM) 64-Bit Server VM (Apple Inc.)] on java1.6.0_51
>>> from java.util import HashSet
>>> s = HashSet(5)
>>> s.add(«Foo»)
>>> s.add(«Bar»)
>>> s
[Foo, Bar]
ΠΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ Jython: Java :: IronPython: C#. ΠΠ½ΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½Π°Ρ , Π΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠ»Π°ΡΡΡ C# Π² ΠΊΠΎΠ΄ IronPython ΠΈ ΠΊΠ»Π°ΡΡΡ Java Π² ΠΊΠΎΠ΄ Jython, ΠΈ ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅.
ΠΡΡΠ°ΡΠΈ, Ρ ΠΎΡΡ ΡΡΠΎ ΠΈ Π½Π΅ ΡΡΠ°Π½Π΅Ρ ΠΏΡΠΈΡΠΈΠ½ΠΎΠΉ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π° Π½Π° Π΄ΡΡΠ³ΡΡ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡ, ΡΡΠΎΠΈΡ ΡΠΏΠΎΠΌΡΠ½ΡΡΡ, ΡΡΠΎ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΡΡΠΈ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ. ΠΡΠΎ ΠΊΠ°ΡΠ°Π΅ΡΡΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΈΠΈ ΠΊΠΎΠ΄Π° Π½Π° ΠΠΈΡΠΎΠ½Π΅. ΠΠ΄Π½Π°ΠΊΠΎ ΡΡΠΈ ΠΎΡΠ»ΠΈΡΠΈΡ, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, Π½Π΅-Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½Ρ, ΠΎΠ½ΠΈ ΠΈΡΡΠ΅Π·Π°ΡΡ ΠΈ ΠΏΠΎΡΠ²Π»ΡΡΡΡΡ ΡΠΎ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ ΠΈΠ·-Π·Π° Π°ΠΊΡΠΈΠ²Π½ΠΎΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ. Π ΠΏΡΠΈΠΌΠ΅ΡΡ, IronPython ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΡΡΠΎΠΊΠΈ Unicode ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ; ΠΎΠ΄Π½Π°ΠΊΠΎ CPython ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ASCII Π² Π²Π΅ΡΡΠΈΡΡ 2.x (Π²ΡΠ΄Π°Π²Π°Ρ ΠΎΡΠΈΠ±ΠΊΡ UnicodeEncodeError Π΄Π»Ρ Π½Π΅-ASCII ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ²), ΠΈ ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠΈΠΌΠ²ΠΎΠ»Ρ Unicode ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π² Π²Π΅ΡΡΠΈΡΡ 3.x.
ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ Π½Π° Π»Π΅ΡΡ (Just-in-Time Compilation): PyPy ΠΈ Π±ΡΠ΄ΡΡΠ΅Π΅
ΠΡΠ°ΠΊ, Ρ Π½Π°Ρ Π΅ΡΡΡ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΠΈΡΠΎΠ½Π°, Π½Π°ΠΏΠΈΡΠ°Π½Π½Π°Ρ Π½Π° Π‘ΠΈ, Π΅ΡΠ΅ ΠΎΠ΄Π½Π° β Π½Π° Java, ΠΈ ΡΡΠ΅ΡΡΡ Π½Π° C#. Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ Π»ΠΎΠ³ΠΈΡΠ½ΡΠΉ ΡΠ°Π³: ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΠΈΡΠΎΠ½Π°, Π½Π°ΠΏΠΈΡΠ°Π½Π½Π°Ρ Π½Π°β¦ ΠΠΈΡΠΎΠ½Π΅. (ΠΠΎΠ΄Π³ΠΎΡΠΎΠ²Π»Π΅Π½Π½ΡΠΉ ΡΠΈΡΠ°ΡΠ΅Π»Ρ Π·Π°ΠΌΠ΅ΡΠΈΡ, ΡΡΠΎ ΡΡΠΎ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠ΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΠΌΠ°Π½ΡΠΈΠ²ΠΎ).
ΠΠΎΡ ΠΏΠΎΡΠ΅ΠΌΡ ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΡΠ±ΠΈΠ²Π°ΡΡ Ρ ΡΠΎΠ»ΠΊΡ. ΠΠ»Ρ Π½Π°ΡΠ°Π»Π°, Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΎΠ±ΡΡΠ΄ΠΈΠΌ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ Π½Π° Π»Π΅ΡΡ (just-in-time ΠΈΠ»ΠΈ JIT).
JIT. ΠΠΎΡΠ΅ΠΌΡ ΠΈ ΠΊΠ°ΠΊ
ΠΠ°ΠΏΠΎΠΌΠ½Ρ, ΡΡΠΎ Π½Π°ΡΠΈΠ²Π½ΡΠΉ ΠΌΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π±ΡΡΡΡΠ΅Π΅ Π±Π°ΠΉΡΠΊΠΎΠ΄Π°. ΠΡ, Π° ΡΡΠΎ, Π΅ΡΠ»ΠΈ Π±Ρ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°ΡΡΡ Π±Π°ΠΉΡΠΊΠΎΠ΄Π° ΠΈ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ Π΅Π³ΠΎ ΠΊΠ°ΠΊ Π½Π°ΡΠΈΠ²Π½ΡΠΉ ΠΊΠΎΠ΄? ΠΡΠΈΡΠ»ΠΎΡΡ Π±Ρ βΠ·Π°ΠΏΠ»Π°ΡΠΈΡΡβ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠ΅Π½Ρ (ΠΈΠ½ΡΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ: Π²ΡΠ΅ΠΌΡ) Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ Π±Π°ΠΉΡΠΊΠΎΠ΄Π°, Π½ΠΎ Π΅ΡΠ»ΠΈ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π±ΡΡΡΡΠ΅Π΅, ΡΠΎ ΡΡΠΎ Π·Π΄ΠΎΡΠΎΠ²ΠΎ! ΠΡΠΈΠΌ ΠΈ ΠΌΠΎΡΠΈΠ²ΠΈΡΡΠ΅ΡΡΡ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ, Π³ΠΈΠ±ΡΠΈΠ΄Π½Π°Ρ ΡΠ΅Ρ Π½ΠΈΠΊΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΎΠ²ΠΌΠ΅ΡΠ°Π΅Ρ Π² ΡΠ΅Π±Π΅ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎ-ΡΠΎΠ² ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠ². Π Π΄Π²ΡΡ ΡΠ»ΠΎΠ²Π°Ρ β JIT ΡΡΠ°ΡΠ°Π΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ, ΡΡΠΎΠ±Ρ ΡΡΠΊΠΎΡΠΈΡΡ ΡΠΈΡΡΠ΅ΠΌΡ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΈΠΈ.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΠΎΡ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΡΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ JIT:
Π ΡΡΠΎΠΌ Π²ΡΡ ΡΡΡΡ PyPy: ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ JIT Π² ΠΠΈΡΠΎΠ½Π΅ (Π² Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠ΅ ΠΏΠΎΠΏΡΡΠΊΠΈ). ΠΠΎΠ½Π΅ΡΠ½ΠΎ, Π΅ΡΡΡ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠ΅Π»ΠΈ: PyPy Π½Π°ΡΠ΅Π»Π΅Π½ Π½Π° ΠΊΡΠΎΡΡΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½Π½ΠΎΡΡΡ, ΡΠ°Π±ΠΎΡΡ Ρ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΠΌ ΠΏΠ°ΠΌΡΡΠΈ ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ stackless (ΠΎΡΠΊΠ°Π·Π° ΠΎΡ ΡΡΠ΅ΠΊΠ° Π²ΡΠ·ΠΎΠ²ΠΎΠ² ΡΠ·ΡΠΊΠ° Π‘ΠΈ Π² ΠΏΠΎΠ»ΡΠ·Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΡΡΠ΅ΠΊΠ°). ΠΠΎ JIT ΡΡΠΎ Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎ. Π ΡΡΠ΅Π΄Π½Π΅ΠΌ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΠ΅ΡΡΠΎΠ², ΡΠ°ΠΊΡΠΎΡ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΡ ΡΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ 6.27. ΠΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΈΠ· ΡΡ Π΅ΠΌΡ ΠΎΡ PyPy Speed Center:
Π PyPy ΡΠ»ΠΎΠΆΠ½ΠΎ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ
Π£ PyPy Π΅ΡΡΡ ΠΎΠ³ΡΠΎΠΌΠ½ΡΠΉ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π», ΠΈ Π² Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΎΠ½ Ρ ΠΎΡΠΎΡΠΎ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌ Ρ CPython (ΡΠ°ΠΊ ΡΡΠΎ Π½Π° Π½Π΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ Flask, Django, ΠΈ Ρ.Π΄.).
ΠΠΎ Ρ PyPy Π΅ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΡΠ°Π½ΠΈΡΡ. (ΠΎΡΠ΅Π½ΠΈΡΠ΅, ΠΊ ΠΏΡΠΈΠΌΠ΅ΡΡ, ΡΡΠΎ Π±Π΅ΡΡΠΌΡΡΠ»Π΅Π½Π½ΠΎΠ΅ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠΎΠ·Π΄Π°ΡΡ PyPyPyβ¦). ΠΠΎ ΠΌΠΎΠ΅ΠΌΡ ΠΌΠ½Π΅Π½ΠΈΡ ΠΎΡΠ½ΠΎΠ²Π½Π°Ρ ΠΏΡΠΈΡΠΈΠ½Π° Π² ΡΠΎΠΌ, ΡΡΠΎ PyPy ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΡΠ²Π»ΡΠ΅ΡΡΡ:
1. ΠΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ ΠΠΈΡΠΎΠ½Π°, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠΌ Π½Π° RPython (Π½Π΅ Python (Ρ ΠΎΠ±ΠΌΠ°Π½ΡΠ» Π²Π°Ρ Π΄ΠΎ ΡΡΠΎΠ³ΠΎ)). RPython ΡΡΠΎ ΠΏΠΎΠ΄ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Python ΡΠΎ ΡΡΠ°ΡΠΈΡΠ½ΠΎΠΉ ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΠ΅ΠΉ. Π Python, Π²Π΅ΡΡΠΈ ΡΡΠ°ΡΠ΅Π»ΡΠ½ΡΠ΅ Π±Π΅ΡΠ΅Π΄Ρ ΠΎ ΡΠΈΠΏΠ°Ρ βΠ² ΡΠ΅Π»ΠΎΠΌ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎβ ΠΏΠΎΡΠ΅ΠΌΡ ΡΡΠΎ ΡΠ°ΠΊ ΡΠ»ΠΎΠΆΠ½ΠΎ? ΡΠ°ΡΡΠΌΠΎΡΡΠΈΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅:
x = random.choice([1, «foo»])
ΡΡΠΎ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΡΠΉ ΠΊΠΎΠ΄ Π½Π° Python (ΡΠΏΠ°ΡΠΈΠ±ΠΎ AdemanβΡ). ΠΠ°ΠΊΠΎΠΉ ΡΠΈΠΏ Ρ x? ΠΠ°ΠΊ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠ±ΡΡΠΆΠ΄Π°ΡΡ ΡΠΈΠΏΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ , ΠΊΠΎΠ³Π΄Π° ΡΠΈΠΏΡ Π΄Π°ΠΆΠ΅ Π½Π΅ ΡΠΎΡΡΠΈΡΡΡΡΡΡ?). Π RPython ΠΌΡ ΠΆΠ΅ΡΡΠ²ΡΠ΅ΠΌ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΉ Π³ΠΈΠ±ΠΊΠΎΡΡΡΡ, Π½ΠΎ Π²Π·Π°ΠΌΠ΅Π½ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π³ΠΎΡΠ°Π·Π΄ΠΎ ΠΏΡΠΎΡΠ΅ ΡΠΏΡΠ°Π²Π»ΡΡΡ ΠΏΠ°ΠΌΡΡΡΡ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ΅Π³ΠΎ Π΅ΡΠ΅, ΡΡΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ ΠΏΡΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ.
2. ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅Ρ ΠΊΠΎΠ΄ Π½Π° RPython Π² ΡΠ°Π·Π½ΡΠ΅ ΡΠΎΡΠΌΠ°ΡΡ ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ JIT. ΠΠ»Π°ΡΡΠΎΡΠΌΠΎΠΉ ΠΏΠΎ-ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠ²Π»ΡΠ΅ΡΡΡ Π‘ΠΈ, ΡΠΎ Π΅ΡΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ RPython-Π²-Π‘ΠΈ, Π½ΠΎ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ΅Π»Π΅Π²ΠΎΠΉ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠ±ΡΠ°ΡΡ JVM ΠΈ Π΄ΡΡΠ³ΠΈΠ΅.
ΠΠ»Ρ ΠΏΡΠΎΡΡΠΎΡΡ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ, Ρ Π±ΡΠ΄Ρ Π½Π°Π·ΡΠ²Π°ΡΡ ΠΈΡ PyPy (1) ΠΈ PyPy (2).
ΠΠ°ΡΠ΅ΠΌ ΠΌΠΎΠ³ΡΡ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡΡ ΡΡΠΈ Π΄Π²Π΅ Π²Π΅ΡΠΈ, ΠΈ ΠΏΠΎΡΠ΅ΠΌΡ β Π² ΠΎΠ΄Π½ΠΎΠΌ Π½Π°Π±ΠΎΡΠ΅? ΠΡΠΌΠ°ΠΉΡΠ΅ ΠΎΠ± ΡΡΠΎΠΌ ΡΠ°ΠΊ: PyPy (1) ΡΡΠΎ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠΉ Π½Π° RPython. Π’ΠΎ Π΅ΡΡΡ ΠΎΠ½ Π±Π΅ΡΠ΅Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΊΠΎΠ΄ Π½Π° ΠΠΈΡΠΎΠ½Π΅ ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅Ρ Π΅Π³ΠΎ Π² Π±Π°ΠΉΡΠΊΠΎΠ΄. ΠΠΎ ΡΡΠΎΠ±Ρ ΡΠ°ΠΌ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ (Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠΉ Π½Π° RPython) ΠΌΠΎΠ³ ΡΠ°Π±ΠΎΡΠ°ΡΡ, ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΠΎΠ²Π°Π½ Π΄ΡΡΠ³ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ ΠΠΈ-ΡΠΎΠ½Π°, Π²Π΅ΡΠ½ΠΎ?
ΠΡΠ°ΠΊ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ CPython ΡΡΠΎΠ±Ρ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ. ΠΠΎ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ Π½Π΅ ΡΠ»ΠΈΡΠΊΠΎΠΌ Π±ΡΡΡΡΠΎ.
ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ PyPy (2) (Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠΉ RPython Toolchain) ΡΡΠΎΠ±Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ PyPy Π² ΠΊΠΎΠ΄ Π΄Π»Ρ Π΄ΡΡΠ³ΠΎΠΉ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, C, JVM, ΠΈΠ»ΠΈ CLI) Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° Π½Π° ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π΅, Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ JIT. ΠΡΠΎ Π²ΠΎΠ»ΡΠ΅Π±Π½ΠΎ: PyPy Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ JIT ΠΊ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΡ, Π³Π΅Π½Π΅ΡΠΈΡΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ! (ΠΠΏΡΡΡ ΠΆΠ΅, ΡΡΠΎ Π±Π΅Π·ΡΠΌΠΈΠ΅: ΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ, Π΄ΠΎΠ±Π°Π²Π»ΡΡ Π΄ΡΡΠ³ΠΎΠΉ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ, ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΡΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ).
Π ΠΊΠΎΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΠΎΠ² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ Π±ΡΠ΄Π΅Ρ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΡΠΉ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ», ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΡΠ΅Ρ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ Π½Π° ΠΠΈΡΠΎΠ½Π΅ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ JIT. Π’ΠΎ, ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ! ΠΠΎΠ½ΡΡΡ ΡΠ»ΠΎΠΆΠ½ΠΎΠ²Π°ΡΠΎ, Π½ΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΡΠ° ΡΡ Π΅ΠΌΠ° ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ:
ΠΠΎΠ²ΡΠΎΡΠΈΠΌ: Π½Π°ΡΡΠΎΡΡΠ°Ρ ΠΊΡΠ°ΡΠΎΡΠ° PyPy Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΠ΅Π±Π΅ ΠΊΡΡΡ ΡΠ°Π·Π½ΡΡ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠΎΠ² ΠΠΈΡΠΎΠ½Π° Π½Π° RPython Π½Π΅ Π²ΠΎΠ»Π½ΡΡΡΡ ΠΎ JIT (Π½Π΅ ΡΡΠΈΡΠ°Ρ ΠΏΠ°ΡΡ Π΄Π΅ΡΠ°Π»Π΅ΠΉ). ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ PyPy ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ Π΄Π»Ρ Π½Π°Ρ JIT, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ RPython Toolchain/PyPy (2).
ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅, Π΅ΡΠ»ΠΈ ΠΊΠΎΠΏΠ½ΡΡΡ Π³Π»ΡΠ±ΠΆΠ΅ Π² Π°Π±ΡΡΡΠ°ΠΊΡΠΈΡ, ΡΠ΅ΠΎΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ Π»ΡΠ±ΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ°, Π½Π°ΠΏΡΠ°Π²ΠΈΡΡ Π΅Π³ΠΎ Π² PyPy ΠΈ ΠΏΠΎΠ»ΡΡΠΈΡΡ JIT Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ°. ΠΡΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΎΠΌΡ, ΡΡΠΎ PyPy ΠΊΠΎΠ½ΡΠ΅Π½ΡΡΠΈΡΡΠ΅ΡΡΡ Π½Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΡΠ°ΠΌΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ°, Π° Π½Π΅ Π΄Π΅ΡΠ°Π»Π΅ΠΉ ΡΠ·ΡΠΊΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΡ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΡΠ΅Ρ.
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΎΡΡΡΡΠΏΠ»Π΅Π½ΠΈΡ Ρ Π±Ρ Ρ ΠΎΡΠ΅Π» Π·Π°ΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ ΡΠ°ΠΌ JIT ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ Π²ΠΎΡΡ ΠΈΡΠΈΡΠ΅Π»Π΅Π½. ΠΠ½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠ΅Ρ Π½ΠΈΠΊΡ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ βΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅β (tracing), ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
Π£Π·Π½Π°ΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ· ΡΡΠΎΠΉ Π»Π΅Π³ΠΊΠΎΠ΄ΠΎΡΡΡΠΏΠ½ΠΎΠΉ ΠΈ ΠΎΡΠ΅Π½Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎΠΉ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ.
ΠΠΎΠ΄ΡΡΠΎΠΆΠΈΠΌ: ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ PyPy-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ RPython-Π²-Π‘ΠΈ (ΠΈΠ»ΠΈ Π΄ΡΡΠ³ΡΡ ΡΠ΅Π»Π΅Π²ΡΡ ΠΏΠ»Π°Ρ-ΡΠΎΡΠΌΡ), ΡΡΠΎΠ±Ρ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠΉ Π½Π° RPython ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠ°ΡΠΎΡ PyPΡ.
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
ΠΠΎΡΠ΅ΠΌΡ Π²ΡΠ΅ ΡΡΠΎ ΡΠ°ΠΊ Π²ΠΎΡΡ ΠΈΡΠΈΡΠ΅Π»ΡΠ½ΠΎ? ΠΠΎΡΠ΅ΠΌΡ ΡΡΠΎΠΈΡ Π³Π½Π°ΡΡΡΡ Π·Π° ΡΡΠΎΠΉ Π±Π΅Π·ΡΠΌΠ½ΠΎΠΉ ΠΈΠ΄Π΅Π΅ΠΉ? ΠΠΎ-ΠΌΠΎΠ΅ΠΌΡ, ΠΠ»Π΅ΠΊΡ ΠΠ΅ΠΉΠ½ΠΎΡ ΠΎΠ±ΡΡΡΠ½ΠΈΠ» ΡΡΠΎ ΠΎΡΠ΅Π½Ρ Ρ ΠΎΡΠΎΡΠΎ Π² ΡΠ²ΠΎΠ΅ΠΌ Π±Π»ΠΎΠ³Π΅: β[ΠΠ° PyPy Π±ΡΠ΄ΡΡΠ΅Π΅] ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ [ΠΎΠ½] Π±ΠΎΠ»Π΅Π΅ Π±ΡΡΡΡΡΠΉ, Π±ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠΈΠΉ ΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΡΡΡΠ΅ΠΉ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠΎΠΉ Π΄Π»Ρ ΡΠ°Π·Π²ΠΈΡΠΈΡ ΠΠΈΡΠΎΠ½Π°β.
ΠΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅: Π΄ΡΡΠ³ΠΈΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²Ρ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΠ»ΡΡΠ°Π»ΠΈ
Python 3000 (Py3k): Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΠΎΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Python 3.0, ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΠ΅Π»ΠΈΠ· ΠΠΈΡΠΎΠ½Π° Ρ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΉ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΡΠ²ΠΈΠ»ΡΡ Π² 2008. Π³ΠΎΠ΄Ρ. ΠΠΎΠΌΠ°Π½Π΄Π° Py3k ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·Π°Π»Π°, ΡΡΠΎ Π½ΠΎΠ²ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΠΏΡΡΡ Π»Π΅Ρ ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΏΡΠΈΠΆΠΈΡΡΡΡ. Π Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ, ΠΊΠ°ΠΊ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ (Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π½Π°Π΄ΡΠΌΠ°Π½Π½ΠΎΠ΅ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠ΅) ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² Π½Π° ΠΠΈΡΠΎΠ½Π΅ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Python 2.x, Π»ΡΠ΄ΠΈ Π²ΡΠ΅ Π±ΠΎΠ»ΡΡΠ΅ Π·Π°Π΄ΡΠΌΡΠ²Π°ΡΡΡΡ ΠΎ Py3k.
Numba: βΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ just-in-time ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡβ, ΠΊΠΎΡΠΎΡΡΠΉ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ JIT Π² ΡΠ½Π°Π±ΠΆΠ΅Π½Π½ΡΠΉ ΠΏΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΡΠΌΠΈ ΠΊΠΎΠ΄ Π½Π° ΠΠΈΡΠΎΠ½Π΅. ΠΡΠΎΡΠ΅ Π³ΠΎΠ²ΠΎΡΡ, Π²Ρ Π΄Π°Π΅ΡΠ΅ Π΅ΠΌΡ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠΈ, Π° ΠΎΠ½ ΡΡΠΊΠΎΡΡΠ΅Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°ΡΡΠΈ Π²Π°ΡΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π°. Numba ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ°ΡΡΡΡ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ²Π° Anaconda Π½Π°Π±ΠΎΡΠ° ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² Π΄Π»Ρ Π°Π½Π°Π»ΠΈΠ·Π° ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΠΌΠΈ.
IPython: ΡΠΈΠ»ΡΠ½ΠΎ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ Π²ΡΠ΅Π³ΠΎ, ΡΡΠΎ ΠΌΡ ΠΎΠ±ΡΡΠ΄ΠΈΠ»ΠΈ. ΠΡΡΠΈΡΠ»ΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΡΡΠ΅Π΄Π° Π΄Π»Ρ ΠΠΈΡΠΎΠ½Π°. ΠΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½Π°Ρ, Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ GUI-ΠΏΠ°ΠΊΠ΅ΡΠΎΠ², Π±ΡΠ°ΡΠ·Π΅ΡΠΎΠ² ΠΈ ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅.
Psyco: ΠΌΠΎΠ΄ΡΠ»Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΠΠΈΡΠΎΠ½Π°, ΠΎΠ΄Π½Π° ΠΈΠ· ΠΏΠ΅ΡΠ²ΡΡ ΠΏΠΎΠΏΡΡΠΎΠΊ ΠΠΈΡΠΎΠ½Π° Π² ΠΎΠ±Π»Π°ΡΡΠΈ JIT. ΠΠ°Π²Π½ΠΎ ΠΏΠΎΠΌΠ΅ΡΠ΅Π½ ΠΊΠ°ΠΊ βΠ½Π΅ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΠΉ ΠΈ ΠΌΠ΅ΡΡΠ²ΡΠΉβ. ΠΠ»Π°Π²Π½ΡΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ Psyco ΠΡΠΌΠΈΠ½ Π ΠΈΠ³ΠΎ ΡΠ΅ΠΉΡΠ°Ρ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½Π°Π΄ PyPy.