Π—Π° Python Π΅ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ JIT ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€, ΠΊΠΎΠΉΡ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ° 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