ΠΠΎΠΌΠΏΠ°Π½ΠΈΡ Facebook ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π»Π° ΠΈΡΡ ΠΎΠ΄Π½ΡΠ΅ ΡΠ΅ΠΊΡΡΡ ΠΏΡΠΎΠ΅ΠΊΡΠ° Cinder, ΡΠ°Π·Π²ΠΈΠ²Π°ΡΡΠ΅Π³ΠΎ ΠΎΡΠ²Π΅ΡΠ²Π»Π΅Π½ΠΈΠ΅ ΠΎΡ CPython 3.8.5, ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΡΠ°Π»ΠΎΠ½Π½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ·ΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Python. Cinder ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π² ΡΠ°Π±ΠΎΡΠ΅ΠΉ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ΅ Facebook Π΄Π»Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅ΡΠ²ΠΈΡΠ° Instagram ΠΈ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Π΄Π»Ρ ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ.
ΠΠΎΠ΄ ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ Π΄Π»Ρ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠ° ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²Π»Π΅Π½Π½ΡΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΉ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΠΎΡΡΠ°Π² CPython ΠΈ Π΄Π»Ρ ΠΏΠΎΠΌΠΎΡΠΈ Π΄ΡΡΠ³ΠΈΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ°ΠΌ, Π·Π°Π½ΠΈΠΌΠ°ΡΡΠΈΠΌΡΡ ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ CPython. Facebook Π½Π΅ ΡΠΎΠ±ΠΈΡΠ°Π΅ΡΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ Cinder Π² ΡΠΎΡΠΌΠ΅ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΎΡΠΊΡΡΡΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΈ ΠΊΠΎΠ΄ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ Π² ΡΠΎΠΌ Π²ΠΈΠ΄Π΅, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ΅ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ, Π±Π΅Π· Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΡΡΡΡΠ²Π°Π½ΠΈΡ ΠΈ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ. Cinder ΡΠ°ΠΊΠΆΠ΅ Π½Π΅ ΠΏΡΡΠ°ΡΡΡΡ ΠΏΡΠΎΠ΄Π²ΠΈΠ³Π°ΡΡ ΠΊΠ°ΠΊ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Ρ CPython — ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΠ΅Π»ΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ ΡΠ»ΡΡΡΠΈΡΡ ΡΠ°ΠΌ CPython.
ΠΠΎΠ΄ Cinder ΠΎΡΠΌΠ΅ΡΠ°Π΅ΡΡΡ ΠΊΠ°ΠΊ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π½Π°Π΄ΡΠΆΠ½ΡΠΉ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠ΅Π½Π½ΡΠΉ Π² ΡΠ°Π±ΠΎΡΠΈΡ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡΡ , Π½ΠΎ Π² ΡΠ»ΡΡΠ°Π΅ Π²ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΠΈΡ ΠΏΡΠΈΠ΄ΡΡΡΡ ΡΠ΅ΡΠ°ΡΡ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Facebook Π½Π΅ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ, ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΡΠ΅Π°Π³ΠΈΡΠΎΠ²Π°ΡΡ Π½Π° Π²Π½Π΅ΡΠ½ΠΈΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ ΠΈ pull-Π·Π°ΠΏΡΠΎΡΡ. ΠΡΠΈ ΡΡΠΎΠΌ Fecebook Π½Π΅ ΠΈΡΠΊΠ»ΡΡΠ°Π΅Ρ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠ²Π½ΠΎΠ΅ ΡΠΎΡΡΡΠ΄Π½ΠΈΡΠ΅ΡΡΠ²ΠΎ Ρ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²ΠΎΠΌ ΠΈ Π³ΠΎΡΠΎΠ² ΠΎΠ±ΡΡΠ΄ΠΈΡΡ ΠΈΠ΄Π΅ΠΈ ΠΊΠ°ΠΊ ΡΠ΄Π΅Π»Π°ΡΡ Cinder Π΅ΡΡ Π±ΡΡΡΡΠ΅Π΅ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ ΡΡΠΊΠΎΡΠΈΡΡ ΠΏΠ΅ΡΠ΅Π½ΠΎΡ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²Π»Π΅Π½Π½ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΠΎΡΡΠ°Π² CPython.
ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ, ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠ΅ Π² Cinder:
- Inline-ΠΊΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π±Π°ΠΉΡΠΊΠΎΠ΄Π° («shadow bytecode»). Π‘ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Π° Π² Π²ΡΡΠ²Π»Π΅Π½ΠΈΠΈ ΡΠΈΡΡΠ°ΡΠΈΠΉ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠΈΠΏΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΏΠΊΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΠΈΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ, ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ Π·Π°ΠΌΠ΅Π½Π΅ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ ΠΎΠΏΠΊΠΎΠ΄Π° Π½Π° Π±ΠΎΠ»Π΅Π΅ Π±ΡΡΡΡΡΠ΅ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π·Π°ΠΌΠ΅Π½Π° ΡΠ°ΡΡΠΎ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ).
- ΠΠΊΡΠΈΠ²Π½ΠΎΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ ΡΠΎΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ (Eager coroutine evaluation). ΠΠ»Ρ Π²ΡΠ·ΠΎΠ²ΠΎΠ² async-ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΠ°Π·Ρ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΡΡ (await Π½Π΅ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΠΈ ΡΡΠ½ΠΊΡΠΈΡ Π΄ΠΎΡΡΠΈΠ³Π°Π΅Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° return ΡΠ°Π½ΡΡΠ΅), ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ Π½Π°ΠΏΡΡΠΌΡΡ ΠΏΠΎΠ΄ΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ Π±Π΅Π· ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠΎΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈ Π±Π΅Π· ΠΏΡΠΈΠ²Π»Π΅ΡΠ΅Π½ΠΈΡ ΡΠΈΠΊΠ»Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΎΠ±ΡΡΠΈΠΉ. Π ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌΠΎΠΌ Π² Facebook ΠΊΠΎΠ΄Π΅, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π°ΠΊΡΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ async/await, ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ Π½Π° 5%.
- ΠΡΠ±ΠΎΡΠΎΡΠ½Π°Ρ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ Π½Π° ΡΡΠΎΠ²Π½Π΅ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ
ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ (method-at-a-time). ΠΠΊΠ»ΡΡΠ°Π΅ΡΡΡ ΡΠ΅ΡΠ΅Π· ΠΎΠΏΡΠΈΡ «-X jit» ΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ PYTHONJIT=1 ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΡΠΊΠΎΡΠΈΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΌΠ½ΠΎΠ³ΠΈΡ
ΡΠ΅ΡΡΠΎΠ² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π² 1.5-4 ΡΠ°Π·Π°. Π’Π°ΠΊ ΠΊΠ°ΠΊ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ Π°ΠΊΡΡΠ°Π»ΡΠ½Π° ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΠ°ΡΡΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΡ
ΡΡΠ½ΠΊΡΠΈΠΉ, Π½Π΅ΡΠ΅Π»Π΅ΡΠΎΠΎΠ±ΡΠ°Π·Π½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ Π΅Ρ Π΄Π»Ρ ΡΠ΅Π΄ΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ
ΡΡΠ½ΠΊΡΠΈΠΉ, Π½Π°ΠΊΠ»Π°Π΄Π½ΡΠ΅ ΡΠ°ΡΡ
ΠΎΠ΄Ρ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ ΠΊΠΎΡΠΎΡΡΡ
ΠΌΠΎΠ³ΡΡ Π»ΠΈΡΡ Π·Π°ΠΌΠ΅Π΄Π»ΠΈΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
Π§Π΅ΡΠ΅Π· ΠΎΠΏΡΠΈΡ «-X jit-list-file=/path/to/jitlist.txt» ΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ «PYTHONJITLISTFILE=/path/to/jitlist.txt» ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ ΡΠ°ΠΉΠ» ΡΠΎ ΡΠΏΠΈΡΠΊΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΠΉ, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ JIT (ΡΠΎΡΠΌΠ°Ρ path.to.module:funcname ΠΈΠ»ΠΈ path.to.module:ClassName.method_name). Π‘ΠΏΠΈΡΠΎΠΊ ΡΡΠ½ΠΊΡΠΈΠΉ Π΄Π»Ρ ΠΊΠΎΡΠΎΡΡΡ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π²ΠΊΠ»ΡΡΠΈΡΡ JIT ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² ΠΏΡΠΎΡΠΈΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ. Π Π±ΡΠ΄ΡΡΠ΅ΠΌ ΠΎΠΆΠΈΠ΄Π°Π΅ΡΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π²Π½ΡΡΡΠ΅Π½Π½Π΅Π³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π° ΡΠ°ΡΡΠΎΡΡ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΉ, Π½ΠΎ Ρ ΡΡΡΡΠΎΠΌ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠΈ Π·Π°ΠΏΡΡΠΊΠ° ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² Π² Instagram, Π΄Π»Ρ Facebook ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ ΠΈ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ Π½Π° Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠΌ ΡΡΠ°ΠΏΠ΅.
JIT Π²Π½Π°ΡΠ°Π»Π΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅Ρ Π±Π°ΠΉΡΠΊΠΎΠ΄ Python Π² Π²ΡΡΠΎΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²Π½ΠΎΠ΅ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ (HIR), ΠΊΠΎΡΠΎΡΠΎΠ΅ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π±Π»ΠΈΠ·ΠΊΠΎ ΠΊ Π±Π°ΠΉΡΠΊΠΎΠ΄Ρ Python, Π½ΠΎ ΡΠ°ΡΡΡΠΈΡΠ°Π½ΠΎ Π½Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ²ΠΎΠΉ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ, Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠ΅ΠΊΠΎΠ²ΠΎΠΉ, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠΈΠΏΠ°Ρ ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π΄Π΅ΡΠ°Π»ΠΈ, Π²Π°ΠΆΠ½ΡΠ΅ Π΄Π»Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎΠ΄ΡΡΡΡ ΡΡΡΠ»ΠΎΠΊ). HIR Π·Π°ΡΠ΅ΠΌ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅ΡΡΡ Π² ΡΠΎΡΠΌΡ SSA (static single assignment) ΠΈ ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΡ ΡΡΠ°Π΄ΠΈΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ, ΡΡΠΈΡΡΠ²Π°ΡΡΠΈΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΏΠΎΠ΄ΡΡΡΡΠ° ΡΡΡΠ»ΠΎΠΊ ΠΈ Π΄Π°Π½Π½ΡΠ΅ ΠΎ ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΠΈ ΠΏΠ°ΠΌΡΡΠΈ. Π ΠΈΡΠΎΠ³Π΅ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΡΡΡ Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²Π½ΠΎΠ΅ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ (LIR), Π±Π»ΠΈΠ·ΠΊΠΎΠ΅ ΠΊ ΡΠ·ΡΠΊΡ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅Ρ. ΠΠΎΡΠ»Π΅ Π΅ΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΡΠ°Π·Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΉ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ LIR ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ asmjit Π³Π΅Π½Π΅ΡΠΈΡΡΡΡΡΡ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ½ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ.
- Π Π΅ΠΆΠΈΠΌ strict Π΄Π»Ρ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ. Π€ΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ ΡΡΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° : Π’ΠΈΠΏ StrictModule. Π‘ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ, ΡΠΏΠΎΡΠΎΠ±Π½ΡΠΉ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ, ΡΡΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΌΠΎΠ΄ΡΠ»Ρ Π½Π΅ ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π²Π»ΠΈΡΠ½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ΄ Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Π°ΠΌΠΈ ΡΡΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ. ΠΠ°Π³ΡΡΠ·ΡΠΈΠΊ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΠΈΠΉ, ΡΡΠΎ ΠΌΠΎΠ΄ΡΠ»ΠΈ ΠΏΠ΅ΡΠ΅Π²Π΅Π΄Π΅Π½Ρ Π² ΡΠ΅ΠΆΠΈΠΌ strict (Π² ΠΊΠΎΠ΄Π΅ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ «import __strict__»), ΠΏΡΠΎΠ²Π΅ΡΡΡΡΠΈΠΉ ΠΎΡΡΡΡΡΡΠ²ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΡΠ΅ΡΠ΅Π½ΠΈΠΉ Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΠΌΠΎΠ΄ΡΠ»ΡΠΌΠΈ ΠΈ Π·Π°Π³ΡΡΠΆΠ°ΡΡΠΈΠΉ strict-ΠΌΠΎΠ΄ΡΠ»ΠΈ Π² sys.modules Π² Π²ΠΈΠ΄Π΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ° StrictModule.
- Static Python — ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΡΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π±Π°ΠΉΡΠΊΠΎΠ΄Π°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠΉ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ ΡΠΈΠΏΠΎΠ² Π΄Π»Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ Π±Π°ΠΉΡΠΊΠΎΠ΄Π°, ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΎΠ³ΠΎ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ Π±ΡΡΡΡΠ΅Π΅ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ. Π Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠ΅ΡΡΠ°Ρ ΡΠΎΡΠ΅ΡΠ°Π½ΠΈΠ΅ Static Python ΠΈ JIT Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅Ρ ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π΄ΠΎ 7 ΡΠ°Π·, ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ ΡΠΈΠΏΠΎΠ²ΡΠΌ CPython. ΠΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ ΡΠΈΡΡΠ°ΡΠΈΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΎΡΠ΅Π½ΠΈΠ²Π°ΡΡΡΡ ΠΊΠ°ΠΊ Π±Π»ΠΈΠ·ΠΊΠΈΠ΅ ΠΊ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠ² MyPyC ΠΈ Cython.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: opennet.ru