ΠžΡΠ½ΠΎΠ²Π°Ρ‚Π΅Π»ΡΡ‚ Π½Π° QEMU ΠΈ FFmpeg ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π° QuickJS JavaScript Engine

ЀрСнският ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊ Ѐабрис Π‘Π΅Π»Π°Ρ€, ΠΊΠΎΠΉΡ‚ΠΎ основа ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ‚Π΅ QEMU ΠΈ FFmpeg, ΡΡŠΡ‰ΠΎ създадС Π½Π°ΠΉ-Π±ΡŠΡ€Π·Π°Ρ‚Π° Ρ„ΠΎΡ€ΠΌΡƒΠ»Π° Π·Π° изчисляванС Π½Π° числото Пи ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΈ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π½Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ BPG, ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π° ΠΏΡŠΡ€Π²ΠΎΡ‚ΠΎ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ Π½Π° новия Π΄Π²ΠΈΠ³Π°Ρ‚Π΅Π» Π½Π° JavaScript QuickJS. ДвигатСлят Π΅ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π΅Π½ ΠΈ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ Π·Π° ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€Π°Π½Π΅ Π² Π΄Ρ€ΡƒΠ³ΠΈ систСми. ΠšΠΎΠ΄ΡŠΡ‚ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π΅ написан Π½Π° C ΠΈ сС разпространява ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·Π° Π½Π° MIT. Налична Π΅ ΠΈ компилация Π½Π° двигатСля, ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½ Π² WebAssembly с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Emscripten ΠΈ подходящ Π·Π° изпълнСниС Π² Π±Ρ€Π°ΡƒΠ·ΡŠΡ€ΠΈ.

ВнСдряванС Π½Π° JavaScript ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° БпСцификация ES2019, Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, асинхронни Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΈ ΠΈ проксита. По ΠΈΠ·Π±ΠΎΡ€ сС ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Ρ‚ нСстандартни матСматичСски изчислСния Скспанзия Π·Π° JavaScript, ΠΊΠ°Ρ‚ΠΎ Ρ‚ΠΈΠΏΠΎΠ²Π΅ BigInt ΠΈ BigFloat, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ ΠΏΡ€Π΅Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅ Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°. ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»Π½ΠΎΡΡ‚Ρ‚Π° Π½Π° QuickJS Π΅ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½Π° ΠΏΡ€Π΅Π²ΡŠΠ·Ρ…ΠΎΠΆΠ΄Π° Π½Π°Π»ΠΈΡ‡Π½ΠΈ Π°Π½Π°Π»ΠΎΠ·ΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π² тСста
bench-v8 Π΅ ΠΏΡ€Π΅Π΄ двигатСля XS с 35%, Π΄ΡƒΠΊΡ‚Π΅ΠΉΠΏ ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΎΡ‚ Π΄Π²Π° ΠΏΡŠΡ‚ΠΈ jerryscript Ρ‚Ρ€ΠΈ ΠΏΡŠΡ‚ΠΈ ΠΈ MuJS сСдСм ΠΏΡŠΡ‚ΠΈ.

Π’ допълнСниС към Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° Π·Π° Π²Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° двигатСля Π² прилоТСния, ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΡŠΡ‚ ΠΏΡ€Π΅Π΄Π»Π°Π³Π° ΠΈ qjs ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€, ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° стартиранС Π½Π° JavaScript ΠΊΠΎΠ΄ ΠΎΡ‚ командния Ρ€Π΅Π΄. ОсвСн Ρ‚ΠΎΠ²Π° Π΅ Π½Π°Π»ΠΈΡ‡Π΅Π½ ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€ΡŠΡ‚ qjsc, способСн Π΄Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° ΠΈΠ·Ρ…ΠΎΠ΄Π½ΠΈ изпълними Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, подходящи Π·Π° самостоятСлно изпълнСниС, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π΅ изискват външни зависимости.

Основни характСристики:

  • ΠšΠΎΠΌΠΏΠ°ΠΊΡ‚Π΅Π½ ΠΈ лСсСн Π·Π° ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€Π°Π½Π΅ Π² Π΄Ρ€ΡƒΠ³ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ. ΠšΠΎΠ΄ΡŠΡ‚ Π²ΠΊΠ»ΡŽΡ‡Π²Π° само няколко C Ρ„Π°ΠΉΠ»Π°, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π΅ изискват външни зависимости Π·Π° асСмблиранС. Най-простото ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎΡ‚Π½Π΅ΠΌΠ° ΠΎΠΊΠΎΠ»ΠΎ 190 KB;
  • Много висока производитСлност ΠΈ ΠΊΡ€Π°Ρ‚ΠΊΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π·Π° стартиранС. ΠŸΡ€Π΅ΠΌΠΈΠ½Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° 56 хиляди тСста Π·Π° ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ с ECMAScript ΠΎΡ‚Π½Π΅ΠΌΠ° ΠΎΠΊΠΎΠ»ΠΎ 100 сСкунди, ΠΊΠΎΠ³Π°Ρ‚ΠΎ сС изпълнява Π½Π° Π΅Π΄Π½ΠΎ ядро ​​на ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ настолСн ΠΊΠΎΠΌΠΏΡŽΡ‚ΡŠΡ€. Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡΡ‚Π° ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° изпълнСниС ΠΎΡ‚Π½Π΅ΠΌΠ° ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ ΠΎΡ‚ 300 микросСкунди;
  • ΠŸΠΎΡ‡Ρ‚ΠΈ пълна ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° спСцификацията ES2019 ΠΈ пълна ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ B, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ Π·Π° ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ с наслСдСни ΡƒΠ΅Π± прилоТСния;
  • Пълно ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π²Π°Π½Π΅ Π½Π° всички тСстовС ΠΎΡ‚ ECMAScript Test Suite;
  • ΠŸΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅ Π½Π° Javascript ΠΊΠΎΠ΄ Π² изпълними Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π±Π΅Π· външни зависимости;
  • Π‘ΡŠΠ±ΠΈΡ€Π°Ρ‡ Π½Π° Π±ΠΎΠΊΠ»ΡƒΠΊ, Π±Π°Π·ΠΈΡ€Π°Π½ Π½Π° прСброяванС Π½Π° Ρ€Π΅Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈ Π±Π΅Π· Ρ†ΠΈΠΊΠ»ΠΈΡ‡Π½ΠΎ почистванС, ΠΊΠΎΠ΅Ρ‚ΠΎ Π½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ Π΄Π° постигнСм ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΈ Π΄Π° Π½Π°ΠΌΠ°Π»ΠΈΠΌ ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚;
  • Набор ΠΎΡ‚ Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΡ Π·Π° матСматичСски изчислСния Π² JavaScript;
  • Shell Π·Π° изпълнСниС Π½Π° ΠΊΠΎΠ΄ Π² Ρ€Π΅ΠΆΠΈΠΌ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π΅Π½ Ρ€Π΅Π΄, ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Ρ‰ контСкстно освСтяванС Π½Π° ΠΊΠΎΠ΄Π°;
  • ΠšΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Π° стандартна Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° с ΠΎΠ±Π²ΠΈΠ²ΠΊΠΈ Π½Π°Π΄ C Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π°.

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΡŠΡ‚ ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π° Ρ‚Ρ€ΠΈ ΡΡŠΠΏΡŠΡ‚ΡΡ‚Π²Π°Ρ‰ΠΈ C Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈ Π² QuickJS ΠΈ подходящи Π·Π° ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»Π½Π° ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π°:

  • libregexp - Π±ΡŠΡ€Π·ΠΎ внСдряванС Π½Π° рСгулярни ΠΈΠ·Ρ€Π°Π·ΠΈ, напълно ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΈ със спСцификацията Π½Π° Javascript ES 2019;
  • libunicode - ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° с Unicode;
  • libbf - Π Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΈ ΠΏΡ€Π΅Ρ†ΠΈΠ·Π½ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с ΠΏΠ»Π°Π²Π°Ρ‰Π° запСтая ΠΈ трансцСндСнтални Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с Ρ‚ΠΎΡ‡Π½ΠΎ Π·Π°ΠΊΡ€ΡŠΠ³Π»ΡΠ²Π°Π½Π΅.

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

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€