ΠΡΠ°Π½Π΄ ΠΡΠΊΠ΅Ρ (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
