Qemu.js เบ”เป‰เบงเบเบเบฒเบ™เบฎเบญเบ‡เบฎเบฑเบš JIT: เบ—เปˆเบฒเบ™เบเบฑเบ‡เบชเบฒเบกเบฒเบ”เบซเบฑเบ™ mince เบเบฑเบšเบซเบผเบฑเบ‡เป„เบ”เป‰

เบชเบญเบ‡เบชเบฒเบกเบ›เบตเบเปˆเบญเบ™ Fabrice Bellard เบ‚เบฝเบ™เป‚เบ”เบ jslinux เป€เบ›เบฑเบ™ emulator PC เบ—เบตเปˆเบ‚เบฝเบ™เปƒเบ™ JavaScript. เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบขเปˆเบฒเบ‡เบซเบ™เป‰เบญเบเบกเบตเบซเบผเบฒเบเบเบงเปˆเบฒเบ™เบฑเป‰เบ™ Virtual x86. เปเบ•เปˆเบžเบงเบเป€เบ‚เบปเบฒเบ—เบฑเบ‡เบซเบกเบปเบ”, เป€เบ—เบปเปˆเบฒเบ—เบตเปˆเบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบฎเบนเป‰, เป€เบ›เบฑเบ™เบ™เบฒเบเบžเบฒเบชเบฒ, เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆ Qemu, เบ‚เบฝเบ™เบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบตเป‰เป‚เบ”เบ Fabrice Bellard เบ”เบฝเบงเบเบฑเบ™, เปเบฅเบฐ, เบญเบฒเบ”เบˆเบฐเป€เบ›เบฑเบ™, emulator เบ—เบตเปˆเบ—เบฑเบ™เบชเบฐเป„เบซเบกเบ—เบตเปˆเป€เบ„เบปเบฒเบฅเบปเบšเบ•เบปเบ™เป€เบญเบ‡, เปƒเบŠเป‰เบเบฒเบ™เบฅเบงเบšเบฅเบงเบก JIT เบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”เปเบ‚เบเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบฅเบฐเบซเบฑเบ”เบฅเบฐเบšเบปเบšเป€เบˆเบปเป‰เบฒเบžเบฒเบš. เบกเบฑเบ™เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบกเบฑเบ™เป€เบ–เบดเบ‡เป€เบงเบฅเบฒเบ—เบตเปˆเบˆเบฐเบ›เบฐเบ•เบดเบšเบฑเบ”เบงเบฝเบเบ‡เบฒเบ™เบเบปเบ‡เบเบฑเบ™เบ‚เป‰เบฒเบกเบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบ•เบปเบงเบ—เปˆเบญเบ‡เป€เบงเบฑเบšเบ—เบตเปˆเปเบเป‰เป„เบ‚: เบเบฒเบ™เบฅเบงเบšเบฅเบงเบก JIT เบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”เป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบเป€เบ‚เบปเป‰เบฒเปƒเบ™ JavaScript, เป€เบŠเบดเปˆเบ‡เบกเบฑเบ™เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบกเบตเป€เบซเบ”เบœเบปเบ™เบ—เบตเปˆเบชเบธเบ”เบ—เบตเปˆเบˆเบฐ Port Qemu. เบกเบฑเบ™เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒ, เป€เบ›เบฑเบ™เบซเบเบฑเบ‡ Qemu, เบกเบต emulators เบ—เบตเปˆเบ‡เปˆเบฒเบเบ”เบฒเบเปเบฅเบฐเป€เบ›เบฑเบ™เบกเบดเบ”เบเบฑเบšเบœเบนเป‰เปƒเบŠเป‰ - เบ”เบฝเบงเบเบฑเบ™ VirtualBox, เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเบปเบเบ•เบปเบงเบขเปˆเบฒเบ‡ - เบ•เบดเบ”เบ•เบฑเป‰เบ‡เปเบฅเบฐเป€เบฎเบฑเบ”เบงเบฝเบ. เปเบ•เปˆ Qemu เบกเบตเบฅเบฑเบเบชเบฐเบ™เบฐเบ—เบตเปˆเบซเบ™เป‰เบฒเบชเบปเบ™เปƒเบˆเบซเบผเบฒเบ

  • เปเบซเบผเปˆเบ‡เป€เบ›เบตเบ”
  • เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเป‚เบ”เบเบšเปเปˆเบกเบตเบ•เบปเบงเบ‚เบฑเบš kernel
  • เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเปƒเบ™เบฎเบนเบšเปเบšเบšเบ™เบฒเบเบžเบฒเบชเบฒ
  • เบชเบฐโ€‹เบซเบ™เบฑเบšโ€‹เบชเบฐโ€‹เบซเบ™เบนเบ™โ€‹เบˆเปเบฒโ€‹เบ™เบงเบ™โ€‹เบซเบผเบฒเบโ€‹เบ‚เบญเบ‡โ€‹เบ—เบฑเบ‡โ€‹เบชเบฐโ€‹เบ–เบฒโ€‹เบ›เบฑเบ”โ€‹เบ•เบฐโ€‹เป€เบˆเบปเป‰เบฒโ€‹เบžเบฒเบšโ€‹เปเบฅเบฐโ€‹เปเบ‚เบโ€‹

เบเปˆเบฝเบงเบเบฑเบšเบˆเบธเบ”เบ—เบตเบชเบฒเบก, เบ•เบญเบ™เบ™เบตเป‰เบ‚เป‰เบญเบเบชเบฒเบกเบฒเบ”เบญเบฐเบ—เบดเบšเบฒเบเป„เบ”เป‰เบงเปˆเบฒเปƒเบ™เบ•เบปเบงเบˆเบดเบ‡เปเบฅเป‰เบง, เปƒเบ™เป‚เบซเบกเบ” TCI, เบกเบฑเบ™เบšเปเปˆเปเบกเปˆเบ™เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เปเบ‚เบเบ—เบตเปˆเบ–เบทเบเบ•เบตเบ„เบงเบฒเบกเบซเบกเบฒเบ, เปเบ•เปˆ bytecode เบ—เบตเปˆเป„เบ”เป‰เบฎเบฑเบšเบˆเบฒเบเบžเบงเบเบกเบฑเบ™, เปเบ•เปˆเบ™เบตเป‰เบšเปเปˆเป„เบ”เป‰เบ›เปˆเบฝเบ™เปเบ›เบ‡เบ„เบงเบฒเบกเบชเปเบฒเบ„เบฑเบ™ - เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เปเบฅเบฐเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™. Qemu เบเปˆเบฝเบงเบเบฑเบšเบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒเปƒเบซเบกเปˆ, เบ–เป‰เบฒเบ—เปˆเบฒเบ™เป‚เบŠเบเบ”เบต, A C compiler เปเบกเปˆเบ™เบžเบฝเบ‡เบžเป - เบเบฒเบ™เบ‚เบฝเบ™เบ•เบปเบงเบชเป‰เบฒเบ‡เบฅเบฐเบซเบฑเบ”เบชเบฒเบกเบฒเบ”เบ–เบทเบเป€เบฅเบทเปˆเบญเบ™เบญเบญเบเป„เบ›.

เปเบฅเบฐเปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™, เบซเบผเบฑเบ‡เบˆเบฒเบเบชเบญเบ‡เบ›เบตเบ‚เบญเบ‡ tinkering leisurely เบเบฑเบšเบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡ Qemu เปƒเบ™เป€เบงเบฅเบฒเบซเบงเปˆเบฒเบ‡เบ‚เบญเบ‡เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒ, prototype เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเป„เบ”เป‰เบ›เบฒเบเบปเบ”, เบ—เบตเปˆเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เป„เบ”เป‰, เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเบปเบเบ•เบปเบงเบขเปˆเบฒเบ‡, Kolibri OS.

Emscripten เปเบกเปˆเบ™เบซเบเบฑเบ‡

เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™, เบœเบนเป‰เบฅเบงเบšเบฅเบงเบกเบ‚เปเป‰เบกเบนเบ™เบˆเปเบฒเบ™เบงเบ™เบซเบผเบฒเบเป„เบ”เป‰เบ›เบฒเบเบปเบ”, เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบชเบธเบ”เบ—เป‰เบฒเบเปเบกเปˆเบ™ JavaScript. เบšเบฒเบ‡เบ„เบปเบ™, เป€เบŠเบฑเปˆเบ™ Type Script, เปƒเบ™เป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™เบกเบตเบˆเบธเบ”เบ›เบฐเบชเบปเบ‡เป€เบžเบทเปˆเบญเป€เบ›เบฑเบ™เบงเบดเบ—เบตเบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบชเบธเบ”เปƒเบ™เบเบฒเบ™เบ‚เบฝเบ™เป€เบงเบฑเบš. เปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™, Emscripten เปเบกเปˆเบ™เบงเบดเบ—เบตเบ—เบตเปˆเบˆเบฐเป€เบญเบปเบฒเบฅเบฐเบซเบฑเบ” C เบซเบผเบท C ++ เบ—เบตเปˆเบกเบตเบขเบนเปˆเปเบฅเป‰เบงเปเบฅเบฐเบฅเบงเบšเบฅเบงเบกเบกเบฑเบ™เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เปเบšเบšเบŸเบญเบกเบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบญเปˆเบฒเบ™เป„เบ”เป‰เบ‚เบญเบ‡เบ•เบปเบงเบ—เปˆเบญเบ‡เป€เบงเบฑเบš. เบชเบธเบ” เบซเบ™เป‰เบฒเบ™เบตเป‰ เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เป„เบ”เป‰โ€‹เป€เบเบฑเบšโ€‹เบเปเบฒโ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เบซเบผเบฒเบโ€‹เบžเบญเบ”โ€‹เบ‚เบญเบ‡โ€‹เป‚เบ„เบ‡โ€‹เบเบฒเบ™โ€‹เบ—เบตเปˆโ€‹เบกเบตโ€‹เบŠเบทเปˆโ€‹เบชเบฝเบ‡โ€‹: เบ—เบตเปˆเบ™เบตเป‰เบ•เบปเบงเบขเปˆเบฒเบ‡, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบšเบดเปˆเบ‡ PyPy - เป‚เบ”เบเบงเบดเบ—เบตเบ—เบฒเบ‡เบเบฒเบ™, เบžเบงเบเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบญเป‰เบฒเบ‡เบงเปˆเบฒเบกเบต JIT เปเบฅเป‰เบง. เปƒเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡, เบšเปเปˆเปเบกเปˆเบ™เบ—เบธเบเป†เป‚เบ„เบ‡เบเบฒเบ™เบชเบฒเบกเบฒเบ”เบ–เบทเบเบฅเบงเบšเบฅเบงเบกเปเบฅเบฐเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เปƒเบ™เบ•เบปเบงเบ—เปˆเบญเบ‡เป€เบงเบฑเบš - เบกเบตเบˆเปเบฒเบ™เบงเบ™ เบ„เบธเบ™โ€‹เบฅเบฑเบโ€‹เบชเบฐโ€‹เบ™เบฐ, เบ—เบตเปˆเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เป€เบญเบปเบฒเปƒเบˆเปƒเบชเปˆเบเบฑเบš, เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เป€เบ›เบฑเบ™ inscription เปƒเบ™เบซเบ™เป‰เบฒเบ”เบฝเบงเบเบฑเบ™เป€เบงเบปเป‰เบฒเบงเปˆเบฒ "Emscripten เบชเบฒเบกเบฒเบ”เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบฅเบงเบšเบฅเบงเบกเป€เบเบทเบญเบšเบ—เบธเบ. เบžเบฒเบš เบฅเบฐเบซเบฑเบ” C/C++ เบเบฑเบš JavaScript ", เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เบกเบตเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบˆเปเบฒเบ™เบงเบ™เบซเบ™เบถเปˆเบ‡เบ—เบตเปˆเบšเปเปˆเป„เบ”เป‰เบเปเบฒเบ™เบปเบ”เบžเบถเบ”เบ•เบดเบเปเบฒเบ•เบฒเบกเบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™, เปเบ•เปˆเบกเบฑเบเบˆเบฐเป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเปƒเบ™ x86 - เบ•เบปเบงเบขเปˆเบฒเบ‡, เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบ•เบปเบงเปเบ›เบ—เบตเปˆเบšเปเปˆเบชเบญเบ”เบ„เปˆเบญเบ‡, เป€เบŠเบดเปˆเบ‡เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›เปเบกเปˆเบ™เบซเป‰เบฒเบกเปƒเบ™เบšเบฒเบ‡เบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒ. , Qemu เป€เบ›เบฑเบ™เป‚เบ„เบ‡เบเบฒเบ™เบ‚เป‰เบฒเบกเป€เบงเบ—เบตเปเบฅเบฐ , เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบขเบฒเบเบˆเบฐเป€เบŠเบทเปˆเบญ, เปเบฅเบฐเบกเบฑเบ™เบšเปเปˆเบกเบตเบžเบถเบ”เบ•เบดเบเปเบฒเบ—เบตเปˆเบšเปเปˆเป„เบ”เป‰เบเปเบฒเบ™เบปเบ”เป„เบงเป‰เบซเบผเบฒเบ - เป€เบญเบปเบฒเบกเบฑเบ™เปเบฅเบฐเบฅเบงเบšเบฅเบงเบก, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™ tinker เป€เบฅเบฑเบเบ™เป‰เบญเบเบเบฑเบš JIT - เปเบฅเบฐเบ—เปˆเบฒเบ™เบเปเบฒเบฅเบฑเบ‡เป€เบฎเบฑเบ”! เปเบ•เปˆเบ™เบฑเป‰เบ™เบšเปเปˆเปเบกเปˆเบ™. เบเปเบฅเบฐเบ™เบต...

เบžเบฐเบเบฒเบเบฒเบก เบ—เบณ เบญเบดเบ”

เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›เปเบฅเป‰เบง, เบ‚เป‰เบญเบเบšเปเปˆเปเบกเปˆเบ™เบ„เบปเบ™เบ—เปเบฒเบญเบดเบ”เบ—เบตเปˆเบ„เบดเบ”เบ—เบตเปˆเบˆเบฐเป€เบญเบปเบฒ Qemu เป„เบ›เบซเบฒ JavaScript. เบกเบตเบ„เปเบฒเบ–เบฒเบกเบ—เบตเปˆเบ–เบฒเบกเบขเบนเปˆเปƒเบ™เป€เบงเบ—เบต ReactOS เบ–เป‰เบฒเบชเบดเปˆเบ‡เบ™เบตเป‰เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เป‚เบ”เบเปƒเบŠเป‰ Emscripten. เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบตเป‰, เบกเบตเบ‚เปˆเบฒเบงเบฅเบทเบงเปˆเบฒ Fabrice Bellard เป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰เบชเปˆเบงเบ™เบšเบธเบเบ„เบปเบ™, เปเบ•เปˆเบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เป€เบงเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบš jslinux, เป€เบŠเบดเปˆเบ‡เป€เบ—เบปเปˆเบฒเบ—เบตเปˆเบ‚เป‰เบญเบเบฎเบนเป‰, เปเบกเปˆเบ™เบžเบฝเบ‡เปเบ•เปˆเบ„เบงเบฒเบกเบžเบฐเบเบฒเบเบฒเบกเป€เบžเบทเปˆเบญเบšเบฑเบ™เบฅเบธเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ—เบตเปˆเบžเบฝเบ‡เบžเปเปƒเบ™ JS เบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡, เปเบฅเบฐเบ–เบทเบเบ‚เบฝเบ™เบˆเบฒเบเบˆเบธเบ”เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™. เบ•เปเปˆเบกเบฒ, Virtual x86 เป„เบ”เป‰เบ–เบทเบเบ‚เบฝเบ™ - เปเบซเบผเปˆเบ‡เบ—เบตเปˆเบšเปเปˆเป€เบ‚เบปเป‰เบฒเปƒเบˆเป„เบ”เป‰เบ–เบทเบเบˆเบฑเบ”เบžเบตเบกเบกเบฒเบชเปเบฒเบฅเบฑเบšเบกเบฑเบ™, เปเบฅเบฐ, เบ”เบฑเปˆเบ‡เบ—เบตเปˆเป„เบ”เป‰เบเปˆเบฒเบง, "เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡" เบ—เบตเปˆเบเบดเปˆเบ‡เปƒเบซเบเปˆเบเบงเปˆเบฒเบ‚เบญเบ‡ emulation เป€เบฎเบฑเบ”เปƒเบซเป‰เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเปƒเบŠเป‰ SeaBIOS เป€เบ›เบฑเบ™ firmware. เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, เบกเบตเบ„เบงเบฒเบกเบžเบฐเบเบฒเบเบฒเบกเบ—เบตเปˆเบˆเบฐ Port Qemu เบขเปˆเบฒเบ‡เบซเบ™เป‰เบญเบเบซเบ™เบถเปˆเบ‡เบ„เบฑเป‰เบ‡เป‚เบ”เบเปƒเบŠเป‰ Emscripten - เบ‚เป‰เบญเบเบžเบฐเบเบฒเบเบฒเบกเป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰ เบ„เบนเปˆเป€เบ•เบปเป‰เบฒเบชเบฝเบš, เปเบ•เปˆเบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒ, เป€เบ—เบปเปˆเบฒเบ—เบตเปˆเบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป€เบ‚เบปเป‰เบฒเปƒเบˆ, เป„เบ”เป‰เบ–เบทเบ frozen.

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบกเบฑเบ™เบˆเบฐเป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒ, เบ™เบตเป‰เปเบกเปˆเบ™เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™, เบ™เบตเป‰เปเบกเปˆเบ™ Emscripten - เป€เบญเบปเบฒเบกเบฑเบ™เปเบฅเบฐเบฅเบงเบšเบฅเบงเบก. เปเบ•เปˆเบเบฑเบ‡เบกเบตเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบ—เบตเปˆ Qemu เบ‚เบถเป‰เบ™เบเบฑเบš, เปเบฅเบฐเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบ—เบตเปˆเบซเปเบชเบฐเบซเบกเบธเบ”เป€เบซเบผเบปเปˆเบฒเบ™เบฑเป‰เบ™เบ‚เบถเป‰เบ™เบเบฑเบš, เปเบฅเบฐเบญเบทเปˆเบ™เป†, เปเบฅเบฐเบซเบ™เบถเปˆเบ‡เปƒเบ™เบ™เบฑเป‰เบ™เปเบกเปˆเบ™. libffi, เป€เบŠเบดเปˆเบ‡ glib เปเบกเปˆเบ™เบ‚เบถเป‰เบ™เบเบฑเบš. เบกเบตเบ‚เปˆเบฒเบงเบฅเบทเบเปˆเบฝเบงเบเบฑเบšเบญเบดเบ™เป€เบ•เบตเป€เบ™เบฑเบ”เบงเปˆเบฒเบกเบตเบซเบ™เบถเปˆเบ‡เปƒเบ™เบšเปˆเบญเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™เบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆเบ‚เบญเบ‡เบซเปเบชเบฐเบซเบกเบธเบ”เบชเปเบฒเบฅเบฑเบš Emscripten, เปเบ•เปˆเบกเบฑเบ™เบเปเปˆเบเบฒเบเบ—เบตเปˆเบˆเบฐเป€เบŠเบทเปˆเบญ: เบ—เปเบฒเบญเบดเบ”, เบกเบฑเบ™เบšเปเปˆเป„เบ”เป‰เบกเบตเบˆเบธเบ”เบ›เบฐเบชเบปเบ‡เบ—เบตเปˆเบˆเบฐเบฅเบงเบšเบฅเบงเบกเบ‚เปเป‰เบกเบนเบ™เปƒเบซเบกเปˆ, เบญเบฑเบ™เบ—เบตเบชเบญเบ‡, เบกเบฑเบ™เปเบกเปˆเบ™เบฅเบฐเบ”เบฑเบšเบ•เปˆเปเบฒเป€เบเบตเบ™เป„เบ›. เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบžเบฝเบ‡เปเบ•เปˆเป€เบญเบปเบฒเบ‚เบถเป‰เบ™, เปเบฅเบฐเบฅเบงเบšเบฅเบงเบกเบเบฑเบš JS. เปเบฅเบฐเบกเบฑเบ™เบšเปเปˆเปเบกเปˆเบ™เบžเบฝเบ‡เปเบ•เปˆเป€เบฅเบทเปˆเบญเบ‡เบ‚เบญเบ‡เบเบฒเบ™เบ›เบฐเบเบญเบšเบเบฒเบ™เบ›เบฐเบเบญเบš - เบšเบฒเบ‡เบ—เบต, เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบšเบดเบ”เบกเบฑเบ™, เบชเปเบฒเบฅเบฑเบšเบšเบฒเบ‡เบชเบปเบ™เบ—เบดเบชเบฑเบ™เบเบฒเบเบฒเบ™เป‚เบ—เบซเบฒเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบชเป‰เบฒเบ‡เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เบ—เบตเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เปƒเบ™ stack เปเบฅเบฐเป‚เบ—เบซเบฒเบซเบ™เป‰เบฒเบ—เบตเปˆเป‚เบ”เบเบšเปเปˆเบกเบตเบžเบงเบเบกเบฑเบ™. เปเบ•เปˆ Emscripten เปเบกเปˆเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเบซเบเบธเป‰เบ‡เบเบฒเบ: เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เปƒเบซเป‰เบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบ„เบธเป‰เบ™เป€เบ„เบตเบเบเบฑเบšเบ•เบปเบงเบ—เปˆเบญเบ‡เป€เบงเบฑเบš JS engine optimizer, เบšเบฒเบ‡ tricks เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰. เป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐ, เบญเบฑเบ™เบ—เบตเปˆเป€เบญเบตเป‰เบ™เบงเปˆเบฒ relooping - เป€เบ„เบทเปˆเบญเบ‡เบชเป‰เบฒเบ‡เบฅเบฐเบซเบฑเบ”เป‚เบ”เบเปƒเบŠเป‰ LLVM IR เบ—เบตเปˆเป„เบ”เป‰เบฎเบฑเบšเบเบฑเบšเบšเบฒเบ‡เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบ—เบตเปˆเบšเปเปˆเบกเบตเบ•เบปเบงเบ•เบปเบ™เบžเบฐเบเบฒเบเบฒเบกเบชเป‰เบฒเบ‡ ifs, loops, เปเบฅเบฐเบญเบทเปˆเบ™เป†. เปเบฅเป‰เบง, เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เบ–เบทเบเบชเบปเปˆเบ‡เบเบฑเบšเบซเบ™เป‰เบฒเบ—เบตเปˆเปเบ™เบงเปƒเบ”? เบ•เบฒเบกเบ—เปเบฒเบกเบฐเบŠเบฒเบ”, เป€เบ›เบฑเบ™เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เบเบฑเบšเบซเบ™เป‰เบฒเบ—เบตเปˆ JS, เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เบ–เป‰เบฒเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰, เบšเปเปˆเปเบกเปˆเบ™เบœเปˆเบฒเบ™ stack.

เปƒเบ™เบ•เบญเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบกเบตเบ„เบงเบฒเบกเบ„เบดเบ”เบ—เบตเปˆเบžเบฝเบ‡เปเบ•เปˆเบ‚เบฝเบ™เบเบฒเบ™เบ—เบปเบ”เปเบ—เบ™เบ‚เบญเบ‡ libffi เบเบฑเบš JS เปเบฅเบฐเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™, เปเบ•เปˆเปƒเบ™เบ—เบตเปˆเบชเบธเบ”เบ‚เป‰เบญเบเบเปเปˆเบชเบฑเบšเบชเบปเบ™เบเปˆเบฝเบงเบเบฑเบšเบงเบดเบ—เบตเบเบฒเบ™เบชเป‰เบฒเบ‡เป„เบŸเบฅเปŒ header เบ‚เบญเบ‡เบ‚เป‰เบญเบเป€เบžเบทเปˆเบญเปƒเบซเป‰เบžเบงเบเป€เบ‚เบปเบฒเป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเบกเบตเบขเบนเปˆ - เบ‚เป‰เบญเบเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เบซเบเบฑเบ‡เป„เบ”เป‰, เบเป‰เบญเบ™เบงเปˆเบฒเบžเบงเบเป€เบ‚เบปเบฒเป€เบงเบปเป‰เบฒเบงเปˆเบฒ, "เบงเบฝเบเบ‡เบฒเบ™เบ—เบตเปˆเบชเบฑเบšเบชเบปเบ™เบซเบผเบฒเบเปเบกเปˆเบ™ "เบžเบงเบเป€เบฎเบปเบฒเป‚เบ‡เปˆเบซเบผเบฒเบเบšเป?" เบ‚เป‰เบญเบเบ•เป‰เบญเบ‡ port libffi เป„เบ›เบซเบฒเบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒเบญเบทเปˆเบ™, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบเบฒเบ™เป€เบงเบปเป‰เบฒ - เป‚เบŠเบเบ”เบต, Emscripten เบกเบตเบ—เบฑเบ‡ macro เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เบฐเบเบญเบš inline (เปƒเบ™ Javascript, เปเบกเปˆเบ™ - เบ”เบต, เปƒเบ”เบเปเปˆเบ•เบฒเบกเบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐ, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™ assembler), เปเบฅเบฐเบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™เปเบฅเปˆเบ™เบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เปƒเบ™เบเบฒเบ™เบšเบดเบ™เป„เบ”เป‰. เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›, เบซเบผเบฑเบ‡เบˆเบฒเบ tinkering เบเบฑเบš fragments libffi เบ—เบตเปˆเบ‚เบถเป‰เบ™เบเบฑเบšเป€เบงเบ—เบตเบชเปเบฒเบฅเบฑเบšเบšเบฒเบ‡เป€เบงเบฅเบฒ, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบฎเบฑเบšเบšเบฒเบ‡เบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเบฅเบงเบšเบฅเบงเบกเป„เบ”เป‰เปเบฅเบฐเปเบฅเปˆเบ™เบกเบฑเบ™เปƒเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบ„เบฑเป‰เบ‡เบ—เปเบฒเบญเบดเบ”เบ—เบตเปˆเบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป€เบ‚เบปเป‰เบฒเบกเบฒ. เป€เบžเบทเปˆเบญเบ„เบงเบฒเบกเปเบ›เบเปƒเบˆเบ‚เบญเบ‡เบ‚เป‰เบญเบ, เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเป„เบ”เป‰เบ›เบฐเบชเบปเบšเบœเบปเบ™เบชเปเบฒเป€เบฅเบฑเบ”. เบ•เบปเบเบ•เบฐเบฅเบถเบ‡เบเบฑเบšเบ„เบงเบฒเบกเบชเบฐเบซเบฅเบฒเบ”เบ‚เบญเบ‡เบ‚เป‰เบญเบ - เบšเปเปˆเป€เบ›เบฑเบ™เป€เบฅเบทเปˆเบญเบ‡เบ•เบฐเบซเบฅเบปเบ, เบกเบฑเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบˆเบฒเบเบเบฒเบ™เป€เบ›เบตเบ”เบ•เบปเบงเบ„เบฑเป‰เบ‡เบ—เปเบฒเบญเบดเบ” - เบ‚เป‰เบญเบ, เบเบฑเบ‡เบšเปเปˆเป€เบŠเบทเปˆเบญเบ•เบฒเบ‚เบญเบ‡เบ‚เป‰เบญเบ, เป„เบ”เป‰เป„เบ›เป€เบšเบดเปˆเบ‡เบฅเบฐเบซเบฑเบ”เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡, เป€เบžเบทเปˆเบญเบ›เบฐเป€เบกเบตเบ™เบšเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเบ‚เบธเบ”เบ•เปเปˆเป„เบ›. เบ—เบตเปˆเบ™เบตเป‰เบ‚เป‰เบญเบเป„เบ”เป‰เบซเบกเบฒเบเปเบซเป‰เบ‡เป€เบ›เบทเบญเบเปเบ‚เบ‡เป€เบ›เบฑเบ™เบ„เบฑเป‰เบ‡เบ—เบตเบชเบญเบ‡ - เบชเบดเปˆเบ‡เบ”เบฝเบงเบ—เบตเปˆเบซเบ™เป‰เบฒเบ—เบตเปˆเบ‚เบญเบ‡เบ‚เป‰เบญเบเป€เบฎเบฑเบ”เปเบกเปˆเบ™ ffi_call - เบ™เบตเป‰โ€‹เบฅเบฒเบโ€‹เบ‡เบฒเบ™โ€‹เบเบฒเบ™โ€‹เป‚เบ—โ€‹เบชเบปเบšโ€‹เบœเบปเบ™โ€‹เบชเปเบฒโ€‹เป€เบฅเบฑเบ”โ€‹. เบšเปเปˆเบกเบตเบเบฒเบ™เป‚เบ—เบซเบฒเบ•เบปเบงเบกเบฑเบ™เป€เบญเบ‡. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบชเบปเปˆเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบเบฒเบ™เบ”เบถเบ‡เบ„เบฑเป‰เบ‡เบ—เปเบฒเบญเบดเบ”เบ‚เบญเบ‡เบ‚เป‰เบญเบ, เป€เบŠเบดเปˆเบ‡เปเบเป‰เป„เบ‚เบ‚เปเป‰เบœเบดเบ”เบžเบฒเบ”เปƒเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบ—เบตเปˆเบŠเบฑเบ”เป€เบˆเบ™เบเบฑเบšเบ™เบฑเบเบฎเบฝเบ™ Olympiad - เบ•เบปเบงเป€เบฅเบเบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡เบšเปเปˆเบ„เบงเบ™เบ–เบทเบเบ›เบฝเบšเบ—เบฝเบšเบเบฑเบš. a == b เปเบฅเบฐเป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบงเบดเบ—เบตเบเบฒเบ™ a - b < EPS - เบ—เปˆเบฒเบ™เบเบฑเบ‡เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบˆเบทเปˆเป‚เบกเบ”เบนเบ™, เบ–เป‰เบฒเบšเปเปˆเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™ 0 เบˆเบฐเบเบฒเบเป€เบ›เบฑเบ™เบซเบผเบฒเบเป€เบ—เบปเปˆเบฒเบเบฑเบš 1/3 ... เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบกเบฒเบเบฑเบšเบžเบญเบ”เบ—เบตเปˆเปเบ™เปˆเบ™เบญเบ™เบ‚เบญเบ‡ libffi, เป€เบŠเบดเปˆเบ‡เบœเปˆเบฒเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบ—เบตเปˆเบ‡เปˆเบฒเบเบ”เบฒเบเบ—เบตเปˆเบชเบธเบ”, เปเบฅเบฐเบชเบดเปˆเบ‡เบ—เบตเปˆ glib เปเบกเปˆเบ™. เบฅเบงเบšเบฅเบงเบก - เบ‚เป‰เบญเบเบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบงเปˆเบฒเบกเบฑเบ™เป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบˆเปเบฒเป€เบ›เบฑเบ™, เบ‚เป‰เบญเบเบˆเบฐเป€เบžเบตเปˆเบกเบกเบฑเบ™เบ•เปเปˆเบกเบฒ. เบŠเบญเบเบซเบฒเบฅเปˆเบงเบ‡เบซเบ™เป‰เบฒ, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบˆเบฐเป€เบงเบปเป‰เบฒเบงเปˆเบฒ, เบเป‰เบญเบ™เบงเปˆเบฒเบกเบฑเบ™เบซเบฑเบ™เบญเบญเบ, compiler เบšเปเปˆเป„เบ”เป‰เบฅเบงเบกเป€เบญเบปเบฒเบซเบ™เป‰เบฒเบ—เบตเปˆ libffi เปƒเบ™เบฅเบฐเบซเบฑเบ”เบชเบธเบ”เบ—เป‰เบฒเบ.

เปเบ•เปˆ, เบ”เบฑเปˆเบ‡เบ—เบตเปˆเบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เป€เบงเบปเป‰เบฒเปเบฅเป‰เบง, เบกเบตเบ‚เปเป‰เบˆเปเบฒเบเบฑเบ”เบšเบฒเบ‡เบขเปˆเบฒเบ‡, เปเบฅเบฐเปƒเบ™เบšเบฑเบ™เบ”เบฒเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบŸเบฃเบตเบ‚เบญเบ‡เบžเบถเบ”เบ•เบดเบเปเบฒเบ—เบตเปˆเบšเปเปˆเป„เบ”เป‰เบเปเบฒเบ™เบปเบ”เป„เบงเป‰, เบฅเบฑเบเบชเบฐเบ™เบฐเบ—เบตเปˆเบšเปเปˆเบซเบ™เป‰เบฒเบžเปเปƒเบˆเบซเบผเบฒเบเป„เบ”เป‰เบ–เบทเบเป€เบŠเบทเปˆเบญเบ‡เป„เบงเป‰ - JavaScript เป‚เบ”เบเบเบฒเบ™เบญเบญเบเปเบšเบšเบšเปเปˆเบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™ multithreading เบเบฑเบšเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบ—เบตเปˆเปƒเบŠเป‰เบฎเปˆเบงเบกเบเบฑเบ™. เปƒเบ™เบซเบผเบฑเบเบเบฒเบ™, เบ™เบตเป‰เบชเบฒเบกเบฒเบ”เบ–เบทเบเป€เบญเบตเป‰เบ™เบงเปˆเบฒเป€เบ›เบฑเบ™เบ„เบงเบฒเบกเบ„เบดเบ”เบ—เบตเปˆเบ”เบต, เปเบ•เปˆเบšเปเปˆเปเบกเปˆเบ™เบชเปเบฒเบฅเบฑเบšเบฅเบฐเบซเบฑเบ” porting เบ—เบตเปˆเบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒเบ–เบทเบเบœเบนเบเบกเบฑเบ”เบเบฑเบš C threads. เป€เบงเบปเป‰เบฒเป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›เปเบฅเป‰เบง, Firefox เบเปเบฒเบฅเบฑเบ‡เบ—เบปเบ”เบฅเบญเบ‡เบเบฑเบšเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบžเบฐเบ™เบฑเบเบ‡เบฒเบ™เบฎเปˆเบงเบกเบเบฑเบ™, เปเบฅเบฐ Emscripten เบกเบตเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ” pthread เบชเปเบฒเบฅเบฑเบšเบžเบงเบเป€เบ‚เบปเบฒ, เปเบ•เปˆเบ‚เป‰เบญเบเบšเปเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบตเปˆเบˆเบฐเบ‚เบถเป‰เบ™เบเบฑเบšเบกเบฑเบ™. เบ‚เป‰เบญเบเบ•เป‰เบญเบ‡เบ„เปˆเบญเบเป†เบฎเบฒเบเบญเบญเบ multithreading เบˆเบฒเบเบฅเบฐเบซเบฑเบ” Qemu - เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เบŠเบญเบเบซเบฒเบšเปˆเบญเบ™เบ—เบตเปˆเบเบฐเบ—เบนเป‰เบเปเบฒเบฅเบฑเบ‡เปเบฅเปˆเบ™, เบเป‰เบฒเบเบฎเปˆเบฒเบ‡เบเบฒเบเบ‚เบญเบ‡ loop เบ—เบตเปˆเปเบฅเปˆเบ™เบขเบนเปˆเปƒเบ™เบเบฐเบ—เบนเป‰เบ™เบตเป‰เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบซเบ™เป‰เบฒเบ—เบตเปˆเปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ, เปเบฅเบฐเป€เบญเบตเป‰เบ™เบŸเบฑเบ‡เบŠเบฑเบ™เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเบซเบ™เบถเปˆเบ‡เบ„เบฑเป‰เบ‡เบˆเบฒเบ loop เบ•เบปเป‰เบ™เบ•เป.

เบ„เบงเบฒเบกเบžเบฐเบเบฒเบเบฒเบกเบ„เบฑเป‰เบ‡เบ—เบตเบชเบญเบ‡

เปƒเบ™เบšเบฒเบ‡เบˆเบธเบ”, เบกเบฑเบ™เป„เบ”เป‰เบเบฒเบเป€เบ›เบฑเบ™เบ—เบตเปˆเบŠเบฑเบ”เป€เบˆเบ™เบงเปˆเบฒเบšเบฑเบ™เบซเบฒเปเบกเปˆเบ™เบเบฑเบ‡เบกเบตเบขเบนเปˆ, เปเบฅเบฐเบงเปˆเบฒเบ”เป‰เบงเบเป„เบกเป‰เบ„เป‰เบญเบ™เป€เบ—เบปเป‰เบฒเบ—เบตเปˆเป‚เบ”เบ”เบ”เปˆเบฝเบงเบขเบนเปˆเบฎเบญเบšเบฅเบฐเบซเบฑเบ”เบˆเบฐเบšเปเปˆเบ™เปเบฒเป„เบ›เบชเบนเปˆเบชเบดเปˆเบ‡เบ—เบตเปˆเบ”เบต. เบชเบฐเบซเบผเบธเบš: เบžเบงเบเป€เบฎเบปเบฒเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡ somehow systematize เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เป€เบžเบตเปˆเบก crutches เป„เบ”เป‰. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เป€เบงเบตเบŠเบฑเปˆเบ™ 2.4.1 เบ—เบตเปˆเบชเบปเบ”เป†เบ•เบญเบ™เบ™เบฑเป‰เบ™เบ–เบทเบเป€เบญเบปเบฒเป„เบ› (เบšเปเปˆเปเบกเปˆเบ™ 2.5.0, เป€เบžเบฒเบฐเปƒเบœเบˆเบฐเบฎเบนเป‰, เบˆเบฐเบกเบตเบšเบฑเบเปƒเบ™เป€เบงเบตเบŠเบฑเปˆเบ™เปƒเปเปˆเบ—เบตเปˆเบเบฑเบ‡เบšเปเปˆเบ—เบฑเบ™เบˆเบฑเบšเป„เบ”เป‰ เปเบฅเบฐเบ‚เป‰เบญเบเบเปเปˆเบกเบตเบšเบฑเบเบ‚เบญเบ‡เบ‚เป‰เบญเบเป€เบญเบ‡. ), เปเบฅเบฐเบชเบดเปˆเบ‡เบ—เปเบฒเบญเบดเบ”เปเบกเปˆเบ™เบเบฒเบ™เบ‚เบฝเบ™เบ„เบทเบ™เปƒเบซเบกเปˆเบขเปˆเบฒเบ‡เบ›เบญเบ”เป„เบž thread-posix.c. เบ”เบต, เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เบ›เบญเบ”เป„เบž: เบ–เป‰เบฒเบœเบนเป‰เปƒเบ”เบœเบนเป‰เบ™เบถเปˆเบ‡เบžเบฐเบเบฒเบเบฒเบกเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ‡เบฒเบ™เบ—เบตเปˆเบ™เปเบฒเป„เบ›เบชเบนเปˆเบเบฒเบ™เบ‚เบฑเบ”เบ‚เบงเบฒเบ‡, เบซเบ™เป‰เบฒเบ—เบตเปˆเบ–เบทเบเป€เบญเบตเป‰เบ™เบงเปˆเบฒเบ—เบฑเบ™เบ—เบต abort() - เปเบ™เปˆเบ™เบญเบ™, เบ™เบตเป‰เบšเปเปˆเป„เบ”เป‰เปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเบ—เบฑเบ‡เบซเบกเบปเบ”เปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบง, เปเบ•เปˆเบขเปˆเบฒเบ‡เบซเบ™เป‰เบญเบเบกเบฑเบ™เบเปเปˆเป€เบ›เบฑเบ™เบ—เบตเปˆเบซเบ™เป‰เบฒเบžเปเปƒเบˆเบซเบผเบฒเบเบเปˆเบงเบฒเบเบฒเบ™เป„เบ”เป‰เบฎเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบšเปเปˆเบชเบญเบ”เบ„เปˆเบญเบ‡เบเบฑเบ™เบขเปˆเบฒเบ‡เบ‡เบฝเบšเป†.

เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›, เบ—เบฒเบ‡เป€เบฅเบทเบญเบ Emscripten เปเบกเปˆเบ™เบกเบตเบ›เบฐเป‚เบซเบเบ”เบซเบผเบฒเบเปƒเบ™เบเบฒเบ™เบชเบปเปˆเบ‡เบฅเบฐเบซเบฑเบ”เป„เบ›เบซเบฒ JS -s ASSERTIONS=1 -s SAFE_HEAP=1 - เบžเบงเบเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบˆเบฑเบšเบšเบฒเบ‡เบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เบžเบถเบ”เบ•เบดเบเปเบฒเบ—เบตเปˆเบšเปเปˆเป„เบ”เป‰เบเปเบฒเบ™เบปเบ”, เป€เบŠเบฑเปˆเบ™: เบเบฒเบ™เป‚เบ—เบซเบฒเบ—เบตเปˆเบขเบนเปˆ unaligned (เบŠเบถเปˆเบ‡เบšเปเปˆเบชเบญเบ”เบ„เปˆเบญเบ‡เบ—เบฑเบ‡เบซเบกเบปเบ”เบเบฑเบšเบฅเบฐเบซเบฑเบ”เบชเปเบฒเบฅเบฑเบš arrays เบžเบดเบกเป€เบŠเบฑเปˆเบ™: HEAP32[addr >> 2] = 1) เบซเบผเบทเป‚เบ—เบซเบฒเบŸเบฑเบ‡เบŠเบฑเบ™เบ—เบตเปˆเบกเบตเบˆเปเบฒเบ™เบงเบ™เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เบ—เบตเปˆเบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡.

เป‚เบ”เบเบงเบดเบ—เบตเบ—เบฒเบ‡เบเบฒเบ™, เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เบเบฒเบ™เบˆเบฑเบ”เบ•เปเบฒเปเบซเบ™เปˆเบ‡เปเบกเปˆเบ™เบšเบฑเบ™เบซเบฒเปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ. เบ”เบฑเปˆเบ‡เบ—เบตเปˆเบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เป€เบงเบปเป‰เบฒเปเบฅเป‰เบง, Qemu เบกเบต backend เบเบฒเบ™เบ•เบตเบ„เบงเบฒเบก "degenerate" เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบœเบฐเบฅเบดเบ”เบฅเบฐเบซเบฑเบ” TCI (เบ™เบฒเบเบžเบฒเบชเบฒเบฅเบฐเบซเบฑเบ”เบ‚เบฐเบซเบ™เบฒเบ”เบ™เป‰เบญเบ), เปเบฅเบฐเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เปเบฅเบฐเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ Qemu เปƒเบ™เบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒเปƒเบซเบกเปˆ, เบ–เป‰เบฒเบซเบฒเบเบงเปˆเบฒเบ—เปˆเบฒเบ™เป‚เบŠเบเบ”เบต, เป€เบ›เบฑเบ™ compiler C เปเบกเปˆเบ™เบžเบฝเบ‡เบžเป. "เบ–เป‰เบฒเบ—เปˆเบฒเบ™เป‚เบŠเบเบ”เบต". เบ‚เป‰เบญเบเป‚เบŠเบเบšเปเปˆเบ”เบต, เปเบฅเบฐเบกเบฑเบ™เป„เบ”เป‰เบซเบฑเบ™เบญเบญเบเบงเปˆเบฒ TCI เปƒเบŠเป‰เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบ—เบตเปˆเบšเปเปˆเบชเบญเบ”เบ„เปˆเบญเบ‡เบเบฑเบ™เป€เบกเบทเปˆเบญเบงเบดเป€เบ„เบฒเบฐ bytecode เบ‚เบญเบ‡เบกเบฑเบ™. เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เปƒเบ™เบ—เบธเบเบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡ ARM เปเบฅเบฐเบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒเบญเบทเปˆเบ™เป†เบ—เบตเปˆเบกเบตเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบฅเบฐเบ”เบฑเบšเบ„เบงเบฒเบกเบˆเปเบฒเป€เบ›เบฑเบ™, Qemu เบฅเบงเบšเบฅเบงเบกเบเป‰เบญเบ™เบงเปˆเบฒเบžเบงเบเป€เบ‚เบปเบฒเบกเบต backend TCG เบ›เบปเบเบเบฐเบ•เบดเบ—เบตเปˆเบชเป‰เบฒเบ‡เบฅเบฐเบซเบฑเบ”เบžเบทเป‰เบ™เป€เบกเบทเบญเบ‡, เปเบ•เปˆเบงเปˆเบฒ TCI เบˆเบฐเป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบžเบงเบเบกเบฑเบ™เปเบกเปˆเบ™เบ„เปเบฒเบ–เบฒเบกเบญเบทเปˆเบ™. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบเป‰เบญเบ™เบงเปˆเบฒเบกเบฑเบ™เป„เบ”เป‰เบซเบฑเบ™เบญเบญเบ, เป€เบญเบเบฐเบชเบฒเบ™ TCI เบŠเบตเป‰เปƒเบซเป‰เป€เบซเบฑเบ™เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบเบฒเบ™เป€เบญเบตเป‰เบ™เบŸเบฑเบ‡เบŠเบฑเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบญเปˆเบฒเบ™เบ—เบตเปˆเบšเปเปˆเบชเบญเบ”เบ„เปˆเบญเบ‡เป„เบ”เป‰เบ–เบทเบเป€เบžเบตเปˆเบกเป€เบ‚เบปเป‰เบฒเปƒเบ™เบฅเบฐเบซเบฑเบ”, เป€เบŠเบดเปˆเบ‡เป„เบ”เป‰เบ–เบทเบเบ„เบปเป‰เบ™เบžเบปเบšเบขเบนเปˆเปƒเบ™เบชเปˆเบงเบ™เบญเบทเปˆเบ™เบ‚เบญเบ‡ Qemu.

เบเบฒเบ™เบ—เปเบฒเบฅเบฒเบ heap

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบ—เบตเปˆเบšเปเปˆเบชเบญเบ”เบ„เปˆเบญเบ‡เบ‚เบญเบ‡ TCI เป„เบ”เป‰เบ–เบทเบเปเบเป‰เป„เบ‚, loop เบ•เบปเป‰เบ™เบ•เปเป„เบ”เป‰เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบทเป‰เบ™เป€เบŠเบดเปˆเบ‡เป€เบญเบตเป‰เบ™เบงเปˆเบฒเป‚เบ›เป€เบŠเบ”เป€เบŠเบต, RCU เปเบฅเบฐเบšเบฒเบ‡เบชเบดเปˆเบ‡เป€เบฅเบฑเบเบ™เป‰เบญเบเบญเบทเปˆเบ™เป†. เปเบฅเบฐเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป€เบ›เบตเบ”เบ•เบปเบง Qemu เบ”เป‰เบงเบเบ—เบฒเบ‡เป€เบฅเบทเบญเบ -d exec,in_asm,out_asm, เบŠเบถเปˆเบ‡เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป€เบงเบปเป‰เบฒเบงเปˆเบฒเบฅเบฐเบซเบฑเบ”เปƒเบ”เบ—เบตเปˆเบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”, เปเบฅเบฐเปƒเบ™เป€เบงเบฅเบฒเบญเบญเบเบญเบฒเบเบฒเบ”เป€เบžเบทเปˆเบญเบ‚เบฝเบ™เบงเปˆเบฒเบฅเบฐเบซเบฑเบ”เปเบ‚เบเปเบกเปˆเบ™เบซเบเบฑเบ‡, เบฅเบฐเบซเบฑเบ”เป€เบˆเบปเป‰เบฒเบžเบฒเบšเป„เบ”เป‰เบเบฒเบเป€เบ›เบฑเบ™ (เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰, bytecode). เบกเบฑเบ™โ€‹เป€เบฅเบตเปˆเบกโ€‹เบ•เบปเป‰เบ™โ€‹, เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ”โ€‹เบ•เบฑเบ™โ€‹เบเบฒเบ™โ€‹เปเบ›โ€‹เบžเบฒโ€‹เบชเบฒโ€‹เบˆเปเบฒโ€‹เบ™เบงเบ™โ€‹เบซเบ™เบถเปˆเบ‡โ€‹, เบ‚เบฝเบ™โ€‹เบ‚เปเป‰โ€‹เบ„เบงเบฒเบกโ€‹เปเบเป‰โ€‹เป„เบ‚โ€‹เบ—เบตเปˆโ€‹เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒโ€‹เป„เบ”เป‰โ€‹เบ›เบฐโ€‹เป„เบงเป‰โ€‹เบงเปˆเบฒ RCU เบˆเบฐโ€‹เป€เบฅเบตเปˆเบกโ€‹เบ•เบปเป‰เบ™โ€‹เปƒเบ™โ€‹เบ›เบฑเบ”โ€‹เบˆเบธโ€‹เบšเบฑเบ™โ€‹เปเบฅเบฐ ... crashesโ€‹. abort() เบžเบฒเบเปƒเบ™เบซเบ™เป‰เบฒเบ—เบตเปˆ free(). เป‚เบ”เบ tinkering เบเบฑเบšเบซเบ™เป‰เบฒเบ—เบตเปˆ free() เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบˆเบฑเบ”เบเบฒเบ™เบ„เบปเป‰เบ™เบžเบปเบšเบงเปˆเบฒเบขเบนเปˆเปƒเบ™เบซเบปเบงเบ‚เบญเบ‡ heap block, เป€เบŠเบดเปˆเบ‡เบขเบนเปˆเปƒเบ™เปเบ›เบ” bytes เบเปˆเบญเบ™เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบ—เบตเปˆเบ–เบทเบเบˆเบฑเบ”เบชเบฑเบ™, เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเป€เบ›เบฑเบ™เบ‚เบฐเบซเบ™เบฒเบ”เบ‚เบญเบ‡ block เบซเบผเบทเบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™, เบกเบตเบ‚เบตเป‰เป€เบซเบเบทเป‰เบญ.

เบเบฒเบ™เบ—เปเบฒเบฅเบฒเบเบ‚เบญเบ‡ heap - เป€เบฎเบฑเบ”เปเบ™เบงเปƒเบ”เบ‡เบฒเบก ... เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ”เบฑเปˆเบ‡เบเปˆเบฒเบง, เบกเบตเบงเบดเบ—เบตเปเบเป‰เป„เบ‚เบ—เบตเปˆเป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ” - เบˆเบฒเบ (เบ–เป‰เบฒเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰) เปเบซเบผเปˆเบ‡เบ”เบฝเบงเบเบฑเบ™, เบ›เบฐเบเบญเบšเป€เบ›เบฑเบ™เบ–เบฒเบ™เบชเบญเบ‡เบžเบทเป‰เบ™เบ–เบฒเบ™เปเบฅเบฐเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบžเบฒเบเปƒเบ•เป‰ Valgrind. เบซเบผเบฑเบ‡เบˆเบฒเบเป€เบงเบฅเบฒเปƒเบ”เบซเบ™เบถเปˆเบ‡, binary เปเบกเปˆเบ™เบเบฝเบกเบžเป‰เบญเบก. เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒโ€‹เป€เบ›เบตเบ”โ€‹เบกเบฑเบ™โ€‹เบกเบตโ€‹เบ—เบฒเบ‡โ€‹เป€เบฅเบทเบญเบโ€‹เบ”เบฝเบงโ€‹เบเบฑเบ™ - เบกเบฑเบ™ crashes เป€เบ–เบดเบ‡โ€‹เปเบกเปˆเบ™โ€‹เบงเปˆเบฒโ€‹เปƒเบ™โ€‹เบฅเบฐโ€‹เบซเบงเปˆเบฒเบ‡โ€‹เบเบฒเบ™โ€‹เป€เบฅเบตเปˆเบกโ€‹เบ•เบปเป‰เบ™โ€‹, เบเปˆเบญเบ™โ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ”โ€‹เบ•เบปเบงโ€‹เบˆเบดเบ‡โ€‹. เบกเบฑเบ™เบšเปเปˆเบซเบ™เป‰เบฒเบžเปเปƒเบˆ, เปเบ™เปˆเบ™เบญเบ™ - เบ›เบฒเบเบปเบ”เบ‚เบทเป‰เบ™, เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™เบšเปเปˆเบ„เบทเบเบฑเบ™, เป€เบŠเบดเปˆเบ‡เบšเปเปˆเปเบ›เบเปƒเบˆ, เป€เบžเบฒเบฐเบงเปˆเบฒ configure scouted เบญเบญเบเบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เป€เบฅเบฑเบเบ™เป‰เบญเบ, เปเบ•เปˆเบ‚เป‰เบญเบเบกเบต Valgrind - เบ—เปเบฒเบญเบดเบ”เบ‚เป‰เบญเบเบˆเบฐเปเบเป‰เป„เบ‚ bug เบ™เบตเป‰, เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบ–เป‰เบฒเบ‚เป‰เบญเบเป‚เบŠเบเบ”เบต. , เบ•เบปเป‰เบ™เบชเบฐเบšเบฑเบšเบˆเบฐเบ›เบฒเบเบปเบ”. เบ‚เป‰เบญเบเบเปเบฒเบฅเบฑเบ‡เปเบฅเปˆเบ™เบชเบดเปˆเบ‡เบ”เบฝเบงเบเบฑเบ™เบžเบฒเบเปƒเบ•เป‰ Valgrind ... Y-y-y, y-y-y, uh-uh, เบกเบฑเบ™เป„เบ”เป‰เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, เป‚เบ”เบเบœเปˆเบฒเบ™เบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เป‚เบ”เบเบ›เบปเบเบเบฐเบ•เบดเปเบฅเบฐเบเป‰เบฒเบเบญเบญเบเป„เบ›เปƒเบ™เบญเบฐเบ”เบตเบ” bug เบ•เบปเป‰เบ™เบชเบฐเบšเบฑเบšเป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เป€เบ•เบทเบญเบ™เบ”เบฝเบงเบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบ—เบตเปˆเบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡, เบšเปเปˆเป„เบ”เป‰เบเปˆเบฒเบงเป€เบ–เบดเบ‡เบเบฒเบ™เบ•เบปเบ. เบŠเบตเบงเบดเบ”, เบเป‰เบญเบ™เบงเปˆเบฒเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเป€เบงเบปเป‰เบฒเบงเปˆเบฒ, เบšเปเปˆเป„เบ”เป‰เบเบฐเบเบฝเบกเบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ™เบตเป‰ - เป‚เบ„เบ‡เบเบฒเบ™ crashing เบขเบธเบ” crashing เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเป€เบ›เบตเบ”เบ•เบปเบงเบžเบฒเบเปƒเบ•เป‰ Walgrind. เบชเบดเปˆเบ‡เบ—เบตเปˆเบกเบฑเบ™เป€เบ›เบฑเบ™เบ„เบงเบฒเบกเบฅเบถเบเบฅเบฑเบš. เบชเบปเบกเบกเบธเบ”เบ•เบดเบ–เบฒเบ™เบ‚เบญเบ‡เบ‚เป‰เบญเบเปเบกเปˆเบ™เบงเปˆเบฒเบซเบ™เบถเปˆเบ‡เบ„เบฑเป‰เบ‡เบขเบนเปˆเปƒเบเป‰เบเบฑเบšเบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเปƒเบ™เบ›เบฐเบˆเบธเบšเบฑเบ™เบซเบผเบฑเบ‡เบˆเบฒเบเบญเบธเบ›เบฐเบ•เบดเป€เบซเบ”เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, gdb เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบ. memset-a เบเบฑเบšเบ•เบปเบงเบŠเบตเป‰เบ—เบตเปˆเบ–เบทเบเบ•เป‰เบญเบ‡เป‚เบ”เบเปƒเบŠเป‰เบ—เบฑเบ‡เบชเบญเบ‡ mmx, เบซเบผเบท xmm เบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบšเบฒเบ‡เบ—เบตเบกเบฑเบ™เป€เบ›เบฑเบ™เบšเบฒเบ‡เบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เบเบฒเบ™เบˆเบฑเบ”เบ•เปเบฒเปเบซเบ™เปˆเบ‡, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบกเบฑเบ™เบเบฑเบ‡เบเบฒเบเบ—เบตเปˆเบˆเบฐเป€เบŠเบทเปˆเบญ.

เบ•เบปเบเบฅเบปเบ‡, Valgrind เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบšเปเปˆเป„เบ”เป‰เบŠเปˆเบงเบเบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰. เปเบฅเบฐเปƒเบ™เบ—เบตเปˆเบ™เบตเป‰เบชเบดเปˆเบ‡เบ—เบตเปˆเบซเบ™เป‰เบฒเบฅเบฑเบ‡เบเบฝเบ”เบ—เบตเปˆเบชเบธเบ”เป„เบ”เป‰เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™ - เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบˆเบฐเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, เปเบ•เปˆ crashes เบชเปเบฒเบฅเบฑเบšเป€เบซเบ”เบœเบปเบ™เบ—เบตเปˆเบšเปเปˆเบฎเบนเป‰เบˆเบฑเบเบขเปˆเบฒเบ‡เปเบ—เป‰เบˆเบดเบ‡เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเป€เบซเบ”เบเบฒเบ™เบ—เบตเปˆเบญเบฒเบ”เบˆเบฐเป€เบเบตเบ”เบ‚เบถเป‰เบ™เบซเบผเบฒเบเบฅเป‰เบฒเบ™เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบตเป‰. เบชเปเบฒเบฅเบฑเบšเป€เบงเบฅเบฒเบ”เบปเบ™เบ™เบฒเบ™, เบกเบฑเบ™เบเบฑเบ‡เบšเปเปˆเบŠเบฑเบ”เป€เบˆเบ™เบงเปˆเบฒเบงเบดเบ—เบตเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบซเบฒ. เปƒเบ™โ€‹เบ—เบตเปˆโ€‹เบชเบธเบ”, เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒโ€‹เบเบฑเบ‡โ€‹เป„เบ”เป‰โ€‹เบ™เบฑเปˆเบ‡โ€‹เบฅเบปเบ‡โ€‹เปเบฅเบฐ debug. เบเบฒเบ™เบžเบดเบกเบชเบดเปˆเบ‡เบ—เบตเปˆเบซเบปเบงเบ–เบทเบเบ‚เบฝเบ™เบ„เบทเบ™เปƒเบซเบกเปˆเบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบงเปˆเบฒเบกเบฑเบ™เบšเปเปˆเบกเบตเบฅเบฑเบเบชเบฐเบ™เบฐเป€เบ›เบฑเบ™เบ•เบปเบงเป€เบฅเบ, เปเบ•เปˆเบšเบฒเบ‡เบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เบ‚เปเป‰เบกเบนเบ™เบ–เบฒเบ™เบชเบญเบ‡. เปเบฅเบฐ, เป€เบšเบดเปˆเบ‡เปเบฅเบฐเป€เบšเบดเปˆเบ‡, เบชเบฐเบ•เบฃเบดเบ‡เบ„เบนเปˆเบ™เบตเป‰เป„เบ”เป‰เบ–เบทเบเบžเบปเบšเป€เบซเบฑเบ™เบขเบนเปˆเปƒเบ™เป„เบŸเบฅเปŒ BIOS - เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เบ•เบญเบ™เบ™เบตเป‰เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเป€เบงเบปเป‰เบฒเบ”เป‰เบงเบเบ„เบงเบฒเบกเบซเบกเบฑเป‰เบ™เปƒเบˆเบ—เบตเปˆเบชเบปเบกเป€เบซเบ”เบชเบปเบกเบœเบปเบ™เบงเปˆเบฒเบกเบฑเบ™เป€เบ›เบฑเบ™ buffer overflow, เปเบฅเบฐเบกเบฑเบ™เบŠเบฑเบ”เป€เบˆเบ™เบงเปˆเบฒเบกเบฑเบ™เบ–เบทเบเบ‚เบฝเบ™เปƒเบชเปˆ buffer เบ™เบตเป‰. เปเบฅเป‰เบง, เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เป€เบŠเบฑเปˆเบ™เบ™เบตเป‰ - เปƒเบ™ Emscripten, เป‚เบŠเบเบ”เบต, เบšเปเปˆเบกเบตเบเบฒเบ™เบชเบธเปˆเบกเบžเบทเป‰เบ™เบ—เบตเปˆเบ—เบตเปˆเบขเบนเปˆ, เบšเปเปˆเบกเบตเบฎเบนเบขเบนเปˆเปƒเบ™เบ™เบฑเป‰เบ™, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ‚เบฝเบ™เบšเบฒเบ‡เบšเปˆเบญเบ™เบขเบนเปˆเบเบฒเบ‡เบฅเบฐเบซเบฑเบ”เป€เบžเบทเปˆเบญเบชเบปเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™เป‚เบ”เบเบ•เบปเบงเบŠเบตเป‰เบˆเบฒเบเบเบฒเบ™เป€เบ›เบตเบ”เบ•เบปเบงเบ„เบฑเป‰เบ‡เบชเบธเบ”เบ—เป‰เบฒเบ, เป€เบšเบดเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™, เป€เบšเบดเปˆเบ‡เบ•เบปเบงเบŠเบตเป‰, เปเบฅเบฐ, เบ–เป‰เบฒเบกเบฑเบ™เบšเปเปˆเบ›เปˆเบฝเบ™เปเบ›เบ‡, เป€เบญเบปเบฒเบญเบฒเบซเบฒเบ™เบชเปเบฒเบฅเบฑเบšเบ„เบงเบฒเบกเบ„เบดเบ”. เปเบ—เป‰เบˆเบดเบ‡เปเบฅเป‰เบง, เบกเบฑเบ™เปƒเบŠเป‰เป€เบงเบฅเบฒเบชเบญเบ‡เบชเบฒเบกเบ™เบฒเบ—เบตเป€เบžเบทเปˆเบญเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบซเบผเบฑเบ‡เบˆเบฒเบเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เปƒเบ”เป†, เปเบ•เปˆเบงเปˆเบฒเป€เบˆเบปเป‰เบฒเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เบซเบเบฑเบ‡เป„เบ”เป‰? เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เป€เบชเบฑเป‰เบ™เบชเบฐเป€เบžเบฒเบฐเป„เบ”เป‰เบ–เบทเบเบžเบปเบšเป€เบซเบฑเบ™เบงเปˆเบฒเบ„เบฑเบ”เบฅเบญเบ BIOS เบˆเบฒเบ buffer เบŠเบปเปˆเบงเบ„เบฒเบงเป„เบ›เบซเบฒเบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเปเบฒเบ‚เบญเบ‡เปเบ‚เบ - เปเบฅเบฐ, เปเบ—เป‰เบˆเบดเบ‡เปเบฅเป‰เบง, เบšเปเปˆเบกเบตเบžเบทเป‰เบ™เบ—เบตเปˆเบžเบฝเบ‡เบžเปเปƒเบ™ buffer. เบเบฒเบ™เบŠเบญเบเบซเบฒเบ—เบตเปˆเบกเบฒเบ‚เบญเบ‡เบ—เบตเปˆเบขเบนเปˆ buffer เบ—เบตเปˆเปเบ›เบเบ›เบฐเบซเบผเบฒเบ”เบ™เบฑเป‰เบ™เบชเบปเปˆเบ‡เบœเบปเบ™เปƒเบซเป‰เบกเบตเบซเบ™เป‰เบฒเบ—เบตเปˆ qemu_anon_ram_alloc เปƒเบ™เป„เบŸเบฅ oslib-posix.c - เป€เบซเบ”เบœเบปเบ™เบกเบตเบ™เบตเป‰: เบšเบฒเบ‡เบ„เบฑเป‰เบ‡เบกเบฑเบ™เบชเบฒเบกเบฒเบ”เป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เบ—เบตเปˆเบˆเบฐเบˆเบฑเบ”เบ•เปเบฒเปเบซเบ™เปˆเบ‡เบ—เบตเปˆเบขเบนเปˆเป„เบ›เบซเบฒเบซเบ™เป‰เบฒเบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆเบ‚เบญเบ‡เบ‚เบฐเบซเบ™เบฒเบ” 2 MB, เบชเปเบฒเบฅเบฑเบšเบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบ–เบฒเบก. mmap เบเปˆเบญเบ™โ€‹เบญเบทเปˆเบ™โ€‹เบญเบตเบโ€‹เบžเบฝเบ‡โ€‹เป€เบฅเบฑเบโ€‹เบ™เป‰เบญเบโ€‹, เปเบฅเบฐโ€‹เบซเบผเบฑเบ‡โ€‹เบˆเบฒเบโ€‹เบ™เบฑเป‰เบ™โ€‹เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบˆเบฐโ€‹เบชเบปเปˆเบ‡โ€‹เบ„เบทเบ™โ€‹เบชเปˆเบงเบ™โ€‹เป€เบเบตเบ™โ€‹เบ”เป‰เบงเบโ€‹เบเบฒเบ™โ€‹เบŠเปˆเบงเบโ€‹เป€เบซเบผเบทเบญโ€‹ munmap. เปเบฅเบฐเบ–เป‰เบฒเบเบฒเบ™เบˆเบฑเบ”เบ•เปเบฒเปเบซเบ™เปˆเบ‡เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบŠเบตเป‰เบšเบญเบเบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเปเบ—เบ™เบ—เบตเปˆเบˆเบฐเป€เบ›เบฑเบ™ 2 MB getpagesize() - mmap เบกเบฑเบ™เบเบฑเบ‡เบˆเบฐเปƒเบซเป‰เบ—เบตเปˆเบขเบนเปˆเบชเบญเบ”เบ„เปˆเบญเบ‡ ... เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เปƒเบ™ Emscripten mmap เบžเบฝเบ‡เปเบ•เปˆเป‚เบ—เบซเบฒ malloc, เปเบ•เปˆเปเบ™เปˆเบ™เบญเบ™เบงเปˆเบฒเบกเบฑเบ™เบšเปเปˆเบชเบญเบ”เบ„เปˆเบญเบ‡เบขเบนเปˆเปƒเบ™เบซเบ™เป‰เบฒ. เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›, เปเบกเบ‡เป„เบกเป‰เบ—เบตเปˆเป€เบฎเบฑเบ”เปƒเบซเป‰เบ‚เป‰เบญเบเบญเบธเบเบญเบฑเปˆเบ‡เบชเปเบฒเบฅเบฑเบšเบชเบญเบ‡เบชเบฒเบกเป€เบ”เบทเบญเบ™เป„เบ”เป‰เบ–เบทเบเปเบเป‰เป„เบ‚เป‚เบ”เบเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เปƒเบ™ เบขเปˆเบฒเบ‡เปƒเบ”เบญเบเปˆเบฒเบ‡เบซเบ™เบถเปˆเบ‡ เบชเบฒเบ.

เบ„เบธเบ™เบ™เบฐเบชเบปเบกเบšเบฑเบ”เบ‚เบญเบ‡เบซเบ™เป‰เบฒเบ—เบตเปˆเป‚เบ—เบซเบฒ

เปเบฅเบฐเปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เป‚เบฎเบ‡เบ‡เบฒเบ™เบœเบฐเบฅเบดเบ”เบเปเบฒเบฅเบฑเบ‡เบ™เบฑเบšเบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡, Qemu เบšเปเปˆ crash, เปเบ•เปˆเบซเบ™เป‰เบฒเบˆเปเบšเปเปˆเป€เบ›เบตเบ”, เปเบฅเบฐเป‚เบฎเบ‡เบ‡เบฒเบ™เบœเบฐเบฅเบดเบ”เบขเปˆเบฒเบ‡เบงเปˆเบญเบ‡เป„เบงเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ loops, เบ•เบฑเบ”เบชเบดเบ™เป‚เบ”เบเบœเบปเบ™เบœเบฐเบฅเบดเบ”. -d exec,in_asm,out_asm. เบชเบปเบกเบกเบธเบ”เบ•เบดเบ–เบฒเบ™เป„เบ”เป‰เป€เบเบตเบ”เบ‚เบทเป‰เบ™: เบเบฒเบ™เบ‚เบฑเบ”เบ‚เบงเบฒเบ‡เบเบฒเบ™เบˆเบฑเบšเป€เบงเบฅเบฒ (เบซเบผเบท, เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›, เบเบฒเบ™เบ‚เบฑเบ”เบ‚เบงเบฒเบ‡เบ—เบฑเบ‡เบซเบกเบปเบ”) เบšเปเปˆเบกเบฒเบฎเบญเบ”. เปเบฅเบฐเปเบ—เป‰เบˆเบดเบ‡เปเบฅเป‰เบง, เบ–เป‰เบฒเบ—เปˆเบฒเบ™ unscrew เบเบฒเบ™เบ‚เบฑเบ”เบ‚เบงเบฒเบ‡เบˆเบฒเบเบชเบฐเบžเบฒเปเบซเปˆเบ‡เบžเบทเป‰เบ™เป€เบกเบทเบญเบ‡, เป€เบŠเบดเปˆเบ‡เบชเปเบฒเบฅเบฑเบšเป€เบซเบ”เบœเบปเบ™เบšเบฒเบ‡เบขเปˆเบฒเบ‡เป€เบฎเบฑเบ”เบงเบฝเบ, เบ—เปˆเบฒเบ™เป„เบ”เป‰เบฎเบฑเบšเบฎเบนเบšเบžเบฒเบšเบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™. เปเบ•เปˆเบ™เบตเป‰เบšเปเปˆเปเบกเปˆเบ™เบ„เปเบฒเบ•เบญเบšเป€เบฅเบตเบ: เบเบฒเบ™เบ›เบฝเบšเบ—เบฝเบšเบฎเปˆเบญเบ‡เบฎเบญเบเบ—เบตเปˆเบญเบญเบเบกเบฒเบ”เป‰เบงเบเบ•เบปเบงเป€เบฅเบทเบญเบเบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡เบ™เบฑเป‰เบ™เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบงเปˆเบฒ เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เป„เบ”เป‰เปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบซเบผเบฒเบเป„เบง. เปƒเบ™เบ—เบตเปˆเบ™เบตเป‰เบกเบฑเบ™เบ•เป‰เบญเบ‡เป€เบงเบปเป‰เบฒเบงเปˆเบฒเบเบฒเบ™เบ›เบฝเบšเบ—เบฝเบšเบชเบดเปˆเบ‡เบ—เบตเปˆเบ–เบทเบเบšเบฑเบ™เบ—เบถเบเป„เบงเป‰เป‚เบ”เบเปƒเบŠเป‰ launcher emrun debugging output เบเบฑเบšเบœเบปเบ™เบœเบฐเบฅเบดเบ”เบ‚เบญเบ‡เบชเบฐเบžเบฒเปเบซเปˆเบ‡ native เบšเปเปˆเปเบกเปˆเบ™เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบเบปเบ™เบˆเบฑเบเบขเปˆเบฒเบ‡เบชเบปเบกเบšเบนเบ™. เบ‚เป‰เบญเบเบšเปเปˆเบฎเบนเป‰เบงเปˆเบฒเป‚เบ„เบ‡เบเบฒเบ™เบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเปƒเบ™ browser เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเปเบ™เบงเปƒเบ” emrun, เปเบ•เปˆเบšเบฒเบ‡เบชเบฒเบเปƒเบ™เบœเบปเบ™เบœเบฐเบฅเบดเบ”เป„เบ”เป‰เบซเบฑเบ™เบญเบญเบเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบˆเบฑเบ”เบฅเบฝเบ‡เปƒเบซเบกเปˆ, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡เบ‚เบญเบ‡เบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡เปเบกเปˆเบ™เบเบฑเบ‡เบšเปเปˆเบ—เบฑเบ™เป€เบ›เบฑเบ™เป€เบซเบ”เบœเบปเบ™เบ—เบตเปˆเบˆเบฐเบชเบปเบกเบกเบธเบ”เบงเปˆเบฒ trajectories เป„เบ”เป‰ diverged. เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›, เบกเบฑเบ™เป„เบ”เป‰เบเบฒเบเป€เบ›เบฑเบ™เบ—เบตเปˆเบŠเบฑเบ”เป€เบˆเบ™เบงเปˆเบฒเบญเบตเบ‡เบ•เบฒเบกเบ„เปเบฒเปเบ™เบฐเบ™เปเบฒ ljmpl เบกเบตเบเบฒเบ™เบซเบฑเบ™เบ›เปˆเบฝเบ™เป„เบ›เบซเบฒเบ—เบตเปˆเบขเบนเปˆเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™, เปเบฅเบฐ bytecode เบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เปเบกเปˆเบ™เปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เป‚เบ”เบเบžเบทเป‰เบ™เบ–เบฒเบ™: เบญเบฑเบ™เบซเบ™เบถเปˆเบ‡เบกเบตเบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบ—เบตเปˆเบˆเบฐเป‚เบ—เบซเบฒเบซเบ™เป‰เบฒเบ—เบตเปˆเบœเบนเป‰เบŠเปˆเบงเบ, เบญเบตเบเบญเบฑเบ™เบซเบ™เบถเปˆเบ‡เบšเปเปˆเบกเบต. เบซเบผเบฑเบ‡เบˆเบฒเบ googling เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเปเบฅเบฐเบชเบถเบเบชเบฒเบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเปเบ›เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰, เบกเบฑเบ™เป„เบ”เป‰เบเบฒเบเป€เบ›เบฑเบ™เบ—เบตเปˆเบŠเบฑเบ”เป€เบˆเบ™เบงเปˆเบฒ, เบ—เปเบฒเบญเบดเบ”, เบ—เบฑเบ™เบ—เบตเบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™. cr0 เบเบฒเบ™เบšเบฑเบ™เบ—เบถเบเป„เบ”เป‰เบ–เบทเบเป€เบฎเบฑเบ” - เบเบฑเบ‡เปƒเบŠเป‰เบ•เบปเบงเบŠเปˆเบงเบ - เป€เบŠเบดเปˆเบ‡เบ›เปˆเบฝเบ™เป‚เบ›เป€เบŠเบ”เป€เบŠเบตเป„เบ›เบชเบนเปˆเป‚เบซเบกเบ”เบ›เป‰เบญเบ‡เบเบฑเบ™, เปเบฅเบฐเบญเบฑเบ™เบ—เบตเบชเบญเบ‡, เบฎเบธเปˆเบ™ js เบšเปเปˆเป€เบ„เบตเบเบ›เปˆเบฝเบ™เป€เบ›เบฑเบ™เป‚เบซเบกเบ”เบ›เป‰เบญเบ‡เบเบฑเบ™. เปเบ•เปˆเบ„เบงเบฒเบกเบˆเบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบฅเบฑเบเบชเบฐเบ™เบฐเบญเบทเปˆเบ™เบ‚เบญเบ‡ Emscripten เปเบกเปˆเบ™เบเบฒเบ™เบฅเบฑเบ‡เป€เบฅเบ—เบตเปˆเบˆเบฐเบ—เบปเบ™เบ—เบฒเบ™เบ•เปเปˆเบฅเบฐเบซเบฑเบ”เป€เบŠเบฑเปˆเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒ. call เปƒเบ™ TCI, เป€เบŠเบดเปˆเบ‡เบ•เบปเบงเบŠเบตเป‰เบŸเบฑเบ‡เบŠเบฑเบ™เปƒเบ”เบเปเปˆเป„เบ”เป‰เบชเบปเปˆเบ‡เบœเบปเบ™เปƒเบซเป‰เบ›เบฐเป€เบžเบ” long long f(int arg0, .. int arg9) - เบŸเบฑเบ‡เบŠเบฑเบ™เบ•เป‰เบญเบ‡เบ–เบทเบเป€เบญเบตเป‰เบ™เบ”เป‰เบงเบเบˆเปเบฒเบ™เบงเบ™เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เบ—เบตเปˆเบ–เบทเบเบ•เป‰เบญเบ‡. เบ–เป‰เบฒเบเบปเบ”เบฅเบฐเบšเบฝเบšเบ™เบตเป‰เบ–เบทเบเบฅเบฐเป€เบกเบตเบ”, เบ‚เบถเป‰เบ™เบเบฑเบšเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบเบฒเบ™เบ”เบตเบšเบฑเบ, เป‚เบ›เบฅเปเบเบฅเบกเบˆเบฐเบ‚เบฑเบ”เบ‚เป‰เบญเบ‡ (เป€เบŠเบดเปˆเบ‡เป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเบ”เบต) เบซเบผเบทเป‚เบ—เบซเบฒเบซเบ™เป‰เบฒเบ—เบตเปˆเบœเบดเบ”เบžเบฒเบ”เบ—เบฑเบ‡เบซเบกเบปเบ” (เป€เบŠเบดเปˆเบ‡เบซเบ™เป‰เบฒเป€เบชเบปเป‰เบฒเปƒเบˆเบ—เบตเปˆเบˆเบฐเบ”เบตเบšเบฑเบ). เบเบฑเบ‡เบกเบตเบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ—เบตเบชเบฒเบก - เป€เบ›เบตเบ”เปƒเบŠเป‰เบเบฒเบ™เบœเบฐเบฅเบดเบ” wrappers เบ—เบตเปˆเป€เบžเบตเปˆเบก / เบฅเบปเบšเบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡, เปเบ•เปˆเบฅเบงเบกเป€เบญเบปเบฒ wrappers เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เปƒเบŠเป‰เป€เบงเบฅเบฒเบซเบผเบฒเบเบžเบทเป‰เบ™เบ—เบตเปˆ, เป€เบ–เบดเบ‡เบงเปˆเบฒเบˆเบฐเบกเบตเบ„เบงเบฒเบกเบˆเบดเบ‡เบ—เบตเปˆเบงเปˆเบฒเปƒเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบžเบฝเบ‡เปเบ•เปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบžเบฝเบ‡เป€เบฅเบฑเบเบ™เป‰เบญเบเบซเบผเบฒเบเบเปˆเบงเบฒเบฎเป‰เบญเบ wrappers. เบ™เบตเป‰เบขเปˆเบฒเบ‡เบ”เบฝเบงเปเบกเปˆเบ™เป‚เบชเบเป€เบชเบปเป‰เบฒเบซเบผเบฒเบ, เปเบ•เปˆเป„เบ”เป‰เบซเบฑเบ™เบญเบญเบเป€เบ›เบฑเบ™เบšเบฑเบ™เบซเบฒเบ—เบตเปˆเบฎเป‰เบฒเบเปเบฎเบ‡เบเบงเปˆเบฒเป€เบเบปเปˆเบฒ: เปƒเบ™เบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เบ‚เบญเบ‡เบซเบ™เป‰เบฒเบ—เบตเปˆ wrapper, เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เป„เบ”เป‰เบ–เบทเบเบ›เปˆเบฝเบ™เปเบฅเบฐเปเบ›เบ‡, เปเบ•เปˆเบšเบฒเบ‡เบ„เบฑเป‰เบ‡เบซเบ™เป‰เบฒเบ—เบตเปˆเบ—เบตเปˆเบกเบตเบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เบšเปเปˆเป„เบ”เป‰เบ–เบทเบเป€เบญเบตเป‰เบ™เบงเปˆเบฒ - เบ”เบต, เบ„เบทเบเบฑเบ™เบเบฑเบšเปƒเบ™. เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ” libffi เบ‚เบญเบ‡เบ‚เป‰เบญเบ. เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เบœเบนเป‰เบŠเปˆเบงเบเบšเบฒเบ‡เบ„เบปเบ™เบšเปเปˆเป„เบ”เป‰เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”.

เป‚เบŠเบเบ”เบต, Qemu เบกเบตเบฅเบฒเบเบŠเบทเปˆเบ•เบปเบงเบŠเปˆเบงเบเบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบญเปˆเบฒเบ™เป„เบ”เป‰เปƒเบ™เบฎเบนเบšเปเบšเบšเบ‚เบญเบ‡เป„เบŸเบฅเปŒ header เป€เบŠเบฑเปˆเบ™:

DEF_HELPER_0(lock, void)
DEF_HELPER_0(unlock, void)
DEF_HELPER_3(write_eflags, void, env, tl, i32)

เบžเบงเบเบกเบฑเบ™เบ–เบทเบเปƒเบŠเป‰เป€เบ›เบฑเบ™เป€เบฅเบทเปˆเบญเบ‡เบ•เบฐเบซเบผเบปเบเบซเบผเบฒเบ: เบ—เบณเบญเบดเบ”, เบกเบฐเบซเบฒเบžเบฒเบเปเบกเปˆเบ™เบ–เบทเบเบเบณเบ™เบปเบ”เบ„เบทเบ™เปƒเปเปˆเปƒเบ™เปเบšเบšเบ—เบตเปˆเปเบ›เบเบ›เบฐเบซเบผเบฒเบ”เบ—เบตเปˆเบชเบธเบ” DEF_HELPER_n, เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เป€เบ›เบตเบ” helper.h. เปƒเบ™เบ‚เบญเบšเป€เบ‚เบ”เบ—เบตเปˆเบกเบฐเบซเบฒเบžเบฒเบเป„เบ”เป‰เบ–เบทเบเบ‚เบฐเบซเบเบฒเบเป„เบ›เบชเบนเปˆเป‚เบ„เบ‡เบชเป‰เบฒเบ‡เป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™เปเบฅเบฐเป€เบ„เบทเปˆเบญเบ‡เปเบฒเบเบˆเบธเบ”, เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™ array เบ–เบทเบเบเปเบฒเบ™เบปเบ”, เปเบฅเบฐเปเบ—เบ™เบ—เบตเปˆเบˆเบฐเป€เบ›เบฑเบ™เบญเบปเบ‡เบ›เบฐเบเบญเบš - #include <helper.h> เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เปƒเบ™เบ—เบตเปˆเบชเบธเบ”เบ‚เป‰เบญเบเป„เบ”เป‰เบกเบตเป‚เบญเบเบฒเบ”เบ—เบปเบ”เบฅเบญเบ‡เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบขเบนเปˆเบšเปˆเบญเบ™เป€เบฎเบฑเบ”เบงเบฝเบ pyparsing, เปเบฅเบฐ script เป„เบ”เป‰เบ–เบทเบเบ‚เบฝเบ™เบ—เบตเปˆเบชเป‰เบฒเบ‡ wrappers เป€เบซเบผเบปเปˆเบฒเบ™เบฑเป‰เบ™เบขเปˆเบฒเบ‡เปเบ—เป‰เบˆเบดเบ‡เบชเปเบฒเบฅเบฑเบšเบซเบ™เป‰เบฒเบ—เบตเปˆเบ—เบตเปˆเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบ•เป‰เบญเบ‡เบเบฒเบ™.

เปเบฅเบฐเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เป‚เบฎเบ‡เบ‡เบฒเบ™เบœเบฐเบฅเบดเบ”เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบˆเบฐเป€เบฎเบฑเบ”เบงเบฝเบ. เบกเบฑเบ™เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเป€เบ›เบฑเบ™เบเป‰เบญเบ™เบงเปˆเบฒเบซเบ™เป‰เบฒเบˆเปเบšเปเปˆเป€เบ„เบตเบเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒ memtest86+ เบชเบฒเบกเบฒเบ”เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบขเบนเปˆเปƒเบ™เบเบฒเบ™เบ›เบฐเบเบญเบšเบžเบทเป‰เบ™เป€เบกเบทเบญเบ‡. เปƒเบ™เบ—เบตเปˆเบ™เบตเป‰เบกเบฑเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบŠเบตเป‰เปเบˆเบ‡เบงเปˆเบฒเบฅเบฐเบซเบฑเบ” Qemu block I/O เบ–เบทเบเบ‚เบฝเบ™เป„เบงเป‰เปƒเบ™ coroutines. Emscripten เบกเบตเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ—เบตเปˆเบซเบเบธเป‰เบ‡เบเบฒเบเบซเบผเบฒเบเบ‚เบญเบ‡เบ•เบปเบ™เป€เบญเบ‡, เปเบ•เปˆเบกเบฑเบ™เบเบฑเบ‡เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เปƒเบ™เบฅเบฐเบซเบฑเบ” Qemu, เปเบฅเบฐเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เปเบเป‰เป„เบ‚เป‚เบ›เป€เบŠเบ”เป€เบŠเบตเป„เบ”เป‰เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™: Qemu เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบ—เบฒเบ‡เป€เบฅเบทเบญเบ. -kernel, -initrd, -append, เบ—เบตเปˆเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ” boot Linux เบซเบผเบท, เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเบปเบเบ•เบปเบงเบขเปˆเบฒเบ‡, memtest86+, เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบญเบธเบ›เบฐเบเบญเบ™ block เบ—เบฑเบ‡เบซเบกเบปเบ”. เปเบ•เปˆเบ™เบตเป‰เปเบกเปˆเบ™เบšเบฑเบ™เบซเบฒ: เปƒเบ™เบเบฒเบ™เบ›เบฐเบเบญเบšเบžเบทเป‰เบ™เป€เบกเบทเบญเบ‡เบซเบ™เบถเปˆเบ‡เบชเบฒเบกเบฒเบ”เป€เบซเบฑเบ™เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบ‚เบญเบ‡ Linux kernel เบเบฑเบš console เบ—เบตเปˆเบกเบตเบ—เบฒเบ‡เป€เบฅเบทเบญเบ. -nographic, เปเบฅเบฐเบšเปเปˆเบกเบตเบœเบปเบ™เบœเบฐเบฅเบดเบ”เบˆเบฒเบเบ•เบปเบงเบ—เปˆเบญเบ‡เป€เบงเบฑเบšเป„เบ›เบซเบฒ terminal เบˆเบฒเบเบšเปˆเบญเบ™เบ—เบตเปˆเบกเบฑเบ™เบ–เบทเบเป€เบ›เบตเบ”เบ•เบปเบง emrun, เบšเปเปˆเป„เบ”เป‰เบกเบฒ. เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เบกเบฑเบ™เบšเปเปˆเบŠเบฑเบ”เป€เบˆเบ™: เป‚เบ›เป€เบŠเบ”เป€เบŠเบตเบšเปเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบซเบผเบทเบœเบปเบ™เบœเบฐเบฅเบดเบ”เบเบฒเบŸเบดเบเบšเปเปˆเป€เบฎเบฑเบ”เบงเบฝเบ. เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบกเบฑเบ™เป€เบเบตเบ”เบ‚เบถเป‰เบ™เบเบฑเบšเบ‚เป‰เบญเบเบ—เบตเปˆเบˆเบฐเบฅเปเบ–เป‰เบฒเป€เบฅเบฑเบเบ™เป‰เบญเบ. เบกเบฑเบ™เป„เบ”เป‰เบซเบฑเบ™เบญเบญเบเบงเปˆเบฒ "เป‚เบฎเบ‡เบ‡เบฒเบ™เบœเบฐเบฅเบดเบ”เบšเปเปˆเป„เบ”เป‰เบ™เบญเบ™, เปเบ•เปˆเบžเบฝเบ‡เปเบ•เปˆเบเบฐเบžเบดเบšเบŠเป‰เบฒเป†," เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ›เบฐเบกเบฒเบ™เบซเป‰เบฒเบ™เบฒเบ—เบต, kernel เบ–เบดเป‰เบกเบŠเปเปˆเบ‚เบญเบ‡เบ‚เปเป‰เบ„เบงเบฒเบกเปƒเบชเปˆ console เปเบฅเบฐเบชเบทเบšเบ•เปเปˆ hang. เบกเบฑเบ™เป„เบ”เป‰เบเบฒเบเป€เบ›เบฑเบ™เบ—เบตเปˆเบŠเบฑเบ”เป€เบˆเบ™เบงเปˆเบฒเป‚เบฎเบ‡เบ‡เบฒเบ™เบœเบฐเบฅเบดเบ”, เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›, เป€เบฎเบฑเบ”เบงเบฝเบ, เปเบฅเบฐเบžเบงเบเป€เบฎเบปเบฒเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰เบ‚เบธเบ”เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบฅเบฐเบซเบฑเบ”เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบš SDL2. เปเบ•เปˆเบซเบ™เป‰เบฒเป€เบชเบเบ”เบฒเบ, เบ‚เป‰เบญเบเบšเปเปˆเบฎเบนเป‰เบงเบดเบ—เบตเบเบฒเบ™เปƒเบŠเป‰เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบ™เบตเป‰, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เปƒเบ™เบšเบฒเบ‡เบšเปˆเบญเบ™เบ‚เป‰เบญเบเบ•เป‰เบญเบ‡เบ›เบฐเบ•เบดเบšเบฑเบ”เปเบšเบšเบชเบธเปˆเบก. เปƒเบ™เบšเบฒเบ‡เบˆเบธเบ”, เป€เบชเบฑเป‰เบ™เบ‚เบฐเปœเบฒเบ™ 0 เป„เบ”เป‰เบเบฐเบžเบดเบšเปƒเบ™เบซเบ™เป‰เบฒเบˆเปเปƒเบ™เบžเบทเป‰เบ™เบซเบฅเบฑเบ‡เบชเบตเบŸเป‰เบฒ, เป€เบŠเบดเปˆเบ‡เบŠเบตเป‰เปƒเบซเป‰เป€เบซเบฑเบ™เบ„เบงเบฒเบกเบ„เบดเบ”เบšเบฒเบ‡เบขเปˆเบฒเบ‡. เปƒเบ™เบ—เบตเปˆเบชเบธเบ”, เบกเบฑเบ™เป„เบ”เป‰เบซเบฑเบ™เบญเบญเบเบงเปˆเบฒเบšเบฑเบ™เบซเบฒเปเบกเปˆเบ™เบงเปˆเบฒ Qemu เป€เบ›เบตเบ”เบ›เปˆเบญเบ‡เบขเป‰เบฝเบก virtual เบซเบผเบฒเบเบขเบนเปˆเปƒเบ™เบ›เปˆเบญเบ‡เบขเป‰เบฝเบกเบ—เบฒเบ‡เบ”เป‰เบฒเบ™เบฎเปˆเบฒเบ‡เบเบฒเบ, เบฅเบฐเบซเบงเปˆเบฒเบ‡เบ—เบตเปˆเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ›เปˆเบฝเบ™เป‚เบ”เบเปƒเบŠเป‰ Ctrl-Alt-n: เบกเบฑเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเปƒเบ™เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบžเบทเป‰เบ™เป€เบกเบทเบญเบ‡, เปเบ•เปˆเบšเปเปˆเปเบกเปˆเบ™เบขเบนเปˆเปƒเบ™ Emscripten. เบซเบผเบฑเบ‡เบˆเบฒเบเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบเปเบฒเบˆเบฑเบ”เบ›เปˆเบญเบ‡เบขเป‰เบฝเบกเบ—เบตเปˆเบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เป‚เบ”เบเปƒเบŠเป‰เบ—เบฒเบ‡เป€เบฅเบทเบญเบ -monitor none -parallel none -serial none เปเบฅเบฐเบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเป€เบžเบทเปˆเบญเบšเบฑเบ‡เบ„เบฑเบšเปƒเบซเป‰เปเบ•เป‰เบกเบ„เบทเบ™เบซเบ™เป‰เบฒเบˆเปเบ—เบฑเบ‡เบซเบกเบปเบ”เปƒเบ™เปเบ•เปˆเบฅเบฐเบเบญเบš, เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เป„เบ”เป‰เป€เบฎเบฑเบ”เบงเบฝเบเบขเปˆเบฒเบ‡เบเบฐเบ—เบฑเบ™เบซเบฑเบ™.

เบฅเบฐเบšเบฝเบš

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบเบฒเบ™เบˆเปเบฒเบฅเบญเบ‡เปƒเบ™เบ•เบปเบงเบ—เปˆเบญเบ‡เป€เบงเบฑเบšเป€เบฎเบฑเบ”เบงเบฝเบ, เปเบ•เปˆเบ—เปˆเบฒเบ™เบšเปเปˆเบชเบฒเบกเบฒเบ”เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เปƒเบ”เป†เบ—เบตเปˆเบซเบ™เป‰เบฒเบชเบปเบ™เปƒเบˆเปƒเบ™ floppy เบ”เบฝเบง, เป€เบžเบฒเบฐเบงเปˆเบฒเบšเปเปˆเบกเบต I / O เบ•เบฑเบ™ - เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™ coroutines. Qemu เบกเบต backends coroutine เบซเบผเบฒเบเปเบฅเป‰เบง, เปเบ•เปˆเป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบฅเบฑเบเบชเบฐเบ™เบฐเบ‚เบญเบ‡ JavaScript เปเบฅเบฐเป€เบ„เบทเปˆเบญเบ‡เบชเป‰เบฒเบ‡เบฅเบฐเบซเบฑเบ” Emscripten, เบ—เปˆเบฒเบ™เบšเปเปˆเบชเบฒเบกเบฒเบ”เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบžเบฝเบ‡เปเบ•เปˆ juggling stacks. เบกเบฑเบ™เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒ "เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เป„เบ”เป‰เบซเบฒเบเป„เบ›, plaster เป„เบ”เป‰เบ–เบทเบเป‚เบเบเบเป‰เบฒเบ," เปเบ•เปˆเบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒ Emscripten เป„เบ”เป‰เบ”เบนเปเบฅเบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เปเบฅเป‰เบง. เบ™เบตเป‰เปเบกเปˆเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ—เบตเปˆเบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เบ•เบฐเบซเบฅเบปเบ: เปƒเบซเป‰เป‚เบ—เบซเบฒเบเบฒเบ™เป‚เบ—เบซเบฒเบซเบ™เป‰เบฒเบ—เบตเปˆเบซเบ™เป‰เบฒเบชเบปเบ‡เป„เบชเบ™เบตเป‰ emscripten_sleep เปเบฅเบฐเบญเบตเบเบซเบผเบฒเบเป†เบเปเบฅเบฐเบ™เบตเป‚เบ”เบเปƒเบŠเป‰เบเบปเบ™เป„เบ Asyncify, เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบเบฒเบ™เป‚เบ—เบซเบฒเบ•เบปเบงเบŠเบตเป‰เปเบฅเบฐเบเบฒเบ™เป‚เบ—เป„เบ›เบซเบฒเบซเบ™เป‰เบฒเบ—เบตเปˆเปƒเบ”เบซเบ™เบถเปˆเบ‡เบ—เบตเปˆเบซเบ™เบถเปˆเบ‡เปƒเบ™เบชเบญเบ‡เบเปเบฅเบฐเบ™เบตเบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒเบญเบฒเบ”เบˆเบฐเป€เบเบตเบ”เบ‚เบถเป‰เบ™เบ•เบทเปˆเบกเบญเบตเบเปƒเบ™ stack. เปเบฅเบฐเปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™, เบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเป‚เบ—เบซเบฒเบ—เบตเปˆเบซเบ™เป‰เบฒเบชเบปเบ‡เป„เบชเปเบ•เปˆเบฅเบฐเบ„เบปเบ™, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบฅเบทเบญเบเบชเบฐเบžเบฒเบšเบเบฒเบ™ async, เปเบฅเบฐเบ—เบฑเบ™เบ—เบตเบซเบผเบฑเบ‡เบˆเบฒเบเบเบฒเบ™เป‚เบ—, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบเบงเบ”เป€เบšเบดเปˆเบ‡เบงเปˆเบฒเบเบฒเบ™เป‚เบ— asynchronous เป€เบเบตเบ”เบ‚เบถเป‰เบ™เบซเบผเบทเบšเปเปˆ, เปเบฅเบฐเบ–เป‰เบฒเบกเบฑเบ™เบกเบต, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบšเบฑเบ™เบ—เบถเบเบ•เบปเบงเปเบ›เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เปƒเบ™เบชเบฐเบžเบฒเบšเบเบฒเบ™ async เบ™เบตเป‰, เบŠเบตเป‰เบšเบญเบเป€เบ–เบดเบ‡เบซเบ™เป‰เบฒเบ—เบตเปˆเปƒเบ”. เป€เบžเบทเปˆเบญเป‚เบญเบ™เบเบฒเบ™เบ„เบงเบšเบ„เบธเบกเป„เบ›เบซเบฒเป€เบงเบฅเบฒเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบชเบทเบšเบ•เปเปˆเบ›เบฐเบ•เบดเบšเบฑเบ” , เปเบฅเบฐเบญเบญเบเบˆเบฒเบเบซเบ™เป‰เบฒเบ—เบตเปˆเบ›เบฐเบˆเบธเบšเบฑเบ™. เบ™เบตเป‰เปเบกเปˆเบ™เบšเปˆเบญเบ™เบ—เบตเปˆเบกเบตเบ‚เบญเบšเป€เบ‚เบ”เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบชเบถเบเบชเบฒเบœเบปเบ™เบเบฐเบ—เบปเบš เบเบฒเบ™เบ‚เบนเบ”เบฎเบตเบ” - เบชเปเบฒเบฅเบฑเบšเบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เบ‚เบญเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบฅเบฐเบซเบฑเบ”เบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡เบซเบผเบฑเบ‡เบˆเบฒเบเบเบฑเบšเบ„เบทเบ™เบกเบฒเบˆเบฒเบเบเบฒเบ™เป‚เบ— asynchronous, compiler เบˆเบฐเบชเป‰เบฒเบ‡ "stubs" เบ‚เบญเบ‡เบŸเบฑเบ‡เบŠเบฑเบ™เบ—เบตเปˆเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบซเบผเบฑเบ‡เบˆเบฒเบเบเบฒเบ™เป‚เบ—เบ—เบตเปˆเบซเบ™เป‰เบฒเบชเบปเบ‡เป„เบช - เปเบšเบšเบ™เบตเป‰: เบ–เป‰เบฒเบกเบตเบเบฒเบ™เป‚เบ—เบ—เบตเปˆเบซเบ™เป‰เบฒเบชเบปเบ‡เป„เบช, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบŸเบฑเบ‡เบŠเบฑเบ™เบˆเบฐเบ–เบทเบเบ‚เบฐเบซเบเบฒเบเบขเบนเปˆเบšเปˆเบญเบ™เปƒเบ”เบšเปˆเบญเบ™เบซเบ™เบถเปˆเบ‡ n / 2. เป€เบงเบฅเบฒ โ€” เบ™เบตเป‰เปเบกเปˆเบ™เบเบฑเบ‡, เบ–เป‰เบฒเบšเปเปˆเบˆเบทเปˆเป„เบงเป‰เบงเปˆเบฒเบซเบผเบฑเบ‡เบˆเบฒเบเปเบ•เปˆเบฅเบฐเบเบฒเบ™เป‚เบ—เบ—เบตเปˆเบญเบฒเบ”เบˆเบฐ asynchronous, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป€เบžเบตเปˆเบกเบเบฒเบ™เบ›เบฐเบซเบเบฑเบ”เบ•เบปเบงเปเบ›เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™เบšเบฒเบ‡เบขเปˆเบฒเบ‡เปƒเบซเป‰เบเบฑเบšเบซเบ™เป‰เบฒเบ—เบตเปˆเบ•เบปเป‰เบ™เบชเบฐเบšเบฑเบš. เบ•เปเปˆเบกเบฒ, เบ‚เป‰เบญเบเบเบฑเบ‡เบ•เป‰เบญเบ‡เบ‚เบฝเบ™ script เบ‡เปˆเบฒเบเป†เปƒเบ™ Python, เป€เบŠเบดเปˆเบ‡เบญเบตเบ‡เปƒเบชเปˆเบŠเบธเบ”เบ‚เบญเบ‡เบซเบ™เป‰เบฒเบ—เบตเปˆเปƒเบŠเป‰เป€เบเบตเบ™เป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐเบ—เบตเปˆเบชเบปเบกเบกเบธเบ”เบงเปˆเบฒ "เบšเปเปˆเบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰ asynchrony เบœเปˆเบฒเบ™เบ•เบปเบงเป€เบญเบ‡" (เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เบเบฒเบ™เบชเบปเปˆเบ‡เป€เบชเบตเบก stack เปเบฅเบฐเบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบ—เบตเปˆเบ‚เป‰เบญเบเบžเบฝเบ‡เปเบ•เปˆเบญเบฐเบ—เบดเบšเบฒเบเบšเปเปˆเป„เบ”เป‰. เป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเปƒเบ™เบžเบงเบเบกเบฑเบ™), เบŠเบตเป‰เบšเบญเบเบเบฒเบ™เป‚เบ—เบœเปˆเบฒเบ™เบ•เบปเบงเบŠเบตเป‰เปƒเบ™เบซเบ™เป‰เบฒเบ—เบตเปˆเบ„เบงเบ™เบˆเบฐเบ–เบทเบเบฅเบฐเป€เบฅเบตเบเป‚เบ”เบ compiler เป€เบžเบทเปˆเบญเบšเปเปˆเปƒเบซเป‰เบŸเบฑเบ‡เบŠเบฑเบ™เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบšเปเปˆเบ–เบทเบเบ–เบทเบงเปˆเบฒเป€เบ›เบฑเบ™ asynchronous. เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เป„เบŸเบฅเปŒ JS เบžเบฒเบเปƒเบ•เป‰ 60 MB เปเบกเปˆเบ™เบซเบผเบฒเบเบขเปˆเบฒเบ‡เบŠเบฑเบ”เป€เบˆเบ™ - เปƒเบซเป‰เป€เบงเบปเป‰เบฒเบงเปˆเบฒเบขเปˆเบฒเบ‡เบซเบ™เป‰เบญเบ 30. เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒ, เป€เบกเบทเปˆเบญเบ‚เป‰เบญเบเป„เบ”เป‰เบ•เบฑเป‰เบ‡เบชเบฐเบ„เบดเบšเบ›เบฐเบเบญเบš, เปเบฅเบฐเป‚เบ”เบเบšเบฑเบ‡เป€เบญเบตเบ™เบ–เบดเป‰เบกเบ•เบปเบงเป€เบฅเบทเบญเบเบ•เบปเบงเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ, เปƒเบ™เบ™เบฑเป‰เบ™เบกเบต. -O3. เบ‚เป‰เบญเบเปเบฅเปˆเบ™เบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™, เปเบฅเบฐ Chromium เบเบดเบ™เป€เบ–เบดเบ‡เบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเปเบฒ เปเบฅเบฐเบ‚เบฑเบ”เบ‚เป‰เบญเบ‡. เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เป€เบšเบดเปˆเบ‡เป‚เบ”เบเบšเบฑเบ‡เป€เบญเบตเบ™เบงเปˆเบฒเบฅเบฒเบงเบเปเบฒเบฅเบฑเบ‡เบžเบฐเบเบฒเบเบฒเบกเบ”เบฒเบงเป‚เบซเบฅเบ” ... เบ”เบต, เบ‚เป‰เบญเบเบชเบฒเบกเบฒเบ”เป€เบงเบปเป‰เบฒเบซเบเบฑเบ‡เป„เบ”เป‰, เบ‚เป‰เบญเบเบˆเบฐเปเบŠเปˆเปเบ‚เบ‡เป€เบเบตเบ™เป„เบ›เบ–เป‰เบฒเบ‚เป‰เบญเบเบ–เบทเบเบ‚เปเปƒเบซเป‰เบชเบถเบเบชเบฒเบขเปˆเบฒเบ‡เบฅเบฐเบกเบฑเบ”เบฅเบฐเบงเบฑเบ‡เปเบฅเบฐเป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบš 500+ MB Javascript.

เปเบ•เปˆเบซเบ™เป‰เบฒเป€เบชเบเบ”เบฒเบ, เบเบฒเบ™เบเบงเบ”เบชเบญเบšเปƒเบ™เบฅเบฐเบซเบฑเบ”เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™ Asyncify เบšเปเปˆเป€เบ›เบฑเบ™เบกเบดเบ”เบเบฑเบšเบ—เบฑเบ‡เบซเบกเบปเบ” longjmp-s เบ—เบตเปˆเบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เปƒเบ™เบฅเบฐเบซเบฑเบ”เป‚เบ›เป€เบŠเบ”เป€เบŠเบต virtual, เปเบ•เปˆเบซเบผเบฑเบ‡เบˆเบฒเบ patch เบ‚เบฐเบซเบ™เบฒเบ”เบ™เป‰เบญเบเบ—เบตเปˆเบ›เบดเบ”เบเบฒเบ™เบเบงเบ”เบชเบญเบšเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เปเบฅเบฐเบšเบฑเบ‡เบ„เบฑเบšเปƒเบซเป‰เบŸเบทเป‰เบ™เบŸเบนเบชเบฐเบžเบฒเบšเบเบฒเบ™เบ„เบทเบเบฑเบšเบงเปˆเบฒเบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบ”เบต, เบฅเบฐเบซเบฑเบ”เป€เบฎเบฑเบ”เบงเบฝเบ. เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเปเบ›เบเบ›เบฐเบซเบฅเบฒเบ”เป„เบ”เป‰เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™: เบšเบฒเบ‡เบ„เบฑเป‰เบ‡เบเบฒเบ™เบเบงเบ”เบชเบญเบšเปƒเบ™เบฅเบฐเบซเบฑเบ” synchronization เป„เบ”เป‰เบ–เบทเบเบเบฐเบ•เบธเป‰เบ™ - เบญเบฑเบ™เบ”เบฝเบงเบเบฑเบ™เบ—เบตเปˆเป€เบฎเบฑเบ”เปƒเบซเป‰เป€เบเบตเบ”เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”เบ–เป‰เบฒ, เบญเบตเบ‡เบ•เบฒเบกเป€เบซเบ”เบœเบปเบ™เบ‚เบญเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”, เบกเบฑเบ™เบ„เบงเบ™เบˆเบฐเบ–เบทเบเบชเบฐเบเบฑเบ” - เบกเบตเบ„เบปเบ™เบžเบฐเบเบฒเบเบฒเบกเบˆเบฑเบš mutex เบ—เบตเปˆเบ–เบทเบเบˆเบฑเบšเปเบฅเป‰เบง. เป‚เบŠเบเบ”เบต, เบ™เบตเป‰เบšเปเปˆเปเบกเปˆเบ™เบšเบฑเบ™เบซเบฒเบ—เบตเปˆเบกเบตเป€เบซเบ”เบœเบปเบ™เปƒเบ™เบฅเบฐเบซเบฑเบ” serialized - เบ‚เป‰เบญเบเบžเบฝเบ‡เปเบ•เปˆเปƒเบŠเป‰เบเบฒเบ™เบ—เปเบฒเบ‡เบฒเบ™เบ‚เบญเบ‡ loop เบซเบผเบฑเบเบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เบ—เบตเปˆเบชเบฐเบซเบ™เบญเบ‡เปƒเบซเป‰เป‚เบ”เบ Emscripten, เปเบ•เปˆเบšเบฒเบ‡เบ„เบฑเป‰เบ‡เบเบฒเบ™เป‚เบ— asynchronous เบˆเบฐ unwrap stack เบซเบกเบปเบ”, เปเบฅเบฐเปƒเบ™เป€เบงเบฅเบฒเบ™เบตเป‰เบกเบฑเบ™เบˆเบฐเบฅเบปเป‰เบกเป€เบซเบฅเบง. setTimeout เบˆเบฒเบ loop เบ•เบปเป‰เบ™เบ•เป - เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบฅเบฐเบซเบฑเบ”เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ iteration loop เบ•เบปเป‰เบ™เบ•เปเป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เบญเบญเบเบˆเบฒเบ iteration เบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒ. Rewrote เปƒเบ™ loop infinite เปเบฅเบฐ emscripten_sleep, เปเบฅเบฐเบšเบฑเบ™เบซเบฒเบ—เบตเปˆเบกเบต mutexes เบขเบธเบ”เป€เบŠเบปเบฒ. เบฅเบฐเบซเบฑเบ”เป„เบ”เป‰เบเบฒเบเป€เบ›เบฑเบ™เป€เบซเบ”เบœเบปเบ™เบซเบผเบฒเบ - เบซเบผเบฑเบ‡เบˆเบฒเบเบ—เบตเปˆเบ—เบฑเบ‡เบซเบกเบปเบ”, เปƒเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡, เบ‚เป‰เบญเบเบšเปเปˆเบกเบตเบฅเบฐเบซเบฑเบ”เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบ—เบตเปˆเบเบฐเบเบฝเบกเบเบญเบšเบเบฒเบ™เป€เบ„เบทเปˆเบญเบ™เป„เบซเบงเบ•เปเปˆเป„เบ› - เป‚เบ›เป€เบŠเบ”เป€เบŠเบตเบžเบฝเบ‡เปเบ•เปˆเบ„เบดเบ”เป„เบฅเปˆเบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เปเบฅเบฐเบซเบ™เป‰เบฒเบˆเปเป„เบ”เป‰เบ–เบทเบเบ›เบฑเบšเบ›เบธเบ‡เป€เบ›เบฑเบ™เปเบ•เปˆเบฅเบฐเป„เบฅเบเบฐ. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบšเบฑเบ™เบซเบฒเบšเปเปˆเป„เบ”เป‰เบขเบธเบ”เบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™: เบšเบฒเบ‡เบ„เบฑเป‰เบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ” Qemu เบžเบฝเบ‡เปเบ•เปˆเบขเบธเบ”เป€เบŠเบปเบฒเบขเปˆเบฒเบ‡เบ‡เบฝเบšเป†เป‚เบ”เบเบšเปเปˆเบกเบตเบ‚เปเป‰เบเบปเบเป€เบงเบฑเป‰เบ™เบซเบผเบทเบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”. เปƒเบ™เป€เบงเบฅเบฒเบ™เบตเป‰เบ‚เป‰เบญเบเบเบญเบกเปเบžเป‰เบกเบฑเบ™, เปเบ•เปˆเป€เบšเบดเปˆเบ‡เป„เบ›เบ‚เป‰เบฒเบ‡เบซเบ™เป‰เบฒ, เบ‚เป‰เบญเบเบˆเบฐเป€เบงเบปเป‰เบฒเบงเปˆเบฒเบšเบฑเบ™เบซเบฒเปเบกเปˆเบ™เบ™เบตเป‰: เบฅเบฐเบซเบฑเบ” coroutine, เปƒเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡, เบšเปเปˆเป„เบ”เป‰เปƒเบŠเป‰. setTimeout (เบซเบผเบทเบขเปˆเบฒเบ‡เบซเบ™เป‰เบญเบเบšเปเปˆเปเบกเปˆเบ™เป€เบฅเบทเป‰เบญเบเป†เบ•เบฒเบกเบ—เบตเปˆเป€เบˆเบปเป‰เบฒเบ„เบดเบ”): function emscripten_yield เบžเบฝเบ‡เปเบ•เปˆเบเปเบฒเบ™เบปเบ”เบ—เบธเบ‡เบเบฒเบ™เป‚เบ— asynchronous. เบˆเบธเบ”เบ—เบฑเบ‡เบซเบกเบปเบ”เปเบกเปˆเบ™เบงเปˆเบฒ emscripten_coroutine_next เบšเปเปˆโ€‹เปเบกเปˆเบ™โ€‹เบเบฒเบ™โ€‹เบ—เปเบฒโ€‹เบ‡เบฒเบ™ asynchronousโ€‹: เบžเบฒเบโ€‹เปƒเบ™โ€‹เบกเบฑเบ™โ€‹เบเบงเบ”โ€‹เบชเบญเบšโ€‹เบ—เบธเบ‡โ€‹เบŠเบฒเบ”โ€‹, reset เบกเบฑเบ™โ€‹เปเบฅเบฐโ€‹เบเบฒเบ™โ€‹เป‚เบญเบ™โ€‹เบเบฒเบ™โ€‹เบ„เบงเบšโ€‹เบ„เบธเบกโ€‹เป„เบ›โ€‹เบšเปˆเบญเบ™โ€‹เบ—เบตเปˆโ€‹เบกเบฑเบ™โ€‹เบˆเปเบฒโ€‹เป€เบ›เบฑเบ™โ€‹. เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เบเบฒเบ™เบชเบปเปˆเบ‡เป€เบชเบตเบกเบเบฒเบ™ stack เบชเบดเป‰เบ™เบชเบธเบ”เบฅเบปเบ‡เบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™. เบšเบฑเบ™เบซเบฒเปเบกเปˆเบ™เบงเปˆเบฒเป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบซเบผเบฑเบ‡เบˆเบฒเบเบšเปเปˆเป€เบชเบเบ„เปˆเบฒ, เบ—เบตเปˆเบ›เบฒเบเบปเบ”เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบชเบฐเบ™เบธเบเป€เบเบต coroutine เป„เบ”เป‰เบ–เบทเบเบ›เบดเบ”เปƒเบŠเป‰เบ‡เบฒเบ™เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบ„เบงเบฒเบกเบˆเบดเบ‡เบ—เบตเปˆเบงเปˆเบฒเบ‚เป‰เบญเบเบšเปเปˆเป„เบ”เป‰เบ„เบฑเบ”เบฅเบญเบเบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เบˆเบฒเบ backend coroutine เบ—เบตเปˆเบกเบตเบขเบนเปˆเปเบฅเป‰เบง, เบซเบ™เป‰เบฒเบ—เบตเปˆ. qemu_in_coroutine เบเบฑเบšเบ„เบทเบ™เบ„เบงเบฒเบกเบˆเบดเบ‡เป€เบกเบทเปˆเบญเปƒเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡เบกเบฑเบ™เบ„เบงเบ™เบˆเบฐเป„เบ”เป‰เบเบฑเบšเบ„เบทเบ™ false. เบ™เบตเป‰เบ™เปเบฒเป„เบ›เบชเบนเปˆเบเบฒเบ™เป‚เบ— emscripten_yield, เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡เบ—เบตเปˆเบšเปเปˆเบกเบตเปƒเบœเบขเบนเปˆเปƒเบ™ stack เป„เบ”เป‰ emscripten_coroutine_next, stack unfolded เป„เบ›เบ—เบฒเบ‡เป€เบ—เบตเบ‡เบซเบผเบฒเบ, เปเบ•เปˆเบšเปเปˆเบกเบต setTimeout, เบ”เบฑเปˆเบ‡เบ—เบตเปˆเบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป€เบงเบปเป‰เบฒเปเบฅเป‰เบง, เบšเปเปˆเป„เบ”เป‰เบ–เบทเบเบงเบฒเบ‡เบชเบฐเปเบ”เบ‡.

เบเบฒเบ™เบชเป‰เบฒเบ‡เบฅเบฐเบซเบฑเบ” JavaScript

เปเบฅเบฐ, เปƒเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡, เบ™เบตเป‰เปเบกเปˆเบ™เบ„เปเบฒเบชเบฑเบ™เบเบฒ "เบเบฒเบ™เบซเบฑเบ™เบŠเบตเป‰เบ™ minced เบเบฑเบšเบ„เบทเบ™เป„เบ›เบšเปˆเบญเบ™." เบšเปเปˆเปเบกเปˆเบ™เปเบ—เป‰เป†. เปเบ™เปˆเบ™เบญเบ™, เบ–เป‰เบฒเบžเบงเบเป€เบฎเบปเบฒเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ Qemu เปƒเบ™เบ•เบปเบงเบ—เปˆเบญเบ‡เป€เบงเบฑเบš, เปเบฅเบฐ Node.js เปƒเบ™เบกเบฑเบ™, เบ•เบฒเบกเบ—เปเบฒเบกเบฐเบŠเบฒเบ”, เบซเบผเบฑเบ‡เบˆเบฒเบเบเบฒเบ™เบชเป‰เบฒเบ‡เบฅเบฐเบซเบฑเบ”เปƒเบ™ Qemu เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป„เบ”เป‰เบฎเบฑเบš JavaScript เบœเบดเบ”เบžเบฒเบ”เบซเบกเบปเบ”. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบšเบฒเบ‡เบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เบเบฒเบ™เบซเบฑเบ™เบ›เปˆเบฝเบ™เบ„เบทเบ™.

เบซเบ™เป‰เบฒเบ—เปเบฒเบญเบดเบ”, เป€เบฅเบฑเบเบ™เป‰เบญเบเบเปˆเบฝเบงเบเบฑเบšเบงเบดเบ—เบตเบเบฒเบ™ Qemu เป€เบฎเบฑเบ”เบงเบฝเบ. เบเบฐเบฅเบธเบ™เบฒเปƒเบซเป‰เบญเบฐเป„เบžเบ‚เป‰เบญเบเบ—เบฑเบ™เบ—เบต: เบ‚เป‰เบญเบเบšเปเปˆเปเบกเปˆเบ™เบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒ Qemu เบกเบทเบญเบฒเบŠเบตเบšเปเบฅเบฐเบšเบปเบ”เบชเบฐเบซเบผเบธเบšเบ‚เบญเบ‡เบ‚เป‰เบญเบเบญเบฒเบ”เบˆเบฐเบœเบดเบ”เบžเบฒเบ”เปƒเบ™เบšเบฒเบ‡เบšเปˆเบญเบ™. เบเป‰เบญเบ™เบงเปˆเบฒเบžเบงเบเป€เบ‚เบปเบฒเป€เบงเบปเป‰เบฒเบงเปˆเบฒ, "เบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™เบ‚เบญเบ‡เบ™เบฑเบเบฎเบฝเบ™เบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบเบปเบ‡เบเบฑเบ™เบเบฑเบšเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™เบ‚เบญเบ‡เบ„เบน, Peano เปเบฅเบฐเบ„เบงเบฒเบกเบฎเบนเป‰เบชเบถเบเบ—เบปเปˆเบงเป„เบ›." Qemu เบกเบตเบˆเปเบฒเบ™เบงเบ™เบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒเบ‚เบญเบ‡เปเบ‚เบเบ—เบตเปˆเบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เปเบฅเบฐเบชเปเบฒเบฅเบฑเบšเปเบ•เปˆเบฅเบฐเบ„เบปเบ™เบกเบตเบฅเบฒเบเบŠเบทเปˆเป€เบŠเบฑเปˆเบ™ target-i386. เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบชเปเบฒเบฅเบฑเบšเบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒเบ‚เบญเบ‡เปเบ‚เบเบซเบผเบฒเบ, เปเบ•เปˆเบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบˆเบฐเป€เบ›เบฑเบ™เบชเบญเบ‡เบชเบญเบ‡เป€เบ—เบปเปˆเบฒ. เบฅเบฐเบซเบฑเบ”เป€เบžเบทเปˆเบญเบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบ‚เบญเบ‡เปเบ‚เบ, เปƒเบ™เบ—เบฒเบ‡เบเบฑเบšเบเบฑเบ™, เบชเป‰เบฒเบ‡เบšเบฒเบ‡เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™ Qemu เบžเบฒเบเปƒเบ™, เป€เบŠเบดเปˆเบ‡ TCG (เบ•เบปเบงเบชเป‰เบฒเบ‡เบฅเบฐเบซเบฑเบ”เบ‚เบฐเบซเบ™เบฒเบ”เบ™เป‰เบญเบ) เปเบฅเป‰เบงเบ›เปˆเบฝเบ™เป€เบ›เบฑเบ™เบฅเบฐเบซเบฑเบ”เป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบเบชเปเบฒเบฅเบฑเบšเบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒเป€เบˆเบปเป‰เบฒเบžเบฒเบš. เบ”เบฑเปˆเบ‡เบ—เบตเปˆเป„เบ”เป‰เบเปˆเบฒเบงเป„เบงเป‰เปƒเบ™เป„เบŸเบฅเปŒ readme เบ—เบตเปˆเบ•เบฑเป‰เบ‡เบขเบนเปˆเปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบต tcg, เปƒเบ™เป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™เบ™เบตเป‰เปเบกเปˆเบ™เบชเปˆเบงเบ™เบซเบ™เบถเปˆเบ‡เบ‚เบญเบ‡ C compiler เบ›เบปเบเบเบฐเบ•เบด, เป€เบŠเบดเปˆเบ‡เบ•เปเปˆเบกเบฒเป„เบ”เป‰เบ–เบทเบเบ”เบฑเบ”เปเบ›เบ‡เบชเปเบฒเบฅเบฑเบš JIT. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเบปเบเบ•เบปเบงเบขเปˆเบฒเบ‡, เบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒเป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเปƒเบ™เบ‚เปเป‰เบเปเบฒเบ™เบปเบ”เบ‚เบญเบ‡เป€เบญเบเบฐเบชเบฒเบ™เบ™เบตเป‰เปเบกเปˆเบ™เบšเปเปˆเป€เบ›เบฑเบ™เบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบ‚เบญเบ‡เปเบ‚เบ, เปเบ•เปˆเป€เบ›เบฑเบ™เบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเป€เบˆเบปเป‰เบฒเบžเบฒเบš. เปƒเบ™เบšเบฒเบ‡เบˆเบธเบ”, เบญเบปเบ‡เบ›เบฐเบเบญเบšเบญเบทเปˆเบ™เบ›เบฒเบเบปเบ” - เบ•เบปเบงเปเบ›เบฅเบฐเบซเบฑเบ”เบ‚เบฐเบซเบ™เบฒเบ”เบ™เป‰เบญเบ (TCI), เป€เบŠเบดเปˆเบ‡เบ„เบงเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบฅเบฐเบซเบฑเบ” (เป€เบเบทเบญเบšเบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™เบžเบฒเบเปƒเบ™) เปƒเบ™เป€เบกเบทเปˆเบญเบšเปเปˆเบกเบตเบ•เบปเบงเบชเป‰เบฒเบ‡เบฅเบฐเบซเบฑเบ”เบชเปเบฒเบฅเบฑเบšเบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒเบชเบฐเป€เบžเบฒเบฐ. เปƒเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡, เบ•เบฒเบกเป€เบญเบเบฐเบชเบฒเบ™เบ‚เบญเบ‡เบ•เบปเบ™, เบ™เบฒเบเบžเบฒเบชเบฒเบ™เบตเป‰เบญเบฒเบ”เบˆเบฐเบšเปเปˆเบ›เบฐเบ•เบดเบšเบฑเบ”เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เบชเป‰เบฒเบ‡เบฅเบฐเบซเบฑเบ” JIT, เบšเปเปˆเบžเบฝเบ‡เปเบ•เปˆเปƒเบ™เบ›เบฐเบฅเบดเบกเบฒเบ™เบ‚เบญเบ‡เบ„เบงเบฒเบกเป„เบง, เปเบ•เปˆเบเบฑเบ‡เบ„เบธเบ™เบ™เบฐเบžเบฒเบš. เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบ‚เป‰เบญเบเบšเปเปˆเปเบ™เปˆเปƒเบˆเบงเปˆเบฒเบ„เปเบฒเบญเบฐเบ—เบดเบšเบฒเบเบ‚เบญเบ‡เบฅเบฒเบงเบกเบตเบ„เบงเบฒเบกเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบขเปˆเบฒเบ‡เบชเบปเบกเบšเบนเบ™.

เบ—เปเบฒเบญเบดเบ”เบ‚เป‰เบญเบเบžเบฐเบเบฒเบเบฒเบกเบชเป‰เบฒเบ‡ backend TCG เป€เบ•เบฑเบกเบฎเบนเบšเปเบšเบš, เปเบ•เปˆเบชเบฑเบšเบชเบปเบ™เบขเปˆเบฒเบ‡เป„เบงเบงเบฒเปƒเบ™เบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡เปเบฅเบฐเบ„เปเบฒเบญเบฐเบ—เบดเบšเบฒเบเบ—เบตเปˆเบšเปเปˆเบŠเบฑเบ”เป€เบˆเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบ‚เบญเบ‡เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒ bytecode, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ‚เป‰เบญเบเบˆเบถเปˆเบ‡เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบซเปเปˆเบ•เบปเบงเปเบ›เบžเบฒเบชเบฒ TCI. เบ™เบตเป‰โ€‹เปƒเบซเป‰โ€‹เบ‚เปเป‰โ€‹เบ”เบตโ€‹เบซเบผเบฒเบโ€‹เบขเปˆเบฒเบ‡โ€‹:

  • เปƒเบ™โ€‹เป€เบงโ€‹เบฅเบฒโ€‹เบ—เบตเปˆโ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ”โ€‹เป€เบ„เบทเปˆเบญเบ‡โ€‹เบชเป‰เบฒเบ‡โ€‹เบฅเบฐโ€‹เบซเบฑเบ”โ€‹, เบ—เปˆเบฒเบ™โ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เป€เบšเบดเปˆเบ‡โ€‹เบšเปเปˆโ€‹เป„เบ”เป‰โ€‹เบขเบนเปˆโ€‹เปƒเบ™โ€‹เบ„เปเบฒโ€‹เบญเบฐโ€‹เบ—เบดโ€‹เบšเบฒเบโ€‹เบ‚เบญเบ‡โ€‹เบ„เปเบฒโ€‹เปเบ™เบฐโ€‹เบ™เปเบฒโ€‹, เปเบ•เปˆโ€‹เบขเบนเปˆโ€‹เปƒเบ™โ€‹เบฅเบฐโ€‹เบซเบฑเบ”โ€‹เบ™เบฒเบโ€‹เบžเบฒโ€‹เบชเบฒโ€‹
  • เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบชเป‰เบฒเบ‡เบซเบ™เป‰เบฒเบ—เบตเปˆเบšเปเปˆเปเบกเปˆเบ™เบชเปเบฒเบฅเบฑเบšเบ—เบธเบเป†เบเบฒเบ™เปเบ›เบžเบฒเบชเบฒเบ—เบตเปˆเบžเบปเบš, เปเบ•เปˆ, เบ•เบปเบงเบขเปˆเบฒเบ‡, เบžเบฝเบ‡เปเบ•เปˆเบซเบผเบฑเบ‡เบˆเบฒเบเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบฎเป‰เบญเบ
  • เบ–เป‰เบฒเบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เบˆเบฐเบ›เปˆเบฝเบ™เปเบ›เบ‡ (เปเบฅเบฐเบ™เบตเป‰เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰, เบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเป‚เบ”เบเบซเบ™เป‰เบฒเบ—เบตเปˆเบ—เบตเปˆเบกเบตเบŠเบทเปˆเบ—เบตเปˆเบกเบตเบ„เปเบฒเบงเปˆเบฒ patch), เบ‚เป‰เบญเบเบˆเบฐเบ•เป‰เบญเบ‡เปƒเบŠเป‰เบฅเบฐเบซเบฑเบ” JS เบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™, เปเบ•เปˆเบขเปˆเบฒเบ‡เบซเบ™เป‰เบญเบเบ‚เป‰เบญเบเบˆเบฐเบกเบตเบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบ—เบตเปˆเบˆเบฐเบชเป‰เบฒเบ‡เปƒเบซเบกเปˆเบˆเบฒเบ.

เบเปˆเบฝเบงเบเบฑเบšเบˆเบธเบ”เบ—เบตเบชเบฒเบก, เบ‚เป‰เบญเบเบšเปเปˆเปเบ™เปˆเปƒเบˆเบงเปˆเบฒเบเบฒเบ™ patching เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบซเบผเบฑเบ‡เบˆเบฒเบเบฅเบฐเบซเบฑเบ”เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เบ„เบฑเป‰เบ‡เบ—เปเบฒเบญเบดเบ”, เปเบ•เปˆเบชเบญเบ‡เบˆเบธเบ”เบ—เปเบฒเบญเบดเบ”เปเบกเปˆเบ™เบžเบฝเบ‡เบžเป.

เปƒเบ™เป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™, เบฅเบฐเบซเบฑเบ”เป„เบ”เป‰เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบทเป‰เบ™เปƒเบ™เบฎเบนเบšเปเบšเบšเบ‚เบญเบ‡เบชเบฐเบซเบผเบฑเบšเบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆเบ—เบตเปˆเบขเบนเปˆเบ‚เบญเบ‡เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒ bytecode เบ•เบปเป‰เบ™เบชเบฐเบšเบฑเบš, เปเบ•เปˆเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบˆเบทเปˆเบˆเปเบฒเบšเบปเบ”เบ„เบงเบฒเบกเบเปˆเบฝเบงเบเบฑเบš Emscripten, เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบ‚เบญเบ‡ JS เบ—เบตเปˆเบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบทเป‰เบ™เปเบฅเบฐ relooping, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบชเป‰เบฒเบ‡เบฅเบฐเบซเบฑเบ”เบ‚เบญเบ‡เบกเบฐเบ™เบธเบ”เบซเบผเบฒเบเบ‚เบถเป‰เบ™, เป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐเบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆเบกเบฑเบ™เป€เบซเบฑเบ™เป„เบ”เป‰เบŠเบฑเบ”เป€เบˆเบ™. เป„เบ”เป‰โ€‹เบซเบฑเบ™โ€‹เบญเบญเบโ€‹เบงเปˆเบฒโ€‹เบˆเบธเบ”โ€‹เบ”เบฝเบงโ€‹เบ—เบตเปˆโ€‹เป€เบ‚เบปเป‰เบฒโ€‹เป„เบ›โ€‹เปƒเบ™โ€‹เบ•เบฑเบ™โ€‹เบเบฒเบ™โ€‹เปเบ›โ€‹เบžเบฒโ€‹เบชเบฒโ€‹เปเบกเปˆเบ™โ€‹เบเบฒเบ™โ€‹เป€เบฅเบตเปˆเบกโ€‹เบ•เบปเป‰เบ™โ€‹เบ‚เบญเบ‡โ€‹เบ•เบปเบ™โ€‹. เบšเปเปˆเบกเบตเบเบฒเบ™เป€เบงเบปเป‰เบฒเป„เบงเบเบงเปˆเบฒเบเบฒเบ™เป€เบฎเบฑเบ”, เบซเบผเบฑเบ‡เบˆเบฒเบเป€เบงเบฅเบฒเปƒเบ”เบซเบ™เบถเปˆเบ‡เบžเบงเบเป€เบฎเบปเบฒเบกเบตเป€เบ„เบทเปˆเบญเบ‡เบเปเบฒเป€เบ™เบตเบ”เบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเบชเป‰เบฒเบ‡เบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเบกเบต ifs (เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบšเปเปˆเบกเบต loops). เปเบ•เปˆเป‚เบŠเบเบšเปเปˆเบ”เบต, เบกเบฑเบ™เป„เบ”เป‰เบฅเบปเป‰เบกเบฅเบปเบ‡, เปƒเบซเป‰เบ‚เปเป‰เบ„เบงเบฒเบกเบงเปˆเบฒเบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบกเบตเบ„เบงเบฒเบกเบเบฒเบงเบ—เบตเปˆเบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡. เบเบดเปˆเบ‡เป„เบ›เบเบงเปˆเบฒเบ™เบฑเป‰เบ™, เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบชเบธเบ”เบ—เป‰เบฒเบเปƒเบ™เบฅเบฐเบ”เบฑเบš recursion เบ™เบตเป‰เปเบกเปˆเบ™ brcond. เบ•เบปเบเบฅเบปเบ‡, เบ‚เป‰เบญเบเบˆเบฐเป€เบžเบตเปˆเบกเบเบฒเบ™เบเบงเบ”เบชเบญเบšเปเบšเบšเบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบเบฒเบ™เบชเป‰เบฒเบ‡เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบ™เบตเป‰เบเปˆเบญเบ™เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบเบฒเบ™เป‚เบ— recursive เปเบฅเบฐ ... เบšเปเปˆเปเบกเปˆเบ™เบญเบฑเบ™เปƒเบ”เบญเบฑเบ™เบซเบ™เบถเปˆเบ‡เบ—เบตเปˆเบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”, เปเบ•เปˆเบซเบผเบฑเบ‡เบˆเบฒเบเบชเบฐเบซเบผเบฑเบšเบขเบทเบ™เบขเบฑเบ™เบžเบงเบเป€เบ‚เบปเบฒเบเบฑเบ‡เบฅเบปเป‰เบกเป€เบซเบฅเบง. เปƒเบ™เบ—เบตเปˆเบชเบธเบ”, เบซเบผเบฑเบ‡เบˆเบฒเบเบเบฒเบ™เบชเบถเบเบชเบฒเบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™, เบ‚เป‰เบญเบเบฎเบนเป‰เบงเปˆเบฒเบซเบผเบฑเบ‡เบˆเบฒเบเบชเบฐเบซเบผเบฑเบš, เบ•เบปเบงเบŠเบตเป‰เป„เบ›เบซเบฒเบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเปƒเบ™เบ›เบฐเบˆเบธเบšเบฑเบ™เบˆเบฐเบ–เบทเบเป‚เบซเบผเบ”เบ„เบทเบ™เบˆเบฒเบ stack เปเบฅเบฐเบญเบฒเบ”เบˆเบฐเบ–เบทเบเบ‚เบฝเบ™เบ—เบฑเบšเบ”เป‰เบงเบเบฅเบฐเบซเบฑเบ” JavaScript เบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™. เปเบฅเบฐเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบกเบฑเบ™เป„เบ”เป‰เบซเบฑเบ™เบญเบญเบ. เบเบฒเบ™เป€เบžเบตเปˆเบก buffer เบˆเบฒเบเบซเบ™เบถเปˆเบ‡ megabyte เป€เบ›เบฑเบ™เบชเบดเบšเบšเปเปˆเป„เบ”เป‰เบ™เปเบฒเป„เบ›เบชเบนเปˆเบเบฒเบ™เบซเบเบฑเบ‡, เปเบฅเบฐเบกเบฑเบ™เป„เบ”เป‰เบเบฒเบเป€เบ›เบฑเบ™เบ—เบตเปˆเบŠเบฑเบ”เป€เบˆเบ™เบงเปˆเบฒเป€เบ„เบทเปˆเบญเบ‡เบชเป‰เบฒเบ‡เบฅเบฐเบซเบฑเบ”เปเบกเปˆเบ™เปเบฅเปˆเบ™เป€เบ›เบฑเบ™เบงเบปเบ‡. เบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบงเบ”เป€เบšเบดเปˆเบ‡เบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเป„เบ”เป‰เป„เบ›เป€เบเบตเบ™เบ‚เบญเบšเป€เบ‚เบ”เบ‚เบญเบ‡เบงเบฑเบ™เบ™เบฐเป‚เบฅเบเปƒเบ™เบ›เบฐเบˆเบธเบšเบฑเบ™, เปเบฅเบฐเบ–เป‰เบฒเบžเบงเบเป€เบฎเบปเบฒเป€เบฎเบฑเบ”, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบญเบญเบเบ—เบตเปˆเบขเบนเปˆเบ‚เบญเบ‡ TB เบ•เปเปˆเป„เบ›เบ”เป‰เบงเบเป€เบ„เบทเปˆเบญเบ‡เบซเบกเบฒเบเบฅเบปเบšเป€เบžเบทเปˆเบญเปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ•เปเปˆเป„เบ›. เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, เบ™เบตเป‰เบˆเบฐเปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒ "เบซเบ™เป‰เบฒเบ—เบตเปˆเบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เบ„เบงเบ™เบˆเบฐเบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡เบ–เป‰เบฒเบŠเบดเป‰เบ™เบชเปˆเบงเบ™เบ‚เบญเบ‡ bytecode เบ™เบตเป‰เบกเบตเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡?" โ€” เบžเบฝเบ‡โ€‹เปเบ•เปˆโ€‹เบซเบ™เป‰เบฒโ€‹เบ—เบตเปˆโ€‹เบ—เบตเปˆโ€‹เบชเบญเบ”โ€‹เบ„เป‰เบญเบ‡โ€‹เบเบฑเบ™โ€‹เบเบฑเบš block เบเบฒเบ™โ€‹เปเบ›โ€‹เบžเบฒโ€‹เบชเบฒโ€‹เบ™เบตเป‰โ€‹เบˆเปเบฒโ€‹เป€เบ›เบฑเบ™โ€‹เบ•เป‰เบญเบ‡โ€‹เบšเปเปˆโ€‹เบ–เบทเบโ€‹เบ•เป‰เบญเบ‡โ€‹. เป‚เบ”เบเบงเบดเบ—เบตเบ—เบฒเบ‡เบเบฒเบ™, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบ‚เป‰เบญเบเป„เบ”เป‰เปเบเป‰เป„เบ‚เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบตเปˆเบขเบนเปˆเปƒเบ™ Chromium (เบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆเบ‚เป‰เบญเบเปƒเบŠเป‰ Firefox เปเบฅเบฐเบกเบฑเบ™เบ‡เปˆเบฒเบเบ‚เบถเป‰เบ™เบชเปเบฒเบฅเบฑเบšเบ‚เป‰เบญเบเบ—เบตเปˆเบˆเบฐเปƒเบŠเป‰เบ•เบปเบงเบ—เปˆเบญเบ‡เป€เบงเบฑเบšเปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ—เบปเบ”เบฅเบญเบ‡), Firefox เป„เบ”เป‰เบŠเปˆเบงเบเบ‚เป‰เบญเบเปเบเป‰เป„เบ‚เบ„เบงเบฒเบกเบšเปเปˆเป€เบ‚เบปเป‰เบฒเบเบฑเบ™เบเบฑเบšเบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™ asm.js, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบฅเบฐเบซเบฑเบ”เป€เบฅเบตเปˆเบกเป€เบฎเบฑเบ”เบงเบฝเบเป„เบงเบ‚เบถเป‰เบ™. Chromium.

เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™

Compiling 0x15b46d0:
CompiledTB[0x015b46d0] = function(stdlib, ffi, heap) {
"use asm";
var HEAP8 = new stdlib.Int8Array(heap);
var HEAP16 = new stdlib.Int16Array(heap);
var HEAP32 = new stdlib.Int32Array(heap);
var HEAPU8 = new stdlib.Uint8Array(heap);
var HEAPU16 = new stdlib.Uint16Array(heap);
var HEAPU32 = new stdlib.Uint32Array(heap);

var dynCall_iiiiiiiiiii = ffi.dynCall_iiiiiiiiiii;
var getTempRet0 = ffi.getTempRet0;
var badAlignment = ffi.badAlignment;
var _i64Add = ffi._i64Add;
var _i64Subtract = ffi._i64Subtract;
var Math_imul = ffi.Math_imul;
var _mul_unsigned_long_long = ffi._mul_unsigned_long_long;
var execute_if_compiled = ffi.execute_if_compiled;
var getThrew = ffi.getThrew;
var abort = ffi.abort;
var qemu_ld_ub = ffi.qemu_ld_ub;
var qemu_ld_leuw = ffi.qemu_ld_leuw;
var qemu_ld_leul = ffi.qemu_ld_leul;
var qemu_ld_beuw = ffi.qemu_ld_beuw;
var qemu_ld_beul = ffi.qemu_ld_beul;
var qemu_ld_beq = ffi.qemu_ld_beq;
var qemu_ld_leq = ffi.qemu_ld_leq;
var qemu_st_b = ffi.qemu_st_b;
var qemu_st_lew = ffi.qemu_st_lew;
var qemu_st_lel = ffi.qemu_st_lel;
var qemu_st_bew = ffi.qemu_st_bew;
var qemu_st_bel = ffi.qemu_st_bel;
var qemu_st_leq = ffi.qemu_st_leq;
var qemu_st_beq = ffi.qemu_st_beq;

function tb_fun(tb_ptr, env, sp_value, depth) {
  tb_ptr = tb_ptr|0;
  env = env|0;
  sp_value = sp_value|0;
  depth = depth|0;
  var u0 = 0, u1 = 0, u2 = 0, u3 = 0, result = 0;
  var r0 = 0, r1 = 0, r2 = 0, r3 = 0, r4 = 0, r5 = 0, r6 = 0, r7 = 0, r8 = 0, r9 = 0;
  var r10 = 0, r11 = 0, r12 = 0, r13 = 0, r14 = 0, r15 = 0, r16 = 0, r17 = 0, r18 = 0, r19 = 0;
  var r20 = 0, r21 = 0, r22 = 0, r23 = 0, r24 = 0, r25 = 0, r26 = 0, r27 = 0, r28 = 0, r29 = 0;
  var r30 = 0, r31 = 0, r41 = 0, r42 = 0, r43 = 0, r44 = 0;
    r14 = env|0;
    r15 = sp_value|0;
  START: do {
    r0 = HEAPU32[((r14 + (-4))|0) >> 2] | 0;
    r42 = 0;
    result = ((r0|0) != (r42|0))|0;
    HEAPU32[1445307] = r0;
    HEAPU32[1445321] = r14;
    if(result|0) {
    HEAPU32[1445322] = r15;
    return 0x0345bf93|0;
    }
    r0 = HEAPU32[((r14 + (16))|0) >> 2] | 0;
    r42 = 8;
    r0 = ((r0|0) - (r42|0))|0;
    HEAPU32[(r14 + (16)) >> 2] = r0;
    r1 = 8;
    HEAPU32[(r14 + (44)) >> 2] = r1;
    r1 = r0|0;
    HEAPU32[(r14 + (40)) >> 2] = r1;
    r42 = 4;
    r0 = ((r0|0) + (r42|0))|0;
    r2 = HEAPU32[((r14 + (24))|0) >> 2] | 0;
    HEAPU32[1445307] = r0;
    HEAPU32[1445308] = r1;
    HEAPU32[1445309] = r2;
    HEAPU32[1445321] = r14;
    HEAPU32[1445322] = r15;
    qemu_st_lel(env|0, r0|0, r2|0, 34, 22759218);
if(getThrew() | 0) abort();
    r0 = 3241038392;
    HEAPU32[1445307] = r0;
    r0 = qemu_ld_leul(env|0, r0|0, 34, 22759233)|0;
if(getThrew() | 0) abort();
    HEAPU32[(r14 + (24)) >> 2] = r0;
    r1 = HEAPU32[((r14 + (12))|0) >> 2] | 0;
    r2 = HEAPU32[((r14 + (40))|0) >> 2] | 0;
    HEAPU32[1445307] = r0;
    HEAPU32[1445308] = r1;
    HEAPU32[1445309] = r2;
    qemu_st_lel(env|0, r2|0, r1|0, 34, 22759265);
if(getThrew() | 0) abort();
    r0 = HEAPU32[((r14 + (24))|0) >> 2] | 0;
    HEAPU32[(r14 + (40)) >> 2] = r0;
    r1 = 24;
    HEAPU32[(r14 + (52)) >> 2] = r1;
    r42 = 0;
    result = ((r0|0) == (r42|0))|0;
    if(result|0) {
    HEAPU32[1445307] = r0;
    HEAPU32[1445308] = r1;
    }
    HEAPU32[1445307] = r0;
    HEAPU32[1445308] = r1;
    return execute_if_compiled(22759392|0, env|0, sp_value|0, depth|0) | 0;
    return execute_if_compiled(23164080|0, env|0, sp_value|0, depth|0) | 0;
    break;
  } while(1); abort(); return 0|0;
}
return {tb_fun: tb_fun};
}(window, CompilerFFI, Module.buffer)["tb_fun"]

เบชเบฐเบซเบฅเบธเบš

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบงเบฝเบเบ‡เบฒเบ™เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเบเบฑเบ‡เบšเปเปˆเบชเปเบฒเป€เบฅเบฑเบ”, เปเบ•เปˆเบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบฎเบนเป‰เบชเบถเบเป€เบกเบทเปˆเบญเบเบฅเป‰เบฒเป†เบ—เบตเปˆเบˆเบฐเบ™เปเบฒเป€เบญเบปเบฒเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เปƒเบ™เป„เบฅเบเบฐเบเบฒเบงเบ™เบตเป‰เป„เบ›เบชเบนเปˆเบ„เบงเบฒเบกเบชเบปเบกเบšเบนเบ™เปเบšเบšเบขเปˆเบฒเบ‡เบฅเบฑเบšเป†. เป€เบžเบฒเบฐเบชเบฐเบ™เบฑเป‰เบ™, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบ—เบตเปˆเบˆเบฐเป€เบœเบตเบเปเบœเปˆเบชเบดเปˆเบ‡เบ—เบตเปˆเบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบกเบตเปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™. เบฅเบฐเบซเบฑเบ”เปเบกเปˆเบ™เบซเบ™เป‰เบฒเบขเป‰เบฒเบ™เป€เบฅเบฑเบเบ™เป‰เบญเบเปƒเบ™เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆ, เป€เบžเบฒเบฐเบงเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™เบเบฒเบ™เบ—เบปเบ”เบฅเบญเบ‡, เปเบฅเบฐเบกเบฑเบ™เบšเปเปˆเบŠเบฑเบ”เป€เบˆเบ™เบฅเปˆเบงเบ‡เบซเบ™เป‰เบฒเบชเบดเปˆเบ‡เบ—เบตเปˆเบ•เป‰เบญเบ‡เป€เบฎเบฑเบ”. เบญเบฒเบ”เบˆเบฐเป€เบ›เบฑเบ™, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบกเบฑเบ™เบ„เบธเป‰เบกเบ„เปˆเบฒเบ—เบตเปˆเบˆเบฐเบญเบญเบเบ„เปเบฒเบซเบกเบฑเป‰เบ™เบชเบฑเบ™เบเบฒเบ›เบฐเบฅเปเบฒเบกเบฐเบ™เบนเบ›เบปเบเบเบฐเบ•เบดเบขเบนเปˆเป€เบ—เบดเบ‡เบชเบธเบ”เบ‚เบญเบ‡เบšเบฒเบ‡เบฎเบธเปˆเบ™เบ—เบตเปˆเบ—เบฑเบ™เบชเบฐเป„เบซเบกเบ‚เบญเบ‡ Qemu. เปƒเบ™เป€เบงเบฅเบฒเบ™เบตเป‰, เบกเบตเบเบฐเบ—เบนเป‰เบขเบนเปˆเปƒเบ™ Gita เปƒเบ™เบฎเบนเบšเปเบšเบš blog: เบชเปเบฒเบฅเบฑเบšเปเบ•เปˆเบฅเบฐ "เบฅเบฐเบ”เบฑเบš" เบ—เบตเปˆเป„เบ”เป‰เบœเปˆเบฒเบ™เบขเปˆเบฒเบ‡เบ™เป‰เบญเบ, เบ„เปเบฒเป€เบซเบฑเบ™เบฅเบฒเบเบฅเบฐเบญเบฝเบ”เปƒเบ™เบžเบฒเบชเบฒเบฅเบฑเบ”เป€เบŠเบเป„เบ”เป‰เบ–เบทเบเป€เบžเบตเปˆเบก. เปเบ—เป‰เบˆเบดเบ‡เปเบฅเป‰เบง, เบšเบปเบ”เบ‚เบฝเบ™เบ™เบตเป‰เปเบกเปˆเบ™เป€เบ›เบฑเบ™เบเบฒเบ™เป€เบฅเบปเปˆเบฒเบ„เบทเบ™เบ‚เบญเบ‡เบšเบปเบ”เบชเบฐเบซเบผเบธเบšเบขเปˆเบฒเบ‡เบซเบผเบงเบ‡เบซเบผเบฒเบ git log.

เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบฅเบญเบ‡เบกเบฑเบ™เบ—เบฑเบ‡เบซเบกเบปเบ” เบ—เบตเปˆเบ™เบตเป‰ (เบฅเบฐเบงเบฑเบ‡เบเบฒเบ™เบชเบฑเบ™เบˆเบญเบ™).

เบชเบดเปˆเบ‡เบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเปเบฅเป‰เบง:

  • x86 เป‚เบ›เป€เบŠเบ”เป€เบŠเบต virtual เปเบฅเปˆเบ™
  • เบกเบตเบ•เบปเป‰เบ™เปเบšเบšเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เบชเป‰เบฒเบ‡เบฅเบฐเบซเบฑเบ” JIT เบˆเบฒเบเบฅเบฐเบซเบฑเบ”เป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบเป„เบ›เบซเบฒ JavaScript
  • เบกเบตเปเบกเปˆเปเบšเบšเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เบฐเบเบญเบšเบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒเปเบ‚เบ 32-bit เบญเบทเปˆเบ™เป†: เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบŠเบปเบกเป€เบŠเบตเบ Linux เบชเปเบฒเบฅเบฑเบšเบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐ MIPS freezing เปƒเบ™เบ•เบปเบงเบ—เปˆเบญเบ‡เป€เบงเบฑเบšเปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เป‚เบซเบผเบ”.

เป€เบˆเบปเป‰เบฒเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เบซเบเบฑเบ‡เป„เบ”เป‰เบญเบตเบ

  • เป€เบฅเบฑเปˆเบ‡เบเบฒเบ™ emulation. เปเบกเป‰เปเบ•เปˆเบขเบนเปˆเปƒเบ™เป‚เบซเบกเบ” JIT เบกเบฑเบ™เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบˆเบฐเป€เบฎเบฑเบ”เบงเบฝเบเบŠเป‰เบฒเบเบงเปˆเบฒ Virtual x86 (เปเบ•เปˆเบงเปˆเบฒเบกเบต Qemu เบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเบกเบตเบฎเบฒเบ”เปเบงเปเบฅเบฐเบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒเบ—เบตเปˆเบˆเปเบฒเบฅเบญเบ‡เบซเบผเบฒเบ)
  • เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเปเบšเบšเบ›เบปเบเบเบฐเบ•เบด - เป€เบงเบปเป‰เบฒเบเบปเบ‡เป„เบ›เบเบปเบ‡เบกเบฒ, เบ‚เป‰เบญเบเบšเปเปˆเปเบกเปˆเบ™เบœเบนเป‰เบžเบฑเบ”เบ—เบฐเบ™เบฒเป€เบงเบฑเบšเบ—เบตเปˆเบ”เบต, เบชเบฐเบ™เบฑเป‰เบ™เบชเปเบฒเบฅเบฑเบšเบ•เบญเบ™เบ™เบตเป‰เบ‚เป‰เบญเบเป„เบ”เป‰ remade เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™ Emscripten shell เบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบชเบธเบ”เบ—เบตเปˆเบ‚เป‰เบญเบเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰.
  • เบžเบฐเบเบฒเบเบฒเบกเป€เบ›เบตเบ”เบŸเบฑเบ‡เบŠเบฑเบ™ Qemu เบ—เบตเปˆเบŠเบฑเบšเบŠเป‰เบญเบ™ - เป€เบ„เบทเบญเบ‚เปˆเบฒเบ, เบเบฒเบ™เป€เบ„เบทเปˆเบญเบ™เบเป‰เบฒเบ VM, เปเบฅเบฐเบญเบทเปˆเบ™เป†.
  • UPS: เบ—เปˆเบฒเบ™เบˆเบฐเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰เบชเบปเปˆเบ‡เบšเบปเบ”เบฅเบฒเบเบ‡เบฒเบ™เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเปเบฅเบฐเบ‚เปเป‰เบšเบปเบเบžเปˆเบญเบ‡เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เป„เบ›เปƒเบซเป‰ Emscripten เป€เบ—เบดเบ‡เบ™เป‰เปเบฒ, เบ”เบฑเปˆเบ‡เบ—เบตเปˆเบœเบนเป‰เบ‚เบปเบ™เบชเบปเปˆเบ‡เบ‚เบญเบ‡ Qemu เปเบฅเบฐเป‚เบ„เบ‡เบเบฒเบ™เบญเบทเปˆเบ™เป†เป„เบ”เป‰เป€เบฎเบฑเบ”. เบ‚เบญเบšเปƒเบˆเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบ—เบตเปˆเบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เบเบฒเบ™เบ›เบฐเบเบญเบšเบชเปˆเบงเบ™เบ‚เบญเบ‡เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเปƒเบซเป‰เบเบฑเบš Emscripten เป€เบ›เบฑเบ™เบชเปˆเบงเบ™เบซเบ™เบถเปˆเบ‡เบ‚เบญเบ‡เบงเบฝเบเบ‡เบฒเบ™เบ‚เบญเบ‡เบ‚เป‰เบญเบ.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™