ΠžΡΠ½ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ QEMU ΠΈ FFmpeg ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π» JavaScript-Π΄Π²ΠΈΠΆΠΎΠΊ Micro QuickJS

Ѐранцузский ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊ Ѐабрис Π‘Π΅Π»Π»Π°Ρ€ (Fabrice Bellard), основавший Π² своё врСмя ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ QEMU, FFmpeg, BPG, QuickJS, TinyGL ΠΈ TinyCC, ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π» Π½ΠΎΠ²Ρ‹ΠΉ JavaScript-Π΄Π²ΠΈΠΆΠΎΠΊ для встраиваСмых систСм β€” Micro QuickJS, способный ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ JavaScript-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, потрСбляя всСго 10 ΠšΠ‘ ΠžΠ—Π£. ВмСстС с Π‘ΠΈ-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ Π΄Π²ΠΈΠΆΠΎΠΊ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ 100 ΠšΠ‘ постоянной памяти. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Π° компиляция JavaScript Π² Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄ ΠΈ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ запуск Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄Π°. Код ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° написан Π½Π° языкС Π‘ΠΈ ΠΈ распространяСтся ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ MIT.

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

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Micro QuickJS Π±Π»ΠΈΠ·ΠΊΠ° ΠΊ Π΄Π²ΠΈΠΆΠΊΡƒ QuickJS, Ρ€Π°Π·Π²ΠΈΠ²Π°Π΅ΠΌΠΎΠΌΡƒ Ѐабрисом c 2019 Π³ΠΎΠ΄Π°. Π’ Micro QuickJS задСйствована Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° ΠΈΠ· Π΄Π²ΠΈΠΆΠΊΠ° QuickJS, Π½ΠΎ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ отличаСтся ΠΈ спроСктирована для минимального потрСблСния памяти. НапримСр, Π² Micro QuickJS задСйствован Ρ‚Ρ€Π°ΡΡΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ сборщик мусора, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ Π² QuickJS использован подсчёт ссылок. НакладныС расходы сборщика мусора ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ всСго нСсколько Π±ΠΈΡ‚ Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Π±Π»ΠΎΠΊ памяти. Для выдСлСния памяти ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ собствСнный Π°Π»Π»ΠΎΠΊΠ°Ρ‚ΠΎΡ€, Π½Π΅ зависящий ΠΎΡ‚ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ malloc().

Π”Ρ€ΡƒΠ³ΠΈΠ΅ отличия ΠΎΡ‚ QuickJS: Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π°Ρ стСк Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ машина; ΠΈΠ½ΠΎΠ΅ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ прСдставлСниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²; Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ строк Π² ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ΅ UTF-8; гСнСрация стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π²ΠΎ врСмя компиляции ΠΈ Π΅Ρ‘ Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π² постоянной памяти с созданиСм Π² ΠžΠ—Π£ всСго Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²; Π±Π»ΠΈΠ·ΠΊΠΈΠΉ ΠΊ QuickJS, Π½ΠΎ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΡŽ, парсСр; совмСщСниС Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π΅ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄Π° ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ (Π² QuickJS имССтся нСсколько ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΎΠ² для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ).

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

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ