ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ Π΅ JIT ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€ Π·Π° Python, ΠΊΠΎΠΉΡ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ°Ρ‚Π° copy-and-patch.

Π‘Ρ€Π°Π½Π΄ Π‘ΡƒΠΊΠ΅Ρ€ (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
ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster