QEMU рдЖрдгрд┐ FFmpeg рдЪреНрдпрд╛ рд╕рдВрд╕реНрдерд╛рдкрдХрд╛рдиреЗ QuickJS JavaScript рдЗрдВрдЬрд┐рди рдкреНрд░рдХрд╛рд╢рд┐рдд рдХреЗрд▓реЗ

рдлреНрд░реЗрдВрдЪ рдЧрдгрд┐рддрдЬреНрдЮ рдлреЕрдмреНрд░рд┐рд╕ рдмреЗрд▓рд╛рд░реНрдб, рдЬреНрдпрд╛рдВрдиреА QEMU рдЖрдгрд┐ FFmpeg рдкреНрд░рдХрд▓реНрдкрд╛рдВрдЪреА рд╕реНрдерд╛рдкрдирд╛ рдХреЗрд▓реА, рддреНрдпрд╛рдВрдиреА Pi рдЧрдгрдиреЗрд╕рд╛рдареА рд╕рд░реНрд╡рд╛рдд рд╡реЗрдЧрд╡рд╛рди рд╕реВрддреНрд░ рджреЗрдЦреАрд▓ рддрдпрд╛рд░ рдХреЗрд▓реЗ рдЖрдгрд┐ рдкреНрд░рддрд┐рдорд╛ рд╕реНрд╡рд░реВрдк рд╡рд┐рдХрд╕рд┐рдд рдХреЗрд▓реЗ. рдмреАрдкреАрдЬреА, рдирд╡реАрди JavaScript рдЗрдВрдЬрд┐рдирдЪреЗ рдкрд╣рд┐рд▓реЗ рдкреНрд░рдХрд╛рд╢рди рдкреНрд░рдХрд╛рд╢рд┐рдд рдХреЗрд▓реЗ QuickJS. рдЗрдВрдЬрд┐рди рдХреЙрдореНрдкреЕрдХреНрдЯ рдЖрд╣реЗ рдЖрдгрд┐ рдЗрддрд░ рдкреНрд░рдгрд╛рд▓реАрдВрдордзреНрдпреЗ рдПрдХрддреНрд░реАрдХрд░рдгрд╛рд╕рд╛рдареА рдбрд┐рдЭрд╛рдЗрди рдХреЗрд▓реЗрд▓реЗ рдЖрд╣реЗ. рдкреНрд░рдХрд▓реНрдк рдХреЛрдб C рдордзреНрдпреЗ рд▓рд┐рд╣рд┐рд▓реЗрд▓рд╛ рдЖрд╣реЗ рдЖрдгрд┐ MIT рдкрд░рд╡рд╛рдиреНрдпрд╛рдЕрдВрддрд░реНрдЧрдд рд╡рд┐рддрд░рд┐рдд рдХреЗрд▓рд╛ рдЬрд╛рддреЛ. рдПрдореНрд╕реНрдХреНрд░рд┐рдкреНрдЯрди рд╡рд╛рдкрд░реВрди рд╡реЗрдмрдЕрд╕реЗрдВрдмрд▓реАрдордзреНрдпреЗ рд╕рдВрдХрд▓рд┐рдд рдХреЗрд▓реЗрд▓реЗ рдЖрдгрд┐ рдмреНрд░рд╛рдЙрдЭрд░рдордзреНрдпреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдпреЛрдЧреНрдп рдЕрд╕рд▓реЗрд▓реЗ рдЗрдВрдЬрд┐рдирдЪреЗ рдмрд┐рд▓реНрдб рджреЗрдЦреАрд▓ рдЙрдкрд▓рдмреНрдз рдЖрд╣реЗ.

JavaScript рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рд╕рдорд░реНрдерди ES2019 рддрдкрд╢реАрд▓, рдореЙрдбреНрдпреВрд▓, рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдЬрдирд░реЗрдЯрд░ рдЖрдгрд┐ рдкреНрд░реЙрдХреНрд╕реАрд╕рд╣. рдЧреИрд░-рдорд╛рдирдХ рдЧрдгрд┐рддреЗ рд╡реИрдХрд▓реНрдкрд┐рдХрд░рд┐рддреНрдпрд╛ рд╕рдорд░реНрдерд┐рдд рдЖрд╣реЗрдд рд╡рд┐рд╕реНрддрд╛рд░ JavaScript рд╕рд╛рдареА, рдЬрд╕реЗ рдХреА BigInt рдЖрдгрд┐ BigFloat рдкреНрд░рдХрд╛рд░, рддрд╕реЗрдЪ рдСрдкрд░реЗрдЯрд░ рдУрд╡реНрд╣рд░рд▓реЛрдбрд┐рдВрдЧ. QuickJS рдЪреА рдХрд╛рдордЧрд┐рд░реА рд▓рдХреНрд╖рдгреАрдп рдЖрд╣реЗ рдЪреНрдпрд╛рдкреЗрдХреНрд╖рд╛ рд╢реНрд░реЗрд╖реНрда рдЙрдкрд▓рдмреНрдз analogues, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдЪрд╛рдЪрдгреА рдордзреНрдпреЗ
bench-v8 рдЗрдВрдЬрд┐рдирдЪреНрдпрд╛ рдкреБрдвреЗ рдЖрд╣реЗ XS 35%рд╡рд░, рдбрдХрдЯреЗрдк рджреБрдкреНрдкрдЯ рдкреЗрдХреНрд╖рд╛ рдЬрд╛рд╕реНрдд рдЬреЗрд░реАрд╕реНрдХреНрд░рд┐рдкреНрдЯ рддреАрди рд╡реЗрд│рд╛ рдЖрдгрд┐ MuJS рд╕рд╛рдд рд╡реЗрд│рд╛

рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕рдордзреНрдпреЗ рдЗрдВрдЬрд┐рди рдПрдореНрдмреЗрдб рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд▓рд╛рдпрдмреНрд░рд░реА рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреНрдпреВрдЬреЗрдПрд╕ рдЗрдВрдЯрд░рдкреНрд░рд┐рдЯрд░ рджреЗрдЦреАрд▓ рджреЗрддреЗ, рдЬреНрдпрд╛рдЪрд╛ рд╡рд╛рдкрд░ рдХрдорд╛рдВрдб рд▓рд╛рдЗрдирд╡рд░реВрди JavaScript рдХреЛрдб рдЪрд╛рд▓рд╡рдгреНрдпрд╛рд╕рд╛рдареА рдХреЗрд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ. рд╢рд┐рд╡рд╛рдп, qjsc рдХрдВрдкрд╛рдЗрд▓рд░ рдЙрдкрд▓рдмреНрдз рдЖрд╣реЗ, рдмрд╛рд╣реНрдп рдЕрд╡рд▓рдВрдмрдирд╛рдВрдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╕рд▓реЗрд▓реНрдпрд╛ рд╕реНрдЯрдБрдб-рдЕрд▓реЛрди рдПрдХреНрдЭрд┐рдХреНрдпреВрд╢рдирд╕рд╛рдареА рдпреЛрдЧреНрдп рдЖрдЙрдЯрдкреБрдЯ рдПрдХреНрдЭрд┐рдХреНрдпреБрдЯреЗрдмрд▓ рдлрд╛рдЗрд▓реНрд╕ рдирд┐рд░реНрдорд╛рдг рдХрд░рдгреНрдпрд╛рд╕ рд╕рдХреНрд╖рдо рдЖрд╣реЗ.

рдореБрдЦреНрдп рд╡реИрд╢рд┐рд╖реНрдЯреНрдпреЗ:

  • рдХреЙрдореНрдкреЕрдХреНрдЯ рдЖрдгрд┐ рдЗрддрд░ рдкреНрд░рдХрд▓реНрдкрд╛рдВрдордзреНрдпреЗ рд╕рдорд╛рдХрд▓рд┐рдд рдХрд░рдгреЗ рд╕реЛрдкреЗ рдЖрд╣реЗ. рдХреЛрдбрдордзреНрдпреЗ рдлрдХреНрдд рдХрд╛рд╣реА C рдлрд╛рдЗрд▓реНрд╕ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЖрд╣реЗрдд рдЬреНрдпрд╛рдВрдирд╛ рдЕрд╕реЗрдВрдмрд▓реАрд╕рд╛рдареА рдмрд╛рд╣реНрдп рдЕрд╡рд▓рдВрдмрдирд╛рдВрдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╕рддреЗ. рд╕рд░реНрд╡рд╛рдд рд╕реЛрдкрд╛ рд╕рдВрдХрд▓рд┐рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕реБрдорд╛рд░реЗ 190 KB рдШреЗрддреЗ;
  • рдЦреВрдк рдЙрдЪреНрдЪ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЖрдгрд┐ рд▓рд╣рд╛рди рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рд╡реЗрд│. 56 рд╣рдЬрд╛рд░ ECMAScript рд╕реБрд╕рдВрдЧрддрддрд╛ рдЪрд╛рдЪрдгреНрдпрд╛ рдЙрддреНрддреАрд░реНрдг рд╣реЛрдгреНрдпрд╛рд╕ рд╕реБрдорд╛рд░реЗ 100 рд╕реЗрдХрдВрдж рд▓рд╛рдЧрддрд╛рдд рдЬреЗрд╡реНрд╣рд╛ рдирд┐рдпрдорд┐рдд рдбреЗрд╕реНрдХрдЯреЙрдк рдкреАрд╕реАрдЪреНрдпрд╛ рдПрдХрд╛рдЪ рдХреЛрд░рд╡рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддреЗ. рд░рдирдЯрд╛рдЗрдо рд╕реБрд░реВ рд╣реЛрдгреНрдпрд╛рд╕ рейрежреж рдорд╛рдпрдХреНрд░реЛрд╕реЗрдХрдВрджрд╛рдВрдкреЗрдХреНрд╖рд╛ рдХрдореА рд╡реЗрд│ рд▓рд╛рдЧрддреЛ;
  • ES2019 рддрдкрд╢реАрд▓рд╛рд╕рд╛рдареА рдЬрд╡рд│рдЬрд╡рд│ рдкреВрд░реНрдг рд╕рдорд░реНрдерди рдЖрдгрд┐ рдкрд░рд┐рд╢рд┐рд╖реНрдЯ B рд╕рд╛рдареА рдкреВрд░реНрдг рд╕рдорд░реНрдерди, рдЬреЗ рд▓реАрдЧреЗрд╕реА рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╛рдВрд╕рд╣ рд╕реБрд╕рдВрдЧрддрддреЗрд╕рд╛рдареА рдШрдЯрдХ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ;
  • ECMAScript рдЪрд╛рдЪрдгреА рд╕реВрдЯрдордзреВрди рд╕рд░реНрд╡ рдЪрд╛рдЪрдгреНрдпрд╛ рдкреВрд░реНрдг рдХрд░рдгреЗ;
  • рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдмрд╛рд╣реНрдп рдЕрд╡рд▓рдВрдмрдирд╛рд╢рд┐рд╡рд╛рдп рдПрдХреНрдЭрд┐рдХреНрдпреВрдЯреЗрдмрд▓ рдлрд╛рдЗрд▓реНрд╕рдордзреНрдпреЗ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕рдорд░реНрдерди;
  • рдЪрдХреНрд░реАрдп рд╕рд╛рдлрд╕рдлрд╛рдИрд╢рд┐рд╡рд╛рдп рд╕рдВрджрд░реНрдн рдореЛрдЬрдгреАрд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╛рд╣рдХ, рдЬреНрдпрд╛рдиреЗ рдЖрдореНрд╣рд╛рд▓рд╛ рдЕрдВрджрд╛рдЬреЗ рд╡рд╛рдЧрдгреВрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рдгреНрдпрд╛рд╕ рдЖрдгрд┐ рдореЗрдорд░реА рд╡рд╛рдкрд░ рдХрдореА рдХрд░рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджрд┐рд▓реА;
  • JavaScript рдордзреАрд▓ рдЧрдгрд┐рддреАрдп рдЧрдгрдиреЗрд╕рд╛рдареА рд╡рд┐рд╕реНрддрд╛рд░рд╛рдВрдЪрд╛ рд╕рдВрдЪ;
  • рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдореЛрдбрдордзреНрдпреЗ рдХреЛрдб рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╢реЗрд▓, рд╕рдВрджрд░реНрднрд┐рдд рдХреЛрдб рд╣рд╛рдпрд▓рд╛рдЗрдЯрд┐рдВрдЧрд▓рд╛ рд╕рдорд░реНрдерди рджреЗрддреЗ;
  • рд╕реА рд▓рд╛рдпрдмреНрд░рд░реАрд╡рд░ рд░реЕрдкрд░реНрд╕рд╕рд╣ рдХреЙрдореНрдкреЕрдХреНрдЯ рдорд╛рдирдХ рд▓рд╛рдпрдмреНрд░рд░реА.

рдкреНрд░рдХрд▓реНрдк QuickJS рдордзреНрдпреЗ рд╕рд╛рдореАрд▓ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдЖрдгрд┐ рд╡реИрдпрдХреНрддрд┐рдХ рд╡рд╛рдкрд░рд╛рд╕рд╛рдареА рдпреЛрдЧреНрдп рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рддреАрди рд╕реЛрдмрддрдЪреНрдпрд╛ C рд▓рд╛рдпрдмреНрд░рд░реА рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдд рдЖрд╣реЗ:

  • libregexp - рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддреАрдВрдЪреА рдЬрд▓рдж рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА, Javascript ES 2019 рддрдкрд╢реАрд▓рд╛рд╢реА рдкреВрд░реНрдгрдкрдгреЗ рд╕реБрд╕рдВрдЧрдд;
  • libunicode - рдпреБрдирд┐рдХреЛрдбрд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд▓рд╛рдпрдмреНрд░рд░реА;
  • libbf - рдЕрдЪреВрдХ рд░рд╛рдЙрдВрдбрд┐рдВрдЧрд╕рд╣ рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рдЕрдЪреВрдХ рдлреНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдСрдкрд░реЗрд╢рдиреНрд╕ рдЖрдгрд┐ рдЯреНрд░рд╛рдиреНрд╕реЗрдВрдбреЗрдВрдЯрд▓ рдлрдВрдХреНрд╢рдиреНрд╕рдЪреА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА.

рд╕реНрддреНрд░реЛрдд: opennet.ru

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛