ΠΡΠ°Π½Π΄Ρ ΠΡΠΊΠ΅Ρ (Brandt Bucher) ΠΎΡ Microsoft, ΠΊΠΎΠΉΡΠΎ Π΅ ΡΠ°ΡΡ ΠΎΡ ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈ Π½Π° CPython ΠΈ ΡΠ°Π±ΠΎΡΠΈ Π² Π΅ΠΊΠΈΠΏ, Π·Π°Π½ΠΈΠΌΠ°Π²Π°Ρ ΡΠ΅ Ρ ΠΏΠΎΠ²ΠΈΡΠ°Π²Π°Π½Π΅ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π½Π° ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ° CPython, ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π° Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ Π½Π° JIT ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡ Π·Π° Python, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΡΠ΅Ρ Π½ΠΈΠΊΠ°ΡΠ° Copy-and-Patch. ΠΡΠ±Π»ΠΈΠΊΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° JIT Π΅ ΠΏΡΠΈΡΡΠΎΡΠ΅Π½ΠΎ Π·Π° ΠΠΎΠ»Π΅Π΄Π° ΠΈ Π°Π½ΠΎΠ½ΡΡΡ Π΅ Π½Π°ΠΏΠΈΡΠ°Π½ Π² ΡΡΠΈΡ ΠΎΠ²Π΅.
ΠΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡΡ JIT ΡΠ΅ ΠΎΡΠ»ΠΈΡΠ°Π²Π° Ρ ΠΈΠ·ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ Π²ΠΈΡΠΎΠΊΠ° ΡΠΊΠΎΡΠΎΡΡ Π½Π° Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΊΠΎΠ΄, Π»Π΅ΡΠ½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° ΠΈ ΠΏΡΠ»Π½Π° ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Ρ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ°. ΠΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡΡ ΠΌΠ΅ΡΠΎΠ΄ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π°Π½Π΅ Π½Π° ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ, Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° C, Π² JIT ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡ, Π±Π΅Π· ΠΎΡΠ΄Π΅Π»Π½ΠΎ ΡΠΎΡΠΌΠΈΡΠ°Π½Π΅ Π½Π° Π»ΠΎΠ³ΠΈΠΊΠ°ΡΠ° Π·Π° Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΊΠΎΠ΄ ΠΈ Π±Π΅Π· ΡΡΡΠ½ΠΎ ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° Π°ΡΠ΅ΠΌΠ±Π»Π΅ΡΠ½ΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ½ΠΈΡ. Π‘ ΡΠΎΠ·ΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄, ΠΊΠΎΡΠΈΠ³ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° Π³ΡΠ΅ΡΠΊΠ° Π² ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ ΡΠ΅ Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ ΠΎΡΡΡΡΠ°Π½ΡΠ²Π°Π½Π΅ Π½Π° ΡΡΡΠ°ΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π² JIT, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΎΠ±Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡ Π½Π° ΠΊΠΎΠ΄.
Π Π°Π±ΠΎΡΠ°ΡΠ° Π½Π° ΠΌΠ΅ΡΠΎΠ΄Π° Copy-and-Patch ΡΠ΅ ΠΎΡΠ½ΠΎΠ²Π°Π²Π° Π½Π° ΡΠ°ΠΊΡΠ°, ΡΠ΅ ΡΠ΅Π»ΠΎΠΊΠ°ΡΠΈΡΡΠ° Π½Π° ΠΊΠΎΠ΄ Π² ΠΏΠ°ΠΌΠ΅ΡΡΠ° ΠΏΡΠΈ Π·Π°ΡΠ΅ΠΆΠ΄Π°Π½Π΅ ΠΎΡ ΡΠ²ΡΡΠ·Π²Π°ΡΠΈΡ ΠΏΡΠ»Π½ΠΈΡΠ΅Π» Π½Π° ΠΎΠ±Π΅ΠΊΡΠ½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ ΠΈ ΠΏΠΎΠ΄ΠΌΡΠ½Π°ΡΠ° Π½Π° ΠΌΠ°ΡΠΈΠ½Π½ΠΈ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π²ΠΌΠ΅ΡΡΠΎ Π±Π°ΠΉΡΠΊΠΎΠ΄ Π² JIT ΡΠ° ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ Π·Π°Π΄Π°ΡΠΈ. ΠΡΠΈ ΡΠ°Π±ΠΎΡΠ° Π½Π° JIT Π² ΠΏΡΠΎΡΠ΅ΡΠ° Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π° ΠΏΡΠ΅Π³Π»Π΅Π΄ Π½Π° ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈΡΠ΅, ΡΡΠ·Π΄Π°Π΄Π΅Π½ΠΈ ΠΎΡ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ°, ΠΈ ΠΊΠΎΠΏΠΈΡΠ°Π½Π΅ Π·Π° Π²ΡΡΠΊΠ° ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ Π½Π° ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½ ΠΌΠ°ΡΠΈΠ½Π΅Π½ ΠΊΠΎΠ΄ Π² ΠΎΠ±Π»Π°ΡΡΡΠ° Π½Π° ΠΏΠ°ΠΌΠ΅ΡΡΠ° Ρ ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌ ΠΊΠΎΠ΄, ΠΊΠ°ΠΊΡΠΎ ΠΈ ΠΏΡΠΎΠΌΡΠ½Π° Π½Π° Π»Π΅ΡΠΎ Π½Π° ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈΡΠ΅ Π·Π° ΠΏΠΎΠ΄ΠΌΡΠ½Π° Π½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π°Π½ΠΈΡΠ΅ Π΄Π°Π½Π½ΠΈ (JIT ΠΊΠΎΠΏΠΈΡΠ° Π³ΠΎΡΠΎΠ²ΠΈ ΡΠ°Π±Π»ΠΎΠ½ΠΈ Π½Π° Π²Π΅ΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ ΠΏΠΎΠ΄ΠΌΠ΅Π½Ρ Π² ΡΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈΡΠ΅ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ, ΠΊΠ°ΡΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΈ ΠΈ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠΈ). ΠΡΠΈ Π·Π°ΡΠ΅ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΎΠ±Π΅ΠΊΡΠ½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ ΡΡΡΠΎ ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π° ΠΊΠΎΠΏΠΈΡΠ°Π½Π΅ Π½Π° ΠΌΠ°ΡΠΈΠ½Π΅Π½ ΠΊΠΎΠ΄ Π² ΠΏΠ°ΠΌΠ΅ΡΡΠ° ΠΈ ΠΏΠΎΠ΄ΠΌΡΠ½Π° Π½Π° Π²ΡΠ½ΡΠ½ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈ.
Π Copy-and-Patch JIT Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° LLVM ΡΠ΅ ΡΡΠ±ΠΈΡΠ° ΠΎΠ±Π΅ΠΊΡΠ΅Π½ ΡΠ°ΠΉΠ» Π² ΡΠΎΡΠΌΠ°Ρ ELF, ΠΊΠΎΠΉΡΠΎ ΡΡΠ΄ΡΡΠΆΠ° Π΄Π°Π½Π½ΠΈ Π·Π° ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈΡΠ΅ Π½Π° Π±Π°ΠΉΡΠΊΠΎΠ΄ ΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ°ΡΠ° Π·Π°ΠΌΡΠ½Π° Π½Π° Π΄Π°Π½Π½ΠΈ. JIT Π·Π°ΠΌΠ΅ΡΡΠ²Π° ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈΡΠ΅ Π½Π° Π±Π°ΠΉΡΠΊΠΎΠ΄, Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½ΠΈ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΈΡ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ°, Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ½ΠΈΡ Π² ΠΌΠ°ΡΠΈΠ½Π΅Π½ ΠΊΠΎΠ΄, ΠΊΠ°ΡΠΎ Π² ΡΡΡΠΎΡΠΎ Π²ΡΠ΅ΠΌΠ΅ ΠΏΠΎΠ΄ΠΌΠ΅Π½Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈΡΠ΅ Π΄Π°Π½Π½ΠΈ Π·Π° ΠΈΠ·ΡΠΈΡΠ»Π΅Π½ΠΈΡ. Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡΡΠ° Π½Π° JIT ΠΈΠ·ΠΈΡΠΊΠ²Π° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ ΠΎΡ LLVM Π½Π° Π΅ΡΠ°ΠΏΠ° Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π΅, Π½ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈΡΠ΅ Π½Π° Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π΅ ΡΠ° ΠΎΠ±Π²ΡΡΠ·Π°Π½ΠΈ Ρ Π²ΡΠ½ΡΠ½ΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΈ ΡΠ΅ ΡΠ²Π΅ΠΆΠ΄Π°Ρ Π΄ΠΎ ΠΎΠΊΠΎΠ»ΠΎ 300 ΡΡΡΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈ ΡΠ΅Π΄Π° Π½Π° C ΠΈ 3000 Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½ΠΈ ΡΠ΅Π΄Π° ΠΊΠΎΠ΄ Π½Π° C.
Π ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Ρ ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΠΈΡ JIT ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠΌ (LLVM -O0), ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΎΡΠΎ JIT ΠΎΡΠΈΠ³ΡΡΡΠ²Π° 100 ΠΏΡΡΠΈ ΠΏΠΎ-Π±ΡΡΠ·ΠΎ Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΊΠΎΠ΄ ΠΈ Ρ 15% ΠΏΠΎ-Π±ΡΡΠ· ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠ΅Π½ ΠΊΠΎΠ΄. Π ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Ρ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡΡΠ° Π² WebAssembly (Liftoff) Π½ΠΎΠ²ΠΎΡΠΎ JIT Π³Π΅Π½Π΅ΡΠΈΡΠ° ΠΊΠΎΠ΄ 5 ΠΏΡΡΠΈ ΠΏΠΎ-Π±ΡΡΠ·ΠΎ, Π° ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠ½ΠΈΡΡ ΠΊΠΎΠ΄ ΡΠ°Π±ΠΎΡΠΈ Ρ 50% ΠΏΠΎ-Π±ΡΡΠ·ΠΎ. ΠΠΎΠ³Π°ΡΠΎ ΡΡΠ°Π²Π½ΡΠ²Π°ΠΌΠ΅ Π½ΠΎΠ²ΠΎΡΠΎ JIT Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°ΡΠΎΡΠΎ JIT (LuaJIT), ΠΊΠΎΠ΅ΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΡΡΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Π½ ΠΊΠΎΠ΄ Π½Π° Π°ΡΠ΅ΠΌΠ±Π»Π΅Ρ, ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½Π°ΡΠ° Π²Π΅ΡΡΠΈΡ ΡΠ΅ ΠΎΠΊΠ°Π·Π²Π° ΠΏΠΎ-Π±ΡΡΠ·Π° Π² 13 ΠΎΡ 44 ΡΠ΅ΡΡΠ°, Π° Π² ΡΡΠ΅Π΄Π½ΠΎ ΠΈΠ·ΠΎΡΡΠ°Π²Π° ΠΏΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡ Ρ 35%, ΠΏΡΠΈ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΠΎΠΏΡΠΎΡΡΡΠ²Π°Π½Π΅ Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°ΡΠ° ΠΈ Π½Π°ΠΌΠ°Π»ΡΠ²Π°Π½Π΅ Π½Π° ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡΠ° Π½Π° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡΡΠ°.

ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru
