QEMU ๋ฐ FFmpeg ์„ค๋ฆฝ์ž, QuickJS JavaScript ์—”์ง„ ๊ณต๊ฐœ

ํ•œ๋•Œ QEMU ๋ฐ FFmpeg ํ”„๋กœ์ ํŠธ๋ฅผ ์„ค๋ฆฝํ–ˆ์œผ๋ฉฐ ํŒŒ์ด ๊ณ„์‚ฐ์„ ์œ„ํ•œ ๊ฐ€์žฅ ๋น ๋ฅธ ๊ณต์‹์„ ๋งŒ๋“ค๊ณ  ์ด๋ฏธ์ง€ ํ˜•์‹์„ ๊ฐœ๋ฐœํ•œ ํ”„๋ž‘์Šค ์ˆ˜ํ•™์ž Fabrice Bellard BPG, ์ƒˆ๋กœ์šด JavaScript ์—”์ง„์˜ ์ฒซ ๋ฒˆ์งธ ๋ฆด๋ฆฌ์Šค ๊ฒŒ์‹œ QuickJS. ์—”์ง„์€ ์ฝคํŒฉํŠธํ•˜๋ฉฐ ๋‹ค๋ฅธ ์‹œ์Šคํ…œ์— ์ž„๋ฒ ๋”ฉํ•˜๋Š” ๋ฐ ์ค‘์ ์„ ๋‘ก๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ์ฝ”๋“œ๋Š” C๋กœ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ MIT ๋ผ์ด์„ ์Šค์— ๋”ฐ๋ผ ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค. Emscripten์„ ์‚ฌ์šฉํ•˜์—ฌ WebAssembly๋กœ ์ปดํŒŒ์ผ๋˜๊ณ  ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰ํ•˜๊ธฐ์— ์ ํ•ฉํ•œ ์—”์ง„ ์–ด์…ˆ๋ธ”๋ฆฌ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ตฌํ˜„ ะฟะพะดะดะตั€ะถะธะฒะฐะตั‚ ๋ชจ๋“ˆ, ๋น„๋™๊ธฐ ์ƒ์„ฑ๊ธฐ ๋ฐ ํ”„๋ก์‹œ๋ฅผ ํฌํ•จํ•œ ES2019 ์‚ฌ์–‘. ๋น„ํ‘œ์ค€ ์ˆ˜ํ•™์€ ์„ ํƒ์ ์œผ๋กœ ์ง€์›๋ฉ๋‹ˆ๋‹ค. ํ™•์žฅ BigInt ๋ฐ BigFloat ์œ ํ˜•๊ณผ ๊ฐ™์€ JavaScript์šฉ ์—ฐ์‚ฐ์ž ์˜ค๋ฒ„๋กœ๋”ฉ. ์„ฑ๋Šฅ๋ฉด์—์„œ QuickJS๋Š” ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๋Šฅ๊ฐ€ํ•˜๋‹ค ์˜ˆ๋ฅผ ๋“ค์–ด ํ…Œ์ŠคํŠธ์—์„œ ๊ธฐ์กด ์•„๋‚ ๋กœ๊ทธ
๋ฒค์น˜-v8์€ ์—”์ง„๋ณด๋‹ค ์•ž์„œ ์žˆ์Šต๋‹ˆ๋‹ค. XS 35 % ๋•ํ…Œ์ดํ”„ ๋‘ ๋ฒˆ ์ด์ƒ ์ œ๋ฆฌ์Šคํฌ๋ฆฝํŠธ ์„ธ ๋ฒˆ ๊ทธ๋ฆฌ๊ณ  MuJS ์ผ๊ณฑ ๋ฒˆ.

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์—”์ง„์„ ๋‚ด์žฅํ•˜๊ธฐ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์™ธ์—๋„ ์ด ํ”„๋กœ์ ํŠธ๋Š” ๋ช…๋ น์ค„์—์„œ JavaScript ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” qjs ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์™ธ๋ถ€ ์ข…์†์„ฑ์ด ํ•„์š”ํ•˜์ง€ ์•Š์€ ๋…๋ฆฝํ˜• ์‹คํ–‰ ํŒŒ์ผ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” qjsc ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฃผ์š” ๊ธฐ๋Šฅ :

  • ์ปดํŒฉํŠธํ•˜๊ณ  ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ์— ์‰ฝ๊ฒŒ ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ฝ”๋“œ์—๋Š” ๋นŒ๋“œํ•˜๋Š” ๋ฐ ์™ธ๋ถ€ ์ข…์†์„ฑ์ด ํ•„์š”ํ•˜์ง€ ์•Š์€ ๋ช‡ ๊ฐœ์˜ C ํŒŒ์ผ๋งŒ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ๋œ ๊ฐ„๋‹จํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์•ฝ 190KB๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ๋งค์šฐ ๋†’์€ ์„ฑ๋Šฅ๊ณผ ์งง์€ ์‹œ์ž‘ ์‹œ๊ฐ„. 56๊ฐœ์˜ ECMAScript ํ˜ธํ™˜์„ฑ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•˜๋Š” ๋ฐ๋Š” ์ผ๋ฐ˜์ ์ธ ๋ฐ์Šคํฌํ†ฑ PC์˜ ๋‹จ์ผ ์ฝ”์–ด์—์„œ ์‹คํ–‰ํ•  ๋•Œ ์•ฝ 100์ดˆ๊ฐ€ ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค. ๋Ÿฐํƒ€์ž„ ์ดˆ๊ธฐํ™”์—๋Š” 300๋งˆ์ดํฌ๋กœ์ดˆ ๋ฏธ๋งŒ์ด ์†Œ์š”๋ฉ๋‹ˆ๋‹ค.
  • ES2019 ์‚ฌ์–‘์„ ๊ฑฐ์˜ ์™„๋ฒฝํ•˜๊ฒŒ ์ง€์›ํ•˜๊ณ  ์ด์ „ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ์˜ ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์ •์˜ํ•˜๋Š” Annex B๋ฅผ ์™„๋ฒฝํ•˜๊ฒŒ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • ECMAScript Test Suite์˜ ๋ชจ๋“  ํ…Œ์ŠคํŠธ ํ†ต๊ณผ ์™„๋ฃŒ
  • ์™ธ๋ถ€ ์ข…์†์„ฑ ์—†์ด Javascript ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ ํŒŒ์ผ๋กœ ์ปดํŒŒ์ผ ์ง€์›
  • ํด๋ฆฐ์—… ์ฃผ๊ธฐ๊ฐ€ ์—†๋Š” ์ฐธ์กฐ ํšŸ์ˆ˜ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๋กœ ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ๋™์ž‘์„ ํ—ˆ์šฉํ•˜๊ณ  ๋ฉ”๋ชจ๋ฆฌ ์†Œ๋น„๋ฅผ ์ค„์ž…๋‹ˆ๋‹ค.
  • JavaScript ์–ธ์–ด์˜ ์ˆ˜ํ•™์  ๊ณ„์‚ฐ์„ ์œ„ํ•œ ํ™•์žฅ ์ง‘ํ•ฉ์ž…๋‹ˆ๋‹ค.
  • ์ปจํ…์ŠคํŠธ ์ฝ”๋“œ ๊ฐ•์กฐ ํ‘œ์‹œ๋ฅผ ์ง€์›ํ•˜๋Š” ๋ช…๋ น์ค„ ๋ชจ๋“œ์—์„œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์…ธ
  • C ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€ํ•œ ๋ฐ”์ธ๋”ฉ์ด ์žˆ๋Š” ์†Œํ˜• ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค.

๋˜ํ•œ ์ด ํ”„๋กœ์ ํŠธ๋Š” QuickJS์™€ ๊ด€๋ จ๋˜๊ณ  ๋ณ„๋„์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ ํ•ฉํ•œ XNUMX๊ฐœ์˜ ๋™๋ฐ˜ C ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ฐœ๋ฐœํ•ฉ๋‹ˆ๋‹ค.

  • libregexp๋Š” Javascript ES 2019 ์‚ฌ์–‘์„ ์™„๋ฒฝํ•˜๊ฒŒ ์ค€์ˆ˜ํ•˜๋Š” ์ •๊ทœ์‹์˜ ๋น ๋ฅธ ๊ตฌํ˜„์ž…๋‹ˆ๋‹ค.
  • libunicode๋Š” ์œ ๋‹ˆ์ฝ”๋“œ ์ž‘์—…์„ ์œ„ํ•œ ์†Œํ˜• ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค.
  • libbf๋Š” ์ž„์˜ ์ •๋ฐ€๋„ ๋ถ€๋™ ์†Œ์ˆ˜์  ์—ฐ์‚ฐ๊ณผ ์ •ํ™•ํ•œ ๋ฐ˜์˜ฌ๋ฆผ ์ดˆ์›” ํ•จ์ˆ˜์˜ ๊ตฌํ˜„์ž…๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€