ΠžΡΠ½ΠΎΠ²Π°Ρ‚Π΅Π»ΡΡ‚ Π½Π° QEMU ΠΈ FFmpeg ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π° JavaScript двигатСля Micro QuickJS.

ЀрСнският ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊ Ѐабрис Π‘Π΅Π»Π°Ρ€ (Fabrice Bellard), основатСл Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ ΠΊΠ°Ρ‚ΠΎ QEMU, FFmpeg, BPG, QuickJS, TinyGL ΠΈ TinyCC, ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π° Π½ΠΎΠ² JavaScript Π΄Π²ΠΈΠ³Π°Ρ‚Π΅Π» Π·Π° Π²Π³Ρ€Π°Π΄Π΅Π½ΠΈ систСми β€” Micro QuickJS, способСн Π΄Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π° ΠΈ изпълнява JavaScript ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ, потрСблявайки само 10 ΠšΠ‘ RAM. Π’ ΡΡŠΡ‡Π΅Ρ‚Π°Π½ΠΈΠ΅ с C Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π°, двигатСлят Π·Π°Π΅ΠΌΠ° ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»Π½ΠΎ 100 ΠšΠ‘ постоянна ΠΏΠ°ΠΌΠ΅Ρ‚. Π’ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅ Π½Π° JavaScript Π² Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄ ΠΈ ΠΎΡ‚Π΄Π΅Π»Π½ΠΎ изпълнСниС Π½Π° Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄Π°. ΠšΠΎΠ΄ΡŠΡ‚ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π΅ написан Π½Π° C ΠΈ сС разпространява ΠΏΠΎΠ΄ MIT Π»ΠΈΡ†Π΅Π½Π·.

ДвигатСлят ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° подмноТСство Π½Π° JavaScript, Π±Π»ΠΈΠ·ΠΊΠΎ Π΄ΠΎ спСцификацията ECMAScript 5 (ES2019), Π½ΠΎ ΠΈΠΌΠ° ΠΏΠΎ-строги изисквания към ΠΊΠΎΠ΄Π° ΠΈ Π½Π΅ допуска ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° някои Π½Π΅Π΅Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΈ ΠΈΠ»ΠΈ Π²ΠΎΠ΄Π΅Ρ‰ΠΈ Π΄ΠΎ Π³Ρ€Π΅ΡˆΠΊΠΈ JavaScript конструкции. НапримСр, Π³Π»ΠΎΠ±Π°Π»Π½ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ трябва Π·Π°Π΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΎ Π΄Π° сС Π΄Π΅ΠΊΠ»Π°Ρ€ΠΈΡ€Π°Ρ‚ с ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π°Ρ‚Π° Π΄ΡƒΠΌΠ° Β«varΒ», ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Β«withΒ» Π΅ Π·Π°Π±Ρ€Π°Π½Π΅Π½ΠΎ, масивитС Π½Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‚ пропуски, инициализацията ΠΏΡ€ΠΈ обявлСниС ΠΎΡ‚ Π²ΠΈΠ΄Π° Β«new Number(1)Β» Π΅ нСвъзмоТна, Π° Π΄ΠΎΡΡ‚ΡŠΠΏΡŠΡ‚ Π΄ΠΎ Π»ΠΎΠΊΠ°Π»Π½ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ ΠΎΡ‚ eval Π΅ Π·Π°Π±Ρ€Π°Π½Π΅Π½.

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»Π½ΠΎΡΡ‚Ρ‚Π° Π½Π° Micro QuickJS Π΅ Π±Π»ΠΈΠ·ΠΊΠ° Π΄ΠΎ двигатСлят QuickJS, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π°Π½ ΠΎΡ‚ Ѐабрис ΠΎΡ‚ 2019 Π³. Π’ Micro QuickJS Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π° част ΠΎΡ‚ ΠΊΠΎΠ΄Π° Π½Π° QuickJS, Π½ΠΎ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°Ρ‚Π° Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ сС Ρ€Π°Π·Π»ΠΈΡ‡Π°Π²Π° ΠΈ Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€Π°Π½Π° Π·Π° ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½ΠΎ ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚. НапримСр, Π² Micro QuickJS Π΅ Π²Π½Π΅Π΄Ρ€Π΅Π½ трасирСн сборщик Π½Π° Π±ΠΎΠΊΠ»ΡƒΠΊΠ°, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ Π² QuickJS сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° подсчСт Π½Π° Ρ€Π΅Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈ. Π Π°Π·Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ Π·Π° ΡΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° Π±ΠΎΠΊΠ»ΡƒΠΊΠ° са само няколко Π±ΠΈΡ‚Π° Π½Π° всСки Π·Π°Π΄Π΅Π»Π΅Π½ Π±Π»ΠΎΠΊ ΠΏΠ°ΠΌΠ΅Ρ‚. Π—Π° задСлянС Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° собствСн Π°Π»ΠΎΠΊΠ°Ρ‚ΠΎΡ€, нСзависим ΠΎΡ‚ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½Π°Ρ‚Π° функция malloc().

Π”Ρ€ΡƒΠ³ΠΈ Ρ€Π°Π·Π»ΠΈΠΊΠΈ ΠΎΡ‚ QuickJS: Π½Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° стСк; Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½Π° машина; Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎ Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½ΠΎ прСдставянС Π½Π° ΠΎΠ±Π΅ΠΊΡ‚ΠΈΡ‚Π΅; ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π½Π° Π½ΠΈΠ·ΠΎΠ²Π΅Ρ‚Π΅ Π² UTF-8 ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ°; Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° стандартната Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° компилация ΠΈ Π½Π΅ΠΉΠ½ΠΎΡ‚ΠΎ ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π² постоянна ΠΏΠ°ΠΌΠ΅Ρ‚ с Ρ„ΠΎΡ€ΠΌΠΈΡ€Π°Π½Π΅ Π½Π° само няколко ΠΎΠ±Π΅ΠΊΡ‚Π° Π² RAM; парсСр, близък Π΄ΠΎ QuickJS, Π½ΠΎ Π½Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‰ рСкурсия; ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°Π½Π΅ Π² Π΅Π΄ΠΈΠ½ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ Π½Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄ ΠΈ оптимизация (Π² QuickJS ΠΈΠΌΠ° няколко ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π° Π·Π° оптимизация).

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

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