QEMU.js: เชนเชตเซ‡ เช—เช‚เชญเซ€เชฐ เช…เชจเซ‡ WASM เชธเชพเชฅเซ‡

เชเช• เชธเชฎเชฏเซ‡ เชฎเซ‡เช‚ เช†เชจเช‚เชฆ เชฎเชพเชŸเซ‡ เชจเชฟเชฐเซเชฃเชฏ เช•เชฐเซเชฏเซ‹ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชจเซ€ เช‰เชฒเชŸเชพเชตเซ€ เชถเช•เชพเชฏ เชคเซ‡เชตเซเช‚ เชธเชพเชฌเชฟเชค เช•เชฐเซ‹ เช…เชจเซ‡ เชฎเชถเซ€เชจ เช•เซ‹เชกเชฎเชพเช‚เชฅเซ€ JavaScript (เชตเชงเซ เชธเซเชชเชทเซเชŸ เชฐเซ€เชคเซ‡, Asm.js) เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชœเชจเชฐเซ‡เชŸ เช•เชฐเชตเซเช‚ เชคเซ‡ เชถเซ€เช–เซ‹. เชชเซเชฐเชฏเซ‹เช— เชฎเชพเชŸเซ‡ QEMU เชชเชธเช‚เชฆ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚ เชนเชคเซเช‚, เช…เชจเซ‡ เชฅเซ‹เชกเชพ เชธเชฎเชฏ เชชเช›เซ€ Habr เชชเชฐ เชเช• เชฒเซ‡เช– เชฒเช–เชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซ‹ เชนเชคเซ‹. เชŸเชฟเชชเซเชชเชฃเซ€เช“เชฎเชพเช‚ เชฎเชจเซ‡ เชตเซ‡เชฌ เชเชธเซ‡เชฎเซเชฌเชฒเซ€เชฎเชพเช‚ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซ‡ เชฐเซ€เชฎเซ‡เช• เช•เชฐเชตเชพเชจเซ€ เชธเชฒเชพเชน เช†เชชเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เชนเชคเซ€, เช…เชจเซ‡ เชฎเชพเชฐเซ€ เชœเชพเชคเชจเซ‡ เช›เซ‹เชกเซ€ เชชเชฃ เชฆเซ€เชงเซ€ เชนเชคเซ€ เชฒเช—เชญเช— เชธเชฎเชพเชชเซเชค เชนเซเช‚ เช•เซ‹เชˆเช• เชฐเซ€เชคเซ‡ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เช‡เชšเซเช›เชคเซ‹ เชจ เชนเชคเซ‹... เช•เชพเชฎ เชšเชพเชฒเซ€ เชฐเชนเซเชฏเซเช‚ เชนเชคเซเช‚, เชชเชฐเช‚เชคเซ เช–เซ‚เชฌ เชœ เชงเซ€เชฐเซ‡ เชงเซ€เชฐเซ‡, เช…เชจเซ‡ เชนเชตเซ‡, เชคเซ‡ เชฒเซ‡เช–เชฎเชพเช‚ เชคเชพเชœเซ‡เชคเชฐเชฎเชพเช‚ เชฆเซ‡เช–เชพเชฏเซ‹ เชญเชพเชทเซเชฏ เชตเชฟเชทเชฏ เชชเชฐ "เชคเซ‹ เชคเซ‡ เชฌเชงเซเช‚ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชธเชฎเชพเชชเซเชค เชฅเชฏเซเช‚?" เชฎเชพเชฐเชพ เชตเชฟเช—เชคเชตเชพเชฐ เชœเชตเชพเชฌเชจเชพ เชœเชตเชพเชฌเชฎเชพเช‚, เชฎเซ‡เช‚ "เช† เชฒเซ‡เช– เชœเซ‡เชตเซเช‚ เชฒเชพเช—เซ‡ เช›เซ‡" เชธเชพเช‚เชญเชณเซเชฏเซเช‚. เชธเชพเชฐเซเช‚, เชœเซ‹ เชคเชฎเซ‡ เช•เชฐเซ€ เชถเช•เซ‹, เชคเซ‹ เชเช• เชฒเซ‡เช– เชนเชถเซ‡. เช•เชฆเชพเชš เช•เซ‹เชˆเชจเซ‡ เชคเซ‡ เช‰เชชเชฏเซ‹เช—เซ€ เชฅเชถเซ‡. เชคเซ‡เชฎเชพเช‚เชฅเซ€ เชตเชพเชšเช• QEMU เช•เซ‹เชก เชœเชจเชฐเซ‡เชถเชจ เชฌเซ‡เช•เชเชจเซเชกเชจเซ€ เชกเชฟเชเชพเช‡เชจ เชตเชฟเชถเซ‡เชจเซ€ เช•เซ‡เชŸเชฒเซ€เช• เชนเช•เซ€เช•เชคเซ‹ เชคเซ‡เชฎเชœ เชตเซ‡เชฌ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฎเชพเชŸเซ‡ เชœเชธเซเชŸ-เช‡เชจ-เชŸเชพเช‡เชฎ เช•เชฎเซเชชเชพเช‡เชฒเชฐ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฒเช–เชตเซเช‚ เชคเซ‡ เชถเซ€เช–เชถเซ‡.

เช•เชพเชฐเซเชฏเซ‹

เชœเชพเชตเชพเชธเซเช•เซเชฐเชฟเชชเซเชŸเชฎเชพเช‚ QEMU เชจเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ "เช•เซ‹เชˆเช• เชฐเซ€เชคเซ‡" เชชเซ‹เชฐเซเชŸ เช•เชฐเชตเซเช‚ เชคเซ‡ เชฎเซ‡เช‚ เชชเชนเซ‡เชฒเซ‡เชฅเซ€ เชœ เชถเซ€เช–เซ€ เชฒเซ€เชงเซเช‚ เชนเซ‹เชตเชพเชฅเซ€, เช† เชตเช–เชคเซ‡ เชคเซ‡ เชธเชฎเชœเชฆเชพเชฐเซ€เชชเซ‚เชฐเซเชตเช• เช•เชฐเชตเชพเชจเซเช‚ เช…เชจเซ‡ เชœเซ‚เชจเซ€ เชญเซ‚เชฒเซ‹เชจเซเช‚ เชชเซเชจเชฐเชพเชตเชฐเซเชคเชจ เชจ เช•เชฐเชตเชพเชจเซเช‚ เชจเช•เซเช•เซ€ เช•เชฐเซเชฏเซเช‚.

เชญเซ‚เชฒ เชจเช‚เชฌเชฐ เชเช•: เชฌเชฟเช‚เชฆเซ เชชเซเชฐเช•เชพเชถเชจเชฎเชพเช‚เชฅเซ€ เชถเชพเช–เชพ

เชฎเชพเชฐเซ€ เชชเซเชฐเชฅเชฎ เชญเซ‚เชฒ เช…เชชเชธเซเชŸเซเชฐเซ€เชฎ เชธเช‚เชธเซเช•เชฐเชฃ 2.4.1 เชฅเซ€ เชฎเชพเชฐเชพ เชธเช‚เชธเซเช•เชฐเชฃเชจเซ‡ เชซเซ‹เชฐเซเช• เช•เชฐเชตเชพเชจเซ€ เชนเชคเซ€. เชชเช›เซ€ เชคเซ‡ เชฎเชจเซ‡ เชเช• เชธเชพเชฐเซ‹ เชตเชฟเชšเชพเชฐ เชฒเชพเช—เซเชฏเซ‹: เชœเซ‹ เชฌเชฟเช‚เชฆเซ เชชเซเชฐเช•เชพเชถเชจ เช…เชธเซเชคเชฟเชคเซเชตเชฎเชพเช‚ เช›เซ‡, เชคเซ‹ เชคเซ‡ เช•เชฆเชพเชš เชธเชฐเชณ 2.4 เช•เชฐเชคเชพเช‚ เชตเชงเซ เชธเซเชฅเชฟเชฐ เช›เซ‡, เช…เชจเซ‡ เชคเซ‡เชฅเซ€ เชชเชฃ เชตเชงเซ เชถเชพเช–เชพ master. เช…เชจเซ‡ เชฎเซ‡เช‚ เชฎเชพเชฐเซ€ เชชเซ‹เชคเชพเชจเซ€ เชญเซ‚เชฒเซ‹เชจเซ€ เชฏเซ‹เช—เซเชฏ เชฎเชพเชคเซเชฐเชพ เช‰เชฎเซ‡เชฐเชตเชพเชจเซเช‚ เช†เชฏเซ‹เชœเชจ เช•เชฐเซเชฏเซเช‚ เชนเซ‹เชตเชพเชฅเซ€, เชฎเชจเซ‡ เชฌเซ€เชœเชพ เช•เซ‹เชˆเชจเซ€ เชœเชฐเซ‚เชฐ เชจเชฅเซ€. เชคเซ‡ เช•เชฆเชพเชš เชคเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฌเชนเชพเชฐ เช†เชตเซเชฏเซเช‚ เช›เซ‡. เชชเชฐเช‚เชคเซ เช…เชนเซ€เช‚ เชตเชพเชค เช›เซ‡: QEMU เชธเซเชฅเชฟเชฐ เชฐเชนเซ‡เชคเซเช‚ เชจเชฅเซ€, เช…เชจเซ‡ เช…เชฎเซเช• เชธเชฎเชฏเซ‡ เชคเซ‡เช“เช เชœเชจเชฐเซ‡เชŸ เช•เชฐเซ‡เชฒเชพ เช•เซ‹เชกเชจเซ‡ 10 เชŸเช•เชพ เช“เชชเซเชŸเชฟเชฎเชพเช‡เช เช•เชฐเชตเชพเชจเซ€ เชœเชพเชนเซ‡เชฐเชพเชค เชชเชฃ เช•เชฐเซ€ เชนเชคเซ€. "เชนเชพ, เชนเชตเซ‡ เชนเซเช‚ เชธเซเชฅเชฟเชฐ เชฅเชตเชพ เชœเชˆ เชฐเชนเซเชฏเซ‹ เช›เซเช‚," เชฎเซ‡เช‚ เชตเชฟเชšเชพเชฐเซเชฏเซเช‚ เช…เชจเซ‡ เชคเซ‚เชŸเซ€ เชชเชกเซเชฏเซเช‚. เช…เชนเซ€เช‚ เช†เชชเชฃเซ‡ เชเช• เชตเชฟเชทเชฏเชพเช‚เชคเชฐ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡: QEMU.js เชจเซ€ เชธเชฟเช‚เช—เชฒ-เชฅเซเชฐเซ‡เชกเซ‡เชก เชชเซเชฐเช•เซƒเชคเชฟเชจเซ‡ เช•เชพเชฐเชฃเซ‡ เช…เชจเซ‡ เชนเช•เซ€เช•เชค เช เช›เซ‡ เช•เซ‡ เชฎเซ‚เชณ QEMU เชฎเชฒเซเชŸเซ€-เชฅเซเชฐเซ‡เชกเซ€เช‚เช—เชจเซ€ เช—เซ‡เชฐเชนเชพเชœเชฐเซ€ เชธเซ‚เชšเชฟเชค เช•เชฐเชคเซเช‚ เชจเชฅเซ€ (เชเชŸเชฒเซ‡ โ€‹โ€‹โ€‹โ€‹เช•เซ‡, เชเช•เชธเชพเชฅเซ‡ เช…เชจเซ‡เช• เช…เชธเช‚เชฌเช‚เชงเชฟเชค เช•เซ‹เชก เชชเชพเชฅ เชšเชฒเชพเชตเชตเชพเชจเซ€ เช•เซเชทเชฎเชคเชพ, เช…เชจเซ‡ เชซเช•เซเชค "เชฌเชงเชพ เช•เชฐเซเชจเชฒเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‹") เชคเซ‡ เชฎเชพเชŸเซ‡ เชฎเชนเชคเซเชตเชชเซ‚เชฐเซเชฃ เชจเชฅเซ€, เชฌเชนเชพเชฐเชฅเซ€ เช•เซ‰เชฒ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชธเช•เซเชทเชฎ เชฅเชตเชพ เชฎเชพเชŸเซ‡ เชฎเชพเชฐเซ‡ "เชคเซ‡เชจเซ‡ เชšเชพเชฒเซ" เช•เชฐเชตเซเช‚ เชชเชกเซเชฏเซเช‚ เชนเชคเซเช‚ เชคเซ‡ เชฅเซเชฐเซ‡เชกเซ‹เชจเชพ เชฎเซเช–เซเชฏ เช•เชพเชฐเซเชฏเซ‹. เช†เชจเชพเชฅเซ€ เชตเชฟเชฒเซ€เชจเซ€เช•เชฐเชฃ เชฆเชฐเชฎเชฟเชฏเชพเชจ เช•เซ‡เชŸเชฒเซ€เช• เช•เซเชฆเชฐเชคเซ€ เชธเชฎเชธเซเชฏเชพเช“ เชŠเชญเซ€ เชฅเชˆ. เชœเซ‹ เช•เซ‡, เชถเชพเชณเชพเชฎเชพเช‚เชฅเซ€ เช•เซ‡เชŸเชฒเชพเช• เชซเซ‡เชฐเชซเชพเชฐเซ‹เชจเซ€ เชนเช•เซ€เช•เชค เช›เซ‡ master, เชœเซ‡เชจเซ€ เชธเชพเชฅเซ‡ เชฎเซ‡เช‚ เชฎเชพเชฐเชพ เช•เซ‹เชกเชจเซ‡ เชฎเชฐเซเชœ เช•เชฐเชตเชพเชจเซ‹ เชชเซเชฐเชฏเชพเชธ เช•เชฐเซเชฏเซ‹ เชนเชคเซ‹, เชคเซ‡ เชชเชฃ เชชเซ‹เชˆเชจเซเชŸ เชฐเซ€เชฒเซ€เชเชฎเชพเช‚ (เช…เชจเซ‡ เชคเซ‡เชฅเซ€ เชฎเชพเชฐเซ€ เชถเชพเช–เชพเชฎเชพเช‚) เชšเซ‡เชฐเซ€ เชชเชธเช‚เชฆ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เชนเชคเซ€ เชคเซ‡ เชชเชฃ เช•เชฆเชพเชš เชธเช—เชตเชกเชคเชพ เช‰เชฎเซ‡เชฐเชถเซ‡ เชจเชนเซ€เช‚.

เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡, เชฎเซ‡เช‚ เชจเช•เซเช•เซ€ เช•เชฐเซเชฏเซเช‚ เช•เซ‡ เชชเซเชฐเซ‹เชŸเซ‹เชŸเชพเช‡เชชเชจเซ‡ เชซเซ‡เช‚เช•เซ€ เชฆเซ‡เชตเชพเชจเซ‹, เชคเซ‡เชจเซ‡ เชญเชพเช—เซ‹ เชฎเชพเชŸเซ‡ เชกเชฟเชธเชเชธเซ‡เชฎเซเชฌเชฒ เช•เชฐเชตเชพเชจเซ‹ เช…เชจเซ‡ เชจเชตเชพ เชตเชฐเซเชเชจเชจเซ‡ เช•เช‚เชˆเช• เชซเซเชฐเซ‡เชถเชจเชพ เช†เชงเชพเชฐเซ‡ เช…เชจเซ‡ เชนเชตเซ‡เชฅเซ€ เชฌเชจเชพเชตเชตเชพเชจเซ‹ เชนเชœเซ เชชเชฃ เช…เชฐเซเชฅ เช›เซ‡. master.

เชญเซ‚เชฒ เชจเช‚เชฌเชฐ เชฌเซ‡: TLP เชชเชฆเซเชงเชคเชฟ

เชธเชพเชฐเชฎเชพเช‚, เช† เช•เซ‹เชˆ เชญเซ‚เชฒ เชจเชฅเซ€, เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡, เชคเซ‡ "เช•เซเชฏเชพเช‚ เช…เชจเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช–เชธเซ‡เชกเชตเซเช‚?" เช…เชจเซ‡ เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡ "เชถเซเช‚ เช†เชชเชฃเซ‡ เชคเซเชฏเชพเช‚ เชชเชนเซ‹เช‚เชšเซ€เชถเซเช‚?" เชฌเช‚เชจเซ‡เชจเซ€ เชธเช‚เชชเซ‚เชฐเซเชฃ เช—เซ‡เชฐเชธเชฎเชœเชจเซ€ เชธเซเชฅเชฟเชคเชฟเชฎเชพเช‚ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชฌเชจเชพเชตเชตเชพเชจเซ€ เชเช• เชตเชฟเชถเซ‡เชทเชคเชพ เช›เซ‡. เช† เชชเชฐเชฟเชธเซเชฅเชฟเชคเชฟเช“เชฎเชพเช‚ เช…เชฃเช˜เชก เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชฟเช‚เช— เชเช• เชตเชพเชœเชฌเซ€ เชตเชฟเช•เชฒเซเชช เชนเชคเซ‹, เชชเชฐเช‚เชคเซ, เชธเซเชตเชพเชญเชพเชตเชฟเช• เชฐเซ€เชคเซ‡, เชนเซเช‚ เชคเซ‡เชจเซ‡ เชฌเชฟเชจเชœเชฐเซ‚เชฐเซ€ เชฐเซ€เชคเซ‡ เชชเซเชจเชฐเชพเชตเชฐเซเชคเชจ เช•เชฐเชตเชพ เชฎเชพเช‚เช—เชคเซ‹ เชจ เชนเชคเซ‹. เช† เชตเช–เชคเซ‡ เชนเซเช‚ เชคเซ‡เชจเซ‡ เชธเชฎเชœเชฆเชพเชฐเซ€เชชเซ‚เชฐเซเชตเช• เช•เชฐเชตเชพ เชฎเชพเช‚เช—เชคเซ‹ เชนเชคเซ‹: เชชเชฐเชฎเชพเชฃเซ เช•เชฎเชฟเชŸ, เชธเชญเชพเชจ เช•เซ‹เชก เชซเซ‡เชฐเชซเชพเชฐเซ‹ (เช…เชจเซ‡ "เชœเซ‡เชฎ เช•เซ‡ เชคเซ‡ เช•เชฎเซเชชเชพเช‡เชฒ เชจ เชฅเชพเชฏ เชคเซเชฏเชพเช‚ เชธเซเชงเซ€ เชฐเซ‡เชจเซเชกเชฎ เช…เช•เซเชทเชฐเซ‹เชจเซ‡ เชเช•เชธเชพเชฅเซ‡ เชœเซ‹เชกเชตเชพ เชจเชนเซ€เช‚ (เชšเซ‡เชคเชตเชฃเซ€เช“ เชธเชพเชฅเซ‡)", เชœเซ‡เชฎ เช•เซ‡ เชฒเชฟเชจเชธ เชŸเซ‹เชฐเชตเชพเชฒเซเชกเซเชธเซ‡ เชเช•เชตเชพเชฐ เช•เซ‹เชˆ เชตเชฟเชถเซ‡ เช•เชนเซเชฏเซเช‚ เชนเชคเซเช‚, เชตเชฟเช•เชฟเช•เซเชตเซ‹เชŸ เชฎเซเชœเชฌ), เชตเช—เซ‡เชฐเซ‡.

เชญเซ‚เชฒ เชจเช‚เชฌเชฐ เชคเซเชฐเชฃ: เชซเซ‹เชฐเซเชกเชจเซ‡ เชœเชพเชฃเซเชฏเชพ เชตเชฟเชจเชพ เชชเชพเชฃเซ€เชฎเชพเช‚ เช‰เชคเชฐเชตเซเช‚

เชนเซเช‚ เชนเชœเซ€ เชชเชฃ เช†เชฎเชพเช‚เชฅเซ€ เชธเช‚เชชเซ‚เชฐเซเชฃเชชเชฃเซ‡ เช›เซเชŸเช•เชพเชฐเซ‹ เชฎเซ‡เชณเชตเซเชฏเซ‹ เชจเชฅเซ€, เชชเชฐเช‚เชคเซ เชนเชตเซ‡ เชฎเซ‡เช‚ เช“เช›เชพเชฎเชพเช‚ เช“เช›เชพ เชชเซเชฐเชคเชฟเช•เชพเชฐเชจเชพ เชฎเชพเชฐเซเช—เชจเซ‡ เช…เชจเซเชธเชฐเชตเชพเชจเซเช‚ เชจเชนเซ€เช‚, เช…เชจเซ‡ "เชตเซƒเชฆเซเชง เชฅเชˆ เช—เชฏเซ‡เชฒเชพ เชฎเชพเชฐเซเช—" เชคเชฐเซ€เช•เซ‡ เช•เชฐเชตเชพเชจเซเช‚ เชจเช•เซเช•เซ€ เช•เชฐเซเชฏเซเช‚ เช›เซ‡, เชเชŸเชฒเซ‡ เช•เซ‡, เชฎเชพเชฐเชพ TCG เชฌเซ‡เช•เชเชจเซเชกเชจเซ‡ เชถเชฐเซ‚เช†เชคเชฅเซ€ เชฒเช–เซ‹, เชœเซ‡เชฅเซ€ เชจ เชฅเชพเชฏ. เชชเช›เซ€เชฅเซ€ เช•เชนเซ‡เชตเซเช‚ เชชเชกเชถเซ‡, "เชนเชพ, เช† เช…เชฒเชฌเชคเซเชค, เชงเซ€เชฎเซ‡ เชงเซ€เชฎเซ‡ เช›เซ‡, เชชเชฐเช‚เชคเซ เชนเซเช‚ เชฌเชงเซเช‚ เชจเชฟเชฏเช‚เชคเซเชฐเชฟเชค เช•เชฐเซ€ เชถเช•เชคเซ‹ เชจเชฅเซ€ - เช† เชฐเซ€เชคเซ‡ TCI เชฒเช–เชพเชฏเซ‡เชฒ เช›เซ‡..." เชคเชฆเซเชชเชฐเชพเช‚เชค, เช† เชถเชฐเซ‚เช†เชคเชฎเชพเช‚ เชธเซเชชเชทเซเชŸ เช‰เช•เซ‡เชฒ เชœเซ‡เชตเซเช‚ เชฒเชพเช—เชคเซเช‚ เชนเชคเซเช‚, เช•เชพเชฐเชฃ เช•เซ‡ เชนเซเช‚ เชฌเชพเชˆเชจเชฐเซ€ เช•เซ‹เชก เชœเชจเชฐเซ‡เชŸ เช•เชฐเซเช‚ เช›เซเช‚. เชœเซ‡เชฎ เชคเซ‡เช“ เช•เชนเซ‡ เช›เซ‡, โ€œเช˜เซ‡เชจเซเชŸ เชญเซ‡เช—เชพ เชฅเชฏเชพัƒ, เชชเชฐเช‚เชคเซ เชคเซ‡ เชเช• เชจเชฅเซ€โ€: เช•เซ‹เชก, เช…เชฒเชฌเชคเซเชค, เชฆเซเชตเชฟเชธเช‚เช—เซ€ เช›เซ‡, เชชเชฐเช‚เชคเซ เชจเชฟเชฏเช‚เชคเซเชฐเชฃ เชซเช•เซเชค เชคเซ‡เชจเซ‡ เชธเซเชฅเชพเชจเชพเช‚เชคเชฐเชฟเชค เช•เชฐเซ€ เชถเช•เชพเชคเซเช‚ เชจเชฅเซ€ - เชคเซ‡เชจเซ‡ เชธเช‚เช•เชฒเชจ เชฎเชพเชŸเซ‡ เชฌเซเชฐเชพเช‰เชเชฐเชฎเชพเช‚ เชธเซเชชเชทเซเชŸเชชเชฃเซ‡ เชฆเชฌเชพเชฃ เช•เชฐเชตเซเช‚ เช†เชตเชถเซเชฏเช• เช›เซ‡, เชชเชฐเชฟเชฃเชพเชฎเซ‡ JS เชตเชฟเชถเซเชตเชฎเชพเช‚เชฅเซ€ เชšเซ‹เช•เซเช•เชธ เช‘เชฌเซเชœเซ‡เช•เซเชŸ เช†เชตเซ‡ เช›เซ‡, เชœเซ‡ เชนเชœเซ เชชเชฃ เชœเชฐเซ‚เชฐเซ€ เช›เซ‡. เช•เซเชฏเชพเช‚เช• เชธเชพเชšเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เชœเซ‹ เช•เซ‡, เชธเชพเชฎเชพเชจเซเชฏ RISC เช†เชฐเซเช•เชฟเชŸเซ‡เช•เซเชšเชฐเซเชธ เชชเชฐ, เชœเซเชฏเชพเช‚ เชธเซเชงเซ€ เชนเซเช‚ เชธเชฎเชœเซเช‚ เช›เซเช‚, เชเช• เชฒเชพเช•เซเชทเชฃเชฟเช• เชชเชฐเชฟเชธเซเชฅเชฟเชคเชฟ เช เชชเซเชจเชƒเชœเชจเชฟเชค เช•เซ‹เชก เชฎเชพเชŸเซ‡ เชธเซ‚เชšเชจเชพ เช•เซ‡เชถเชจเซ‡ เชธเซเชชเชทเซเชŸเชชเชฃเซ‡ เชฐเซ€เชธเซ‡เชŸ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡ - เชœเซ‹ เช† เช†เชชเชฃเชจเซ‡ เชœเซ‹เชˆเชคเซเช‚ เชจเชฅเซ€, เชคเซ‹ เชชเช›เซ€, เช•เซ‹เชˆ เชชเชฃ เชธเช‚เชœเซ‹เช—เซ‹เชฎเชพเช‚, เชคเซ‡ เชจเชœเซ€เช• เช›เซ‡. เชตเชงเซเชฎเชพเช‚, เชฎเชพเชฐเชพ เช›เซ‡เชฒเซเชฒเชพ เชชเซเชฐเชฏเชพเชธเชฅเซ€, เชฎเซ‡เช‚ เชถเซ€เช–เซเชฏเซเช‚ เช•เซ‡ เชจเชฟเชฏเช‚เชคเซเชฐเชฃเชจเซ‡ เช…เชจเซเชตเชพเชฆ เชฌเซเชฒเซ‹เช•เชจเซ€ เชฎเชงเซเชฏเชฎเชพเช‚ เชธเซเชฅเชพเชจเชพเช‚เชคเชฐเชฟเชค เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚ เชนเซ‹เชฏ เชคเซ‡เชตเซเช‚ เชฒเชพเช—เชคเซเช‚ เชจเชฅเซ€, เชคเซ‡เชฅเซ€ เช…เชฎเชจเซ‡ เช–เชฐเซ‡เช–เชฐ เช•เซ‹เชˆเชชเชฃ เช‘เชซเชธเซ‡เชŸเชฎเชพเช‚เชฅเซ€ เช…เชฐเซเชฅเช˜เชŸเชจ เช•เชฐเชพเชฏเซ‡เชฒ เชฌเชพเช‡เชŸเช•เซ‹เชกเชจเซ€ เชœเชฐเซ‚เชฐ เชจเชฅเซ€, เช…เชจเซ‡ เช…เชฎเซ‡ เชคเซ‡เชจเซ‡ เชŸเซ€เชฌเซ€ เชชเชฐเชจเชพ เชซเช‚เช•เซเชถเชจเชฎเชพเช‚เชฅเซ€ เชซเช•เซเชค เชœเชจเชฐเซ‡เชŸ เช•เชฐเซ€ เชถเช•เซ€เช เช›เซ€เช. .

เชคเซ‡เช“ เช†เชตเซเชฏเชพ เช…เชจเซ‡ เชฒเชพเชค เชฎเชพเชฐเซ€

เชœเซ‹ เช•เซ‡ เชฎเซ‡เช‚ เชœเซเชฒเชพเชˆเชฎเชพเช‚ เช•เซ‹เชกเชจเซ‡ เชซเชฐเซ€เชฅเซ€ เชฒเช–เชตเชพเชจเซเช‚ เชถเชฐเซ‚ เช•เชฐเซเชฏเซเช‚, เชเช• เชœเชพเชฆเซเชˆ เช•เชฟเช• เช•เซ‹เชˆเชจเซเช‚ เชงเซเชฏเชพเชจ เชจ เช†เชตเซเชฏเซเช‚: เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡ เช—เชฟเชŸเชนเชฌ เชคเชฐเชซเชฅเซ€ เชชเชคเซเชฐเซ‹ เชฎเซเชฆเซเชฆเชพเช“ เช…เชจเซ‡ เชชเซเชฒ เชตเชฟเชจเช‚เชคเซ€เช“เชจเชพ เชœเชตเชพเชฌเซ‹ เชตเชฟเชถเซ‡ เชธเซ‚เชšเชจเชพเช“ เชคเชฐเซ€เช•เซ‡ เช†เชตเซ‡ เช›เซ‡, เชชเชฐเช‚เชคเซ เช…เชนเซ€เช‚, เช…เชšเชพเชจเช• เชฅเซเชฐเซ‡เชกเชฎเชพเช‚ เช‰เชฒเซเชฒเซ‡เช– เช•เชฐเซ‹ qemu เชฌเซ‡เช•เชเชจเซเชก เชคเชฐเซ€เช•เซ‡ Binaryen เชธเช‚เชฆเชฐเซเชญเชฎเชพเช‚, "เชคเซ‡เชฃเซ‡ เชเชตเซเช‚ เช•เช‚เชˆเช• เช•เชฐเซเชฏเซเช‚, เช•เชฆเชพเชš เชคเซ‡ เช•เช‚เชˆเช• เช•เชนเซ‡เชถเซ‡." เช…เชฎเซ‡ Emscripten เชธเช‚เชฌเช‚เชงเชฟเชค เชฒเชพเช‡เชฌเซเชฐเซ‡เชฐเซ€เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพ เชตเชฟเชถเซ‡ เชตเชพเชค เช•เชฐเซ€ เชฐเชนเซเชฏเชพ เชนเชคเชพ เชฌเชพเชˆเชจเชฐเซ€เชจ WASM JIT เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡. เชธเชพเชฐเซเช‚, เชฎเซ‡เช‚ เช•เชนเซเชฏเซเช‚ เช•เซ‡ เชคเชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เชคเซเชฏเชพเช‚ Apache 2.0 เชฒเชพเชฏเชธเชจเซเชธ เช›เซ‡, เช…เชจเซ‡ QEMU เชเช•เช‚เชฆเชฐเซ‡ GPLv2 เชนเซ‡เช เชณ เชตเชฟเชคเชฐเชฟเชค เชฅเชฏเซ‡เชฒ เช›เซ‡, เช…เชจเซ‡ เชคเซ‡ เช–เซ‚เชฌ เชธเซเชธเช‚เช—เชค เชจเชฅเซ€. เช…เชšเชพเชจเช• เชคเซ‡ เชฌเชนเชพเชฐ เช†เชตเซเชฏเซเช‚ เช•เซ‡ เชฒเชพเช‡เชธเชจเซเชธ เชนเซ‹เชˆ เชถเช•เซ‡ เช›เซ‡ เชคเซ‡เชจเซ‡ เช•เซ‹เชˆเช• เชฐเซ€เชคเซ‡ เช เซ€เช• เช•เชฐเซ‹ (เชฎเชจเซ‡ เช–เชฌเชฐ เชจเชฅเซ€: เช•เชฆเชพเชš เชคเซ‡เชจเซ‡ เชฌเชฆเชฒเซ‹, เช•เชฆเชพเชš เชกเซเชฏเซเช…เชฒ เชฒเชพเช‡เชธเชจเซเชธ, เช•เชฆเชพเชš เชฌเซ€เชœเซเช‚ เช•เช‚เชˆเช•...). เช†, เช…เชฒเชฌเชคเซเชค, เชฎเชจเซ‡ เช†เชจเช‚เชฆ เชฅเชฏเซ‹, เช•เชพเชฐเชฃ เช•เซ‡ เชคเซ‡ เชธเชฎเชฏ เชธเซเชงเซ€เชฎเชพเช‚ เชฎเซ‡เช‚ เชชเชนเซ‡เชฒเซ‡เชฅเซ€ เชœ เชจเชœเซ€เช•เชฅเซ€ เชœเซ‹เชฏเซเช‚ เชนเชคเซเช‚ เชฌเชพเชˆเชจเชฐเซ€ เชซเซ‹เชฐเซเชฎเซ‡เชŸ WebAssembly, เช…เชจเซ‡ เชนเซเช‚ เช•เซ‹เชˆเช• เชฐเซ€เชคเซ‡ เช‰เชฆเชพเชธเซ€ เช…เชจเซ‡ เช…เช—เชฎเซเชฏ เชนเชคเซ‹. เชคเซเชฏเชพเช‚ เชเช• เชชเซเชธเซเชคเช•เชพเชฒเชฏ เชชเชฃ เชนเชคเซเช‚ เชœเซ‡ เชธเช‚เช•เซเชฐเชฎเชฃ เช—เซเชฐเชพเชซ เชธเชพเชฅเซ‡ เชฎเซ‚เชณเชญเซ‚เชค เชฌเซเชฒเซ‹เช•เซเชธเชจเซ‡ เช–เชพเชˆ เชœเชถเซ‡, เชฌเชพเชˆเชŸเช•เซ‹เชก เชฌเชจเชพเชตเชถเซ‡ เช…เชจเซ‡ เชœเซ‹ เชœเชฐเซ‚เชฐเซ€ เชนเซ‹เชฏ เชคเซ‹ เชคเซ‡เชจเซ‡ เชฆเซเชญเชพเชทเชฟเชฏเชพเชฎเชพเช‚ เชœ เชšเชฒเชพเชตเชถเซ‡.

เชชเช›เซ€ เชคเซเชฏเชพเช‚ เชตเชงเซ เชนเชคเซ€ เชเช• เชชเชคเซเชฐ QEMU เชฎเซ‡เช‡เชฒเชฟเช‚เช— เชธเซ‚เชšเชฟ เชชเชฐ, เชชเชฐเช‚เชคเซ เช† เชชเซเชฐเชถเซเชจ เชตเชฟเชถเซ‡ เชตเชงเซ เช›เซ‡, "เช•เซ‹เชจเซ‡ เชคเซ‡เชจเซ€ เช•เซ‹เชˆเชชเชฃ เชฐเซ€เชคเซ‡ เชœเชฐเซ‚เชฐ เช›เซ‡?" เช…เชจเซ‡ เชคเซ‡ เช›เซ‡ เช…เชšเชพเชจเช•, เชคเซ‡ เชœเชฐเซ‚เชฐเซ€ เชนเชคเซเช‚ เชคเซ‡ เชฌเชนเชพเชฐ เช†เชตเซเชฏเซเช‚. เช“เช›เชพเชฎเชพเช‚ เช“เช›เชพ, เชคเชฎเซ‡ เช‰เชชเชฏเซ‹เช—เชจเซ€ เชจเซ€เชšเซ‡เชจเซ€ เชถเช•เซเชฏเชคเชพเช“เชจเซ‡ เชเช•เชธเชพเชฅเซ‡ เช‰เชเชฐเชกเชพ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹, เชœเซ‹ เชคเซ‡ เชตเชงเซ เช•เซ‡ เช“เช›เชพ เชเชกเชชเชฅเซ€ เช•เชพเชฎ เช•เชฐเซ‡ เช›เซ‡:

  • เช•เซ‹เชˆเชชเชฃ เช‡เชจเซเชธเซเชŸเซ‹เชฒเซ‡เชถเชจ เชตเชฟเชจเชพ เช•เช‚เชˆเช• เชถเซˆเช•เซเชทเชฃเชฟเช• เชฒเซ‹เชจเซเชš เช•เชฐเชตเซเช‚
  • iOS เชชเชฐ เชตเชฐเซเชšเซเชฏเซเช…เชฒเชพเชˆเชเซ‡เชถเชจ, เชœเซเชฏเชพเช‚, เช…เชซเชตเชพเช“ เช…เชจเซเชธเชพเชฐ, เชซเซเชฒเชพเชฏ เชชเชฐ เช•เซ‹เชก เชœเชจเชฐเซ‡เชถเชจ เช•เชฐเชตเชพเชจเซ‹ เช…เชงเชฟเช•เชพเชฐ เชงเชฐเชพเชตเชคเซ€ เชเช•เชฎเชพเชคเซเชฐ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชœเซ‡เชเชธ เชเชจเซเชœเชฟเชจ เช›เซ‡ (เชถเซเช‚ เช† เชธเชพเชšเซเช‚ เช›เซ‡?)
  • เชฎเชฟเชจเซ€-เช“เชเชธเชจเซเช‚ เชชเซเชฐเชฆเชฐเซเชถเชจ - เชธเชฟเช‚เช—เชฒ-เชซเซเชฒเซ‹เชชเซ€, เชฌเชฟเชฒเซเชŸ-เช‡เชจ, เชคเชฎเชพเชฎ เชชเซเชฐเช•เชพเชฐเชจเชพ เชซเชฐเซเชฎเชตเซ‡เชฐ, เชตเช—เซ‡เชฐเซ‡...

เชฌเซเชฐเชพเช‰เชเชฐ เชฐเชจเชŸเชพเช‡เชฎ เชธเซเชตเชฟเชงเชพเช“

เชฎเซ‡เช‚ เชชเชนเซ‡เชฒเซ‡เชฅเซ€ เชœ เช•เชนเซเชฏเซเช‚ เชคเซ‡เชฎ, QEMU เชฎเชฒเซเชŸเชฟเชฅเซเชฐเซ‡เชกเชฟเช‚เช— เชธเชพเชฅเซ‡ เชœเซ‹เชกเชพเชฏเซ‡เชฒเซเช‚ เช›เซ‡, เชชเชฐเช‚เชคเซ เชฌเซเชฐเชพเช‰เชเชฐ เชชเชพเชธเซ‡ เชคเซ‡ เชจเชฅเซ€. เชธเชพเชฐเซเช‚, เชเชŸเชฒเซ‡ เช•เซ‡, เชจเชพ... เชถเชฐเซ‚เช†เชคเชฎเชพเช‚ เชคเซ‡ เชฌเชฟเชฒเช•เซเชฒ เช…เชธเซเชคเชฟเชคเซเชตเชฎเชพเช‚ เชจเชนเซ‹เชคเซเช‚, เชชเช›เซ€ เชตเซ‡เชฌเชตเชฐเซเช•เชฐเซเชธ เชฆเซ‡เช–เชพเชฏเชพ - เชœเซเชฏเชพเช‚ เชธเซเชงเซ€ เชนเซเช‚ เชธเชฎเชœเซเช‚ เช›เซเช‚, เช† เชฎเชฒเซเชŸเชฟเชฅเซเชฐเซ‡เชกเซ€เช‚เช— เชฎเซ‡เชธเซ‡เชœ เชชเชพเชธเชฟเช‚เช— เชชเชฐ เช†เชงเชพเชฐเชฟเชค เช›เซ‡ เชตเชนเซ‡เช‚เชšเชพเชฏเซ‡เชฒ เชšเชฒเซ‹ เชตเชฟเชจเชพ. เชธเซเชตเชพเชญเชพเชตเชฟเช• เชฐเซ€เชคเซ‡, เชถเซ‡เชฐ เช•เชฐเซ‡เชฒ เชฎเซ‡เชฎเชฐเซ€ เชฎเซ‹เชกเชฒ เชชเชฐ เช†เชงเชพเชฐเชฟเชค เชนเชพเชฒเชจเชพ เช•เซ‹เชกเชจเซ‡ เชชเซ‹เชฐเซเชŸ เช•เชฐเชคเซ€ เชตเช–เชคเซ‡ เช† เชจเซ‹เช‚เชงเชชเชพเชคเซเชฐ เชธเชฎเชธเซเชฏเชพเช“ เชฌเชจเชพเชตเซ‡ เช›เซ‡. เชชเช›เซ€ เชœเชพเชนเซ‡เชฐ เชฆเชฌเชพเชฃ เชนเซ‡เช เชณ เชคเซ‡เชจเซ‡ เชจเชพเชฎเชฅเซ€ เช…เชฎเชฒเชฎเชพเช‚ เชฎเซเช•เชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚ เชนเชคเซเช‚ SharedArrayBuffers. เชคเซ‡ เชงเซ€เชฎเซ‡ เชงเซ€เชฎเซ‡ เชฐเชœเซ‚ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚, เชคเซ‡เช“เช เชœเซเชฆเชพ เชœเซเชฆเชพ เชฌเซเชฐเชพเช‰เชเชฐเซเชธเชฎเชพเช‚ เชคเซ‡เชจเชพ เชฒเซ‹เชจเซเชšเชจเซ€ เช‰เชœเชตเชฃเซ€ เช•เชฐเซ€, เชชเช›เซ€ เชคเซ‡เช“เช เชจเชตเซเช‚ เชตเชฐเซเชท เช‰เชœเชตเซเชฏเซเช‚, เช…เชจเซ‡ เชชเช›เซ€ เชฎเซ‡เชฒเซเชŸเชกเชพเช‰เชจ... เชœเซ‡ เชชเช›เซ€ เชคเซ‡เช“ เชเชตเชพ เชจเชฟเชทเซเช•เชฐเซเชท เชชเชฐ เช†เชตเซเชฏเชพ เช•เซ‡ เชธเชฎเชฏ เชฎเชพเชชเชจ เชฌเชฐเช›เชŸ เช…เชฅเชตเชพ เชฌเชฐเช›เชŸ เช›เซ‡, เชชเชฐเช‚เชคเซ เชตเชนเซ‡เช‚เชšเชพเชฏเซ‡เชฒ เชฎเซ‡เชฎเชฐเซ€เชจเซ€ เชฎเชฆเชฆเชฅเซ€. เชฅเซเชฐเซ‡เชก เช•เชพเช‰เชจเซเชŸเชฐ เชชเชฐ เชตเชงเชพเชฐเซ‹ เช•เชฐเซ‡ เช›เซ‡, เชคเซ‡ เชฌเชงเชพ เชธเชฎเชพเชจ เช›เซ‡ เชคเซ‡ เช–เซ‚เชฌ เชธเชšเซ‹เชŸ เชฐเซ€เชคเซ‡ เช•เชพเชฎ เช•เชฐเชถเซ‡. เชคเซ‡เชฅเซ€ เช…เชฎเซ‡ เชตเชนเซ‡เช‚เชšเชพเชฏเซ‡เชฒ เชฎเซ‡เชฎเชฐเซ€ เชธเชพเชฅเซ‡ เชฎเชฒเซเชŸเชฟเชฅเซเชฐเซ‡เชกเซ€เช‚เช—เชจเซ‡ เช…เช•เซเชทเชฎ เช•เชฐเซเชฏเซเช‚. เชเชตเซเช‚ เชฒเชพเช—เซ‡ เช›เซ‡ เช•เซ‡ เชคเซ‡เช“เช เชคเซ‡เชจเซ‡ เชชเชพเช›เชณเชฅเซ€ เชšเชพเชฒเซ เช•เชฐเซเชฏเซเช‚, เชชเชฐเช‚เชคเซ, เชœเซ‡เชฎ เช•เซ‡ เชคเซ‡ เชชเซเชฐเชฅเชฎ เชชเซเชฐเชฏเซ‹เช—เชฅเซ€ เชธเซเชชเชทเซเชŸ เชฅเชˆ เช—เชฏเซเช‚ เช›เซ‡, เชคเซ‡เชจเชพ เชตเชฟเชจเชพ เชœเซ€เชตเชจ เช›เซ‡, เช…เชจเซ‡ เชœเซ‹ เชเชฎ เชนเซ‹เชฏ, เชคเซ‹ เช…เชฎเซ‡ เชฎเชฒเซเชŸเชฟเชฅเซเชฐเซ‡เชกเชฟเช‚เช— เชชเชฐ เช†เชงเชพเชฐ เชฐเชพเช–เซเชฏเชพ เชตเชฟเชจเชพ เชคเซ‡ เช•เชฐเชตเชพเชจเซ‹ เชชเซเชฐเชฏเชพเชธ เช•เชฐเซ€เชถเซเช‚.

เชฌเซ€เชœเซ€ เชธเซเชตเชฟเชงเชพ เช เชธเซเชŸเซ‡เช• เชธเชพเชฅเซ‡ เชจเชฟเชฎเซเชจ-เชธเซเชคเชฐเชจเซ€ เชฎเซ‡เชจเซ€เชชเซเชฏเซเชฒเซ‡เชถเชจเซเชธเชจเซ€ เช…เชถเช•เซเชฏเชคเชพ เช›เซ‡: เชคเชฎเซ‡ เชซเช•เซเชค เชตเชฐเซเชคเชฎเชพเชจ เชธเช‚เชฆเชฐเซเชญเชจเซ‡ เชฒเชˆ เชถเช•เชคเชพ เชจเชฅเซ€, เชตเชฐเซเชคเชฎเชพเชจ เชธเช‚เชฆเชฐเซเชญเชจเซ‡ เชธเชพเชšเชตเซ€ เชถเช•เชคเชพ เชจเชฅเซ€ เช…เชจเซ‡ เชจเชตเชพ เชธเซเชŸเซ‡เช• เชธเชพเชฅเซ‡ เชจเชตเชพ เชชเชฐ เชธเซเชตเชฟเชš เช•เชฐเซ€ เชถเช•เชคเชพ เชจเชฅเซ€. เช•เซ‹เชฒ เชธเซเชŸเซ‡เช• เชœเซ‡เชเชธ เชตเชฐเซเชšเซเชฏเซเช…เชฒ เชฎเชถเซ€เชจ เชฆเซเชตเชพเชฐเชพ เชธเช‚เชšเชพเชฒเชฟเชค เชฅเชพเชฏ เช›เซ‡. เชเชตเซเช‚ เชฒเชพเช—เซ‡ เช›เซ‡ เช•เซ‡, เชธเชฎเชธเซเชฏเชพ เชถเซเช‚ เช›เซ‡, เช•เชพเชฐเชฃ เช•เซ‡ เช…เชฎเซ‡ เชนเชœเซ€ เชชเชฃ เช…เช—เชพเช‰เชจเชพ เชชเซเชฐเชตเชพเชนเซ‹เชจเซ‡ เชธเช‚เชชเซ‚เชฐเซเชฃเชชเชฃเซ‡ เชœเชพเชคเซ‡ เชธเช‚เชšเชพเชฒเชฟเชค เช•เชฐเชตเชพเชจเซเช‚ เชจเช•เซเช•เซ€ เช•เชฐเซเชฏเซเช‚ เช›เซ‡? เชนเช•เซ€เช•เชค เช เช›เซ‡ เช•เซ‡ QEMU เชฎเชพเช‚ เชฌเซเชฒเซ‹เช• I/O เชจเซ‹ เช…เชฎเชฒ เช•เซ‹เชฐเซ‹เชŸเซ€เชจ เชฆเซเชตเชพเชฐเชพ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เช…เชจเซ‡ เช† เชคเซ‡ เช›เซ‡ เชœเซเชฏเชพเช‚ เชจเชฟเชฎเซเชจ-เชธเซเชคเชฐเชจเชพ เชธเซเชŸเซ‡เช• เชฎเซ‡เชจเชฟเชชเซเชฏเซเชฒเซ‡เชถเชจเซเชธ เชนเชพเชฅเชฎเชพเช‚ เช†เชตเชถเซ‡. เชธเชฆเชจเชธเซ€เชฌเซ‡, Emscipten เชฎเชพเช‚ เชชเชนเซ‡เชฒเซ‡เชฅเซ€ เชœ เช…เชธเซเชฎเซ‡เชณ เช•เชพเชฎเช—เซ€เชฐเซ€ เชฎเชพเชŸเซ‡ เชเช• เชชเชฆเซเชงเชคเชฟ เช›เซ‡, เชฌเซ‡ เชชเชฃ: Asyncify ะธ เชเชฎเซเชชเชŸเชฐเชชเซเชฐเซ€เชŸเชฐ. เชชเซเชฐเชฅเชฎ เชœเชจเชฐเซ‡เชŸ เช•เชฐเซ‡เชฒเชพ JavaScript เช•เซ‹เชกเชฎเชพเช‚ เชจเซ‹เช‚เชงเชชเชพเชคเซเชฐ เชฌเซเชฒเซ‹เชŸ เชฆเซเชตเชพเชฐเชพ เช•เชพเชฎ เช•เชฐเซ‡ เช›เซ‡ เช…เชจเซ‡ เชนเชตเซ‡ เชคเซ‡ เชธเชชเซ‹เชฐเซเชŸเซ‡เชก เชจเชฅเซ€. เชฌเซ€เชœเซ‹ เชตเชฐเซเชคเชฎเชพเชจ "เชธเชพเชšเซ‹ เชฎเชพเชฐเซเช—" เช›เซ‡ เช…เชจเซ‡ เชฎเซ‚เชณ เชฆเซเชญเชพเชทเชฟเชฏเชพ เชฎเชพเชŸเซ‡ เชฌเชพเชˆเชŸเช•เซ‹เชก เชœเชจเชฐเซ‡เชถเชจ เชฆเซเชตเชพเชฐเชพ เช•เชพเชฎ เช•เชฐเซ‡ เช›เซ‡. เชคเซ‡, เช…เชฒเชฌเชคเซเชค, เชงเซ€เชฎเซ‡ เชงเซ€เชฎเซ‡ เช•เชพเชฎ เช•เชฐเซ‡ เช›เซ‡, เชชเชฐเช‚เชคเซ เชคเซ‡ เช•เซ‹เชกเชจเซ‡ เช–เซ€เชฒเชคเซเช‚ เชจเชฅเซ€. เชธเชพเชšเซเช‚, เช† เชฎเชฟเช•เซ‡เชจเชฟเชเชฎ เชฎเชพเชŸเซ‡ เช•เซ‹เชฐเซ‹เชŸเซ€เชจ เชฎเชพเชŸเซ‡ เช†เชงเชพเชฐ เชธเซเชตเชคเช‚เชคเซเชฐ เชฐเซ€เชคเซ‡ เชซเชพเชณเซ‹ เช†เชชเชตเซ‹ เชชเชกเชคเซ‹ เชนเชคเซ‹ (เชคเซเชฏเชพเช‚ เชชเชนเซ‡เชฒเชพเชฅเซ€ เชœ Asyncify เชฎเชพเชŸเซ‡ เช•เซ‹เชฐเซ‹เชŸเซ€เชจ เชฒเช–เซ‡เชฒเชพ เชนเชคเชพ เช…เชจเซ‡ Emterpreter เชฎเชพเชŸเซ‡ เชฒเช—เชญเช— เชธเชฎเชพเชจ API เชจเซ‹ เช…เชฎเชฒ เชนเชคเซ‹, เชคเชฎเชพเชฐเซ‡ เชคเซ‡เชฎเชจเซ‡ เช•เชจเซ‡เช•เซเชŸ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡).

เช† เช•เซเชทเชฃเซ‡, เชฎเซ‡เช‚ เชนเชœเซ€ เชธเซเชงเซ€ WASM เชฎเชพเช‚ เช•เชฎเซเชชเชพเช‡เชฒ เช•เชฐเซ‡เชฒเชพ เช•เซ‹เชกเชจเซ‡ เชตเชฟเชญเชพเชœเชฟเชค เช•เชฐเชตเชพเชฎเชพเช‚ เช…เชจเซ‡ เชเชฎเซเชŸเชฐเชชเซเชฐเซ€เชŸเชฐเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เช…เชฐเซเชฅเช˜เชŸเชจ เช•เชฐเชตเชพเชฎเชพเช‚ เชตเซเชฏเชตเชธเซเชฅเชพเชชเชฟเชค เชจเชฅเซ€, เชคเซ‡เชฅเซ€ เชฌเซเชฒเซ‹เช• เช‰เชชเช•เชฐเชฃเซ‹ เชนเชœเซ€ เช•เชพเชฎ เช•เชฐเชคเชพ เชจเชฅเซ€ (เช†เช—เชณเชจเซ€ เชถเซเชฐเซ‡เชฃเซ€เชฎเชพเช‚ เชœเซเช“, เชœเซ‡เชฎ เชคเซ‡เช“ เช•เชนเซ‡ เช›เซ‡...). เชเชŸเชฒเซ‡ เช•เซ‡, เช…เช‚เชคเซ‡ เชคเชฎเชพเชฐเซ‡ เช† เชฐเชฎเซเชœเซ€ เชธเซเชคเชฐเชตเชพเชณเซ€ เชตเชธเซเชคเซ เชœเซ‡เชตเซเช‚ เช•เช‚เชˆเช• เชฎเซ‡เชณเชตเชตเซเช‚ เชœเซ‹เชˆเช:

  • เช…เชฐเซเชฅเช˜เชŸเชจ เช•เชฐเซ‡เชฒ เชฌเซเชฒเซ‹เช• I/O. เชธเชพเชฐเซเช‚, เชถเซเช‚ เชคเชฎเซ‡ เช–เชฐเซ‡เช–เชฐ เชฎเซ‚เชณ เชชเซเชฐเชฆเชฐเซเชถเชจ เชธเชพเชฅเซ‡ เชเชฎเซเชฏเซเชฒเซ‡เชŸเซ‡เชก NVMeเชจเซ€ เช…เชชเซ‡เช•เซเชทเชพ เชฐเชพเช–เซ€ เชนเชคเซ€? ๐Ÿ™‚
  • เชธเซเชŸเซ‡เชŸเชฟเช•เชฒเซ€ เช•เชฎเซเชชเชพเชˆเชฒ เช•เชฐเซ‡เชฒ เชฎเซเช–เซเชฏ QEMU เช•เซ‹เชก (เช…เชจเซเชตเชพเชฆเช•, เช…เชจเซเชฏ เชเชฎเซเชฏเซเชฒเซ‡เชŸเซ‡เชก เช‰เชชเช•เชฐเชฃเซ‹ เชตเช—เซ‡เชฐเซ‡)
  • WASM เชฎเชพเช‚ เช—เซ‡เชธเซเชŸ เช•เซ‹เชกเชจเซ‡ เช—เชคเชฟเชถเซ€เชฒ เชฐเซ€เชคเซ‡ เชธเช‚เช•เชฒเชฟเชค เช•เชฐเซ‡ เช›เซ‡

QEMU เชธเซเชคเซเชฐเซ‹เชคเซ‹เชจเซ€ เชตเชฟเชถเซ‡เชทเชคเชพเช“

เชœเซ‡เชฎ เชคเชฎเซ‡ เช•เชฆเชพเชš เชชเชนเซ‡เชฒเซ‡เชฅเซ€ เชœ เช…เชจเซเชฎเชพเชจ เชฒเช—เชพเชตเซเชฏเซเช‚ เชนเชถเซ‡, เช—เซ‡เชธเซเชŸ เช†เชฐเซเช•เชฟเชŸเซ‡เช•เซเชšเชฐเซเชธเชจเซเช‚ เช…เชจเซเช•เชฐเชฃ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡เชจเซ‹ เช•เซ‹เชก เช…เชจเซ‡ เชนเซ‹เชธเซเชŸ เชฎเชถเซ€เชจ เชธเซ‚เชšเชจเชพเช“ เชœเชจเชฐเซ‡เชŸ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡เชจเซ‹ เช•เซ‹เชก QEMU เชฎเชพเช‚ เช…เชฒเช— เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซ‹ เช›เซ‡. เชนเช•เซ€เช•เชคเชฎเชพเช‚, เชคเซ‡ เชฅเซ‹เชกเซเช‚ เชฎเซเชถเซเช•เซ‡เชฒ เชชเชฃ เช›เซ‡:

  • เชคเซเชฏเชพเช‚ เช—เซ‡เชธเซเชŸ เช†เชฐเซเช•เชฟเชŸเซ‡เช•เซเชšเชฐ เช›เซ‡
  • เช›เซ‡ เชชเซเชฐเชตเซ‡เช—เช•, เชเชŸเชฒเซ‡ เช•เซ‡, Linux เชชเชฐ เชนเชพเชฐเซเชกเชตเซ‡เชฐ เชตเชฐเซเชšเซเชฏเซเช…เชฒเชพเชˆเชเซ‡เชถเชจ เชฎเชพเชŸเซ‡ KVM (เชเช•เชฌเซ€เชœเชพ เชธเชพเชฅเซ‡ เชธเซเชธเช‚เช—เชค เชฎเชนเซ‡เชฎเชพเชจ เช…เชจเซ‡ เชฏเชœเชฎเชพเชจ เชธเชฟเชธเซเชŸเชฎเซ‹ เชฎเชพเชŸเซ‡), เช—เชฎเซ‡ เชคเซเชฏเชพเช‚ JIT เช•เซ‹เชก เชœเชจเชฐเซ‡เชถเชจ เชฎเชพเชŸเซ‡ TCG. QEMU 2.9 เชฅเซ€ เชถเชฐเซ‚ เช•เชฐเซ€เชจเซ‡, Windows เชชเชฐ HAXM เชนเชพเชฐเซเชกเชตเซ‡เชฐ เชตเชฐเซเชšเซเชฏเซเช…เชฒเชพเชˆเชเซ‡เชถเชจ เชธเซเชŸเชพเชจเซเชกเชฐเซเชก เชฎเชพเชŸเซ‡ เชธเชชเซ‹เชฐเซเชŸ เชฆเซ‡เช–เชพเชฏเซ‹ (เชตเชฟเช—เชคเซ‹)
  • เชœเซ‹ TCG เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ เช…เชจเซ‡ เชนเชพเชฐเซเชกเชตเซ‡เชฐ เชตเชฐเซเชšเซเชฏเซเช…เชฒเชพเชˆเชเซ‡เชถเชจ เชจเชฅเซ€, เชคเซ‹ เชคเซ‡ เชฆเชฐเซ‡เช• เชนเซ‹เชธเซเชŸ เช†เชฐเซเช•เชฟเชŸเซ‡เช•เซเชšเชฐ เชฎเชพเชŸเซ‡ เชคเซ‡เชฎเชœ เชธเชพเชฐเซเชตเชคเซเชฐเชฟเช• เชฆเซเชญเชพเชทเชฟเชฏเชพ เชฎเชพเชŸเซ‡ เช…เชฒเช— เช•เซ‹เชก เชœเชจเชฐเซ‡เชถเชจ เชธเชชเซ‹เชฐเซเชŸ เชงเชฐเชพเชตเซ‡ เช›เซ‡.
  • ... เช…เชจเซ‡ เช† เชฌเชงเชพเชจเซ€ เช†เชธเชชเชพเชธ - เชเชฎเซเชฏเซเชฒเซ‡เชŸเซ‡เชก เชชเซ‡เชฐเชฟเชซเซ‡เชฐเชฒเซเชธ, เชฏเซเชเชฐ เช‡เชจเซเชŸเชฐเชซเซ‡เชธ, เชธเซเชฅเชณเชพเช‚เชคเชฐ, เชฐเซ‡เช•เซ‹เชฐเซเชก-เชฐเชฟเชชเซเชฒเซ‡, เชตเช—เซ‡เชฐเซ‡.

เชฎเชพเชฐเซเช— เชฆเซเชตเชพเชฐเชพ, เชถเซเช‚ เชคเชฎเซ‡ เชœเชพเชฃเซ‹ เช›เซ‹: QEMU เชฎเชพเชคเซเชฐ เชธเชฎเช—เซเชฐ เช•เชฎเซเชชเซเชฏเซเชŸเชฐเชจเซเช‚ เช…เชจเซเช•เชฐเชฃ เช•เชฐเซ€ เชถเช•เซ‡ เช›เซ‡, เชชเชฐเช‚เชคเซ เชนเซ‹เชธเซเชŸ เช•เชฐเซเชจเชฒเชฎเชพเช‚ เช…เชฒเช— เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เชฎเชพเชŸเซ‡ เชชเซเชฐเซ‹เชธเซ‡เชธเชฐเชจเซเช‚ เชชเชฃ เช…เชจเซเช•เชฐเชฃ เช•เชฐเซ€ เชถเช•เซ‡ เช›เซ‡, เชœเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— เชฅเชพเชฏ เช›เซ‡, เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชฌเชพเชˆเชจเชฐเซ€ เช‡เชจเซเชธเซเชŸเซเชฐเซเชฎเซ‡เชจเซเชŸเซ‡เชถเชจ เชฎเชพเชŸเซ‡ AFL เชซเชเชฐ เชฆเซเชตเชพเชฐเชพ. เช•เชฆเชพเชš เช•เซ‹เชˆ เช•เซเชฏเซเชˆเชเชฎเชฏเซเชจเชพ เช“เชชเชฐเซ‡เชถเชจเชจเชพ เช† เชฎเซ‹เชกเชจเซ‡ เชœเซ‡เชเชธเชฎเชพเช‚ เชชเซ‹เชฐเซเชŸ เช•เชฐเชตเชพ เชฎเชพเช‚เช—เซ‡ เช›เซ‡? ๐Ÿ˜‰

เชฎเซ‹เชŸเชพเชญเชพเช—เชจเชพ เชฒเชพเช‚เชฌเชพ เชธเชฎเชฏเชฅเซ€ เชšเชพเชฒเชคเชพ เชซเซเชฐเซ€ เชธเซ‹เชซเซเชŸเชตเซ‡เชฐเชจเซ€ เชœเซ‡เชฎ, QEMU เช•เซ‹เชฒ เชฆเซเชตเชพเชฐเชพ เชฌเชจเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ configure ะธ make. เชšเชพเชฒเซ‹ เช•เชนเซ€เช เช•เซ‡ เชคเชฎเซ‡ เช•เช‚เชˆเช• เช‰เชฎเซ‡เชฐเชตเชพเชจเซเช‚ เชจเช•เซเช•เซ€ เช•เชฐเซเชฏเซเช‚ เช›เซ‡: TCG เชฌเซ‡เช•เชเชจเซเชก, เชฅเซเชฐเซ‡เชก เช…เชฎเชฒเซ€เช•เชฐเชฃ, เชฌเซ€เชœเซเช‚ เช•เช‚เชˆเช•. เช‘เชŸเซ‹เช•เซ‹เชจเซเชซ เชธเชพเชฅเซ‡ เชตเชพเชคเชšเซ€เชค เช•เชฐเชตเชพเชจเซ€ เชธเช‚เชญเชพเชตเชจเชพ เชชเชฐ เช–เซเชถ/เช—เชญเชฐเชพเชˆ เชœเชตเชพ เชฎเชพเชŸเซ‡ เช‰เชคเชพเชตเชณ เช•เชฐเชถเซ‹ เชจเชนเซ€เช‚ (เชฏเซ‹เช—เซเชฏ เชคเชฐเซ€เช•เซ‡ เชฐเซ‡เช–เชพเช‚เช•เชฟเชค เช•เชฐเซ‹) - เชนเช•เซ€เช•เชคเชฎเชพเช‚, configure QEMU เชฆเซ‡เช–เซ€เชคเซ€ เชฐเซ€เชคเซ‡ เชธเซเชต-เชฒเซ‡เช–เชฟเชค เช›เซ‡ เช…เชจเซ‡ เชคเซ‡ เช•เช‚เชˆเชชเชฃเชฎเชพเช‚เชฅเซ€ เชœเชจเชฐเซ‡เชŸ เชฅเชฏเซ‡เชฒ เชจเชฅเซ€.

เชตเซ‡เชฌเช…เชธเซเชฌเชพเชจ

เชคเซ‹ เช† เชตเชธเซเชคเซเชจเซ‡ WebAssembly (เช‰เชฐเซเชซ WASM) เชถเซเช‚ เช•เชนเซ‡เชตเชพเชฏ? เช† Asm.js เชฎเชพเชŸเซ‡ เชฐเชฟเชชเซเชฒเซ‡เชธเชฎเซ‡เชจเซเชŸ เช›เซ‡, เชœเซ‡ เชนเชตเซ‡ เชฎเชพเชจเซเชฏ JavaScript เช•เซ‹เชก เชนเซ‹เชตเชพเชจเซ‹ เชขเซ‹เช‚เช— เช•เชฐเชคเซเช‚ เชจเชฅเซ€. เชคเซ‡เชจเชพเชฅเซ€ เชตเชฟเชชเชฐเชฟเชค, เชคเซ‡ เชธเช‚เชชเซ‚เชฐเซเชฃเชชเชฃเซ‡ เชฆเซเชตเชฟเชธเช‚เช—เซ€ เช…เชจเซ‡ เช‘เชชเซเชŸเชฟเชฎเชพเช‡เช เช›เซ‡, เช…เชจเซ‡ เชคเซ‡เชฎเชพเช‚ เชซเช•เซเชค เชชเซ‚เชฐเซเชฃเชพเช‚เช• เชฒเช–เชตเชพเชจเซเช‚ เชชเชฃ เช–เซ‚เชฌ เชธเชฐเชณ เชจเชฅเซ€: เช•เซ‹เชฎเซเชชเซ‡เช•เซเชŸเชจเซ‡เชธ เชฎเชพเชŸเซ‡, เชคเซ‡ เชซเซ‹เชฐเซเชฎเซ‡เชŸเชฎเชพเช‚ เชธเช‚เช—เซเชฐเชนเชฟเชค เช›เซ‡. เชฒเซ‡เชฌ 128.

เชคเชฎเซ‡ Asm.js เชฎเชพเชŸเซ‡ เชฐเชฟเชฒเซ‚เชชเชฟเช‚เช— เช…เชฒเซเช—เซ‹เชฐเชฟเชงเชฎ เชตเชฟเชถเซ‡ เชธเชพเช‚เชญเชณเซเชฏเซเช‚ เชนเชถเซ‡ - เช† "เช‰เชšเซเชš-เชธเซเชคเชฐ" เชซเซเชฒเซ‹ เช•เช‚เชŸเซเชฐเซ‹เชฒ เชธเซ‚เชšเชจเชพเช“เชจเซเช‚ เชชเซเชจเชƒเชธเซเชฅเชพเชชเชจ เช›เซ‡ (เชเชŸเชฒเซ‡ โ€‹โ€‹โ€‹โ€‹เช•เซ‡, เชœเซ‹-เชคเซ‹-เชฌเซ€เชœเซเช‚, เชฒเซ‚เชชเซเชธ, เชตเช—เซ‡เชฐเซ‡), เชœเซ‡เชจเชพ เชฎเชพเชŸเซ‡ JS เชเชจเซเชœเชฟเชจ เชกเชฟเชเชพเช‡เชจ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเชพ เช›เซ‡, เชฒเซ‹-เชฒเซ‡เชตเชฒ LLVM IR, เชชเซเชฐเซ‹เชธเซ‡เชธเชฐ เชฆเซเชตเชพเชฐเชพ เชšเชฒเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡เชฒ เชฎเชถเซ€เชจ เช•เซ‹เชกเชจเซ€ เชจเชœเซ€เช•. เชธเซเชตเชพเชญเชพเชตเชฟเช• เชฐเซ€เชคเซ‡, QEMU เชจเซ€ เชฎเชงเซเชฏเชตเชฐเซเชคเซ€ เชฐเชœเซ‚เช†เชค เชฌเซ€เชœเชพเชจเซ€ เชจเชœเซ€เช• เช›เซ‡. เชเชตเซเช‚ เชฒเชพเช—เซ‡ เช›เซ‡ เช•เซ‡ เชคเซ‡ เช…เชนเซ€เช‚ เช›เซ‡, เชฌเชพเชฏเชŸเซ‡เช•เซ‹เชก, เชฏเชพเชคเชจเชพเชจเซ‹ เช…เช‚เชค... เช…เชจเซ‡ เชชเช›เซ€ เชฌเซเชฒเซ‹เช•เซเชธ เช›เซ‡, เชœเซ‹-เชคเซ‹-เชฌเซ€เชœเซเช‚ เช…เชจเซ‡ เชฒเซ‚เชชเซเชธ!..

เช…เชจเซ‡ เช† เชฌเซ€เชœเซเช‚ เช•เชพเชฐเชฃ เช›เซ‡ เช•เซ‡ เชฌเชพเชˆเชจเชฐเซ€เชจ เช‰เชชเชฏเซ‹เช—เซ€ เช›เซ‡: เชคเซ‡ เช•เซเชฆเชฐเชคเซ€ เชฐเซ€เชคเซ‡ WASM เชฎเชพเช‚ เชœเซ‡ เชธเช‚เช—เซเชฐเชนเชฟเชค เชฅเชถเซ‡ เชคเซ‡เชจเซ€ เชจเชœเซ€เช•เชจเชพ เช‰เชšเซเชš-เชธเซเชคเชฐเชจเชพ เชฌเซเชฒเซ‹เช•เซเชธเชจเซ‡ เชธเซเชตเซ€เช•เชพเชฐเซ€ เชถเช•เซ‡ เช›เซ‡. เชชเชฐเช‚เชคเซ เชคเซ‡ เชฎเซ‚เชณเชญเซ‚เชค เชฌเซเชฒเซ‹เช•เซเชธ เช…เชจเซ‡ เชคเซ‡เชฎเชจเซ€ เชตเชšเซเชšเซ‡เชจเชพ เชธเช‚เช•เซเชฐเชฎเชฃเซ‹เชจเชพ เช—เซเชฐเชพเชซเชฎเชพเช‚เชฅเซ€ เช•เซ‹เชก เชชเชฃ เชฌเชจเชพเชตเซ€ เชถเช•เซ‡ เช›เซ‡. เช เซ€เช• เช›เซ‡, เชฎเซ‡เช‚ เชชเชนเซ‡เชฒเซ‡เชฅเซ€ เชœ เช•เชนเซเชฏเซเช‚ เช›เซ‡ เช•เซ‡ เชคเซ‡ เช…เชจเซเช•เซ‚เชณ C/C++ API เชชเชพเช›เชณ WebAssembly เชธเซเชŸเซ‹เชฐเซ‡เชœ เชซเซ‹เชฐเซเชฎเซ‡เชŸ เช›เซเชชเชพเชตเซ‡ เช›เซ‡.

เชŸเซ€เชธเซ€เชœเซ€ (เชจเชพเชจเชพ เช•เซ‹เชก เชœเชจเชฐเซ‡เชŸเชฐ)

เชŸเซ€เชธเซ€เชœเซ€ เชฎเซ‚เชณ เชนเชคเซ€ C เช•เชฎเซเชชเชพเช‡เชฒเชฐ เชฎเชพเชŸเซ‡ เชฌเซ‡เช•เชเชจเซเชก. เชชเช›เซ€, เชฆเซ‡เช–เซ€เชคเซ€ เชฐเซ€เชคเซ‡, เชคเซ‡ GCC เชธเชพเชฅเซ‡เชจเซ€ เชธเซเชชเชฐเซเชงเชพ เชธเชพเชฎเซ‡ เชŸเช•เซ€ เชถเช•เซเชฏเซเช‚ เชจเชนเซ€เช‚, เชชเชฐเช‚เชคเซ เช…เช‚เชคเซ‡ เชคเซ‡เชจเซ‡ เชนเซ‹เชธเซเชŸ เชชเซเชฒเซ‡เชŸเชซเซ‹เชฐเซเชฎ เชฎเชพเชŸเซ‡ เช•เซ‹เชก เชœเชจเชฐเซ‡เชถเชจ เชฎเชฟเช•เซ‡เชจเชฟเชเชฎ เชคเชฐเซ€เช•เซ‡ QEMU เชฎเชพเช‚ เชคเซ‡เชจเซเช‚ เชธเซเชฅเชพเชจ เชฎเชณเซเชฏเซเช‚. เชคเซเชฏเชพเช‚ เชเช• TCG เชฌเซ‡เช•เชเชจเซเชก เชชเชฃ เช›เซ‡ เชœเซ‡ เช•เซ‡เชŸเชฒเชพเช• เช…เชฎเซ‚เชฐเซเชค เชฌเชพเชฏเชŸเซ‡เช•เซ‹เชก เชœเชจเชฐเซ‡เชŸ เช•เชฐเซ‡ เช›เซ‡, เชœเซ‡ เชคเชฐเชค เชœ เชฆเซเชญเชพเชทเชฟเชฏเชพ เชฆเซเชตเชพเชฐเชพ เชšเชฒเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เชชเชฐเช‚เชคเซ เชฎเซ‡เช‚ เช† เชตเช–เชคเซ‡ เชคเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชจเซเช‚ เชŸเชพเชณเชตเชพเชจเซเช‚ เชจเช•เซเช•เซ€ เช•เชฐเซเชฏเซเช‚ เช›เซ‡. เชœเซ‹ เช•เซ‡, เชนเช•เซ€เช•เชค เช เช›เซ‡ เช•เซ‡ QEMU เชฎเชพเช‚ เชซเช‚เช•เซเชถเชจ เชฆเซเชตเชพเชฐเชพ เชœเชจเชฐเซ‡เชŸ เชฅเชฏเซ‡เชฒเชพ เชŸเซ€เชฌเซ€เชฎเชพเช‚ เชธเช‚เช•เซเชฐเชฎเชฃเชจเซ‡ เชธเช•เซเชทเชฎ เช•เชฐเชตเซเช‚ เชชเชนเซ‡เชฒเซ‡เชฅเซ€ เชœ เชถเช•เซเชฏ เช›เซ‡. tcg_qemu_tb_exec, เชคเซ‡ เชฎเชพเชฐเชพ เชฎเชพเชŸเซ‡ เช–เซ‚เชฌ เช‰เชชเชฏเซ‹เช—เซ€ เชนเซ‹เชตเชพเชจเซเช‚ เชฌเชนเชพเชฐ เช†เชตเซเชฏเซเช‚ เช›เซ‡.

QEMU เชฎเชพเช‚ เชจเชตเซเช‚ TCG เชฌเซ‡เช•เชเชจเซเชก เช‰เชฎเซ‡เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชคเชฎเชพเชฐเซ‡ เชธเชฌเชกเชฟเชฐเซ‡เช•เซเชŸเชฐเซ€ เชฌเชจเชพเชตเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡ tcg/<ะธะผั ะฐั€ั…ะธั‚ะตะบั‚ัƒั€ั‹> (เช† เชฌเชพเชฌเชคเซ‡, tcg/binaryen), เช…เชจเซ‡ เชคเซ‡เชฎเชพเช‚ เชฌเซ‡ เชซเชพเช‡เชฒเซ‹ เช›เซ‡: tcg-target.h ะธ tcg-target.inc.c ะธ เชฒเช–เซ‹ เชคเซ‡ เชฌเชงเชพ เชตเชฟเชถเซ‡ เช›เซ‡ configure. เชคเชฎเซ‡ เช…เชจเซเชฏ เชซเชพเช‡เชฒเซ‹ เชคเซเชฏเชพเช‚ เชฎเซ‚เช•เซ€ เชถเช•เซ‹ เช›เซ‹, เชชเชฐเช‚เชคเซ, เชœเซ‡เชฎ เชคเชฎเซ‡ เช† เชฌเซ‡เชจเชพ เชจเชพเชฎ เชชเชฐเชฅเซ€ เช…เชจเซเชฎเชพเชจ เชฒเช—เชพเชตเซ€ เชถเช•เซ‹ เช›เซ‹, เชคเซ‡ เชฌเช‚เชจเซ‡ เช•เซเชฏเชพเช‚เช• เชธเชฎเชพเชตเชฟเชทเซเชŸ เชนเชถเซ‡: เชเช• เชจเชฟเชฏเชฎเชฟเชค เชนเซ‡เชกเชฐ เชซเชพเช‡เชฒ เชคเชฐเซ€เช•เซ‡ (เชคเซ‡เชฎเชพเช‚ เชถเชพเชฎเซ‡เชฒ เช›เซ‡. tcg/tcg.h, เช…เชจเซ‡ เชคเซ‡ เชกเชฟเชฐเซ‡เช•เซเชŸเชฐเซ€เช“เชจเซ€ เช…เชจเซเชฏ เชซเชพเช‡เชฒเซ‹เชฎเชพเช‚ เชชเชนเซ‡เชฒเซ‡เชฅเซ€ เชœ เช›เซ‡ tcg, accel เช…เชจเซ‡ เชฎเชพเชคเซเชฐ เชจเชนเซ€เช‚), เช…เชจเซเชฏ - เชฎเชพเชคเซเชฐ เช•เซ‹เชก เชธเซเชจเชฟเชชเซ‡เชŸ เชคเชฐเซ€เช•เซ‡ tcg/tcg.c, เชชเชฐเช‚เชคเซ เชคเซ‡เชจเซ€ เชชเชพเชธเซ‡ เชคเซ‡เชจเชพ เชธเซเชฅเชฟเชฐ เช•เชพเชฐเซเชฏเซ‹เชจเซ€ เชเช•เซเชธเซ‡เชธ เช›เซ‡.

เชคเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช•เชพเชฐเซเชฏ เช•เชฐเซ‡ เช›เซ‡ เชคเซ‡เชจเซ€ เชตเชฟเช—เชคเชตเชพเชฐ เชคเชชเชพเชธเชฎเชพเช‚ เชนเซเช‚ เช˜เชฃเซ‹ เชธเชฎเชฏ เชตเชฟเชคเชพเชตเซ€เชถ เชคเซ‡ เชจเช•เซเช•เซ€ เช•เชฐเซ€เชจเซ‡, เชฎเซ‡เช‚ เช† เชฌเซ‡ เชซเชพเชˆเชฒเซ‹เชจเชพ "เชนเชพเชกเชชเชฟเช‚เชœเชฐ"เชจเซ‡ เช…เชจเซเชฏ เชฌเซ‡เช•เชเชจเซเชก เช…เชฎเชฒเซ€เช•เชฐเชฃเชฎเชพเช‚เชฅเซ€ เชจเช•เชฒ เช•เชฐเซ€, เชœเซ‡ เชชเซเชฐเชฎเชพเชฃเชฟเช•เชชเชฃเซ‡ เชฒเชพเชฏเชธเชจเซเชธ เชนเซ‡เชกเชฐเชฎเชพเช‚ เชฆเชฐเซเชถเชพเชตเซ‡เชฒ เช›เซ‡.

เชซเชพเชˆเชฒ tcg-target.h เชซเซ‹เชฐเซเชฎเชฎเชพเช‚ เชฎเซเช–เซเชฏเชคเซเชตเซ‡ เชธเซ‡เชŸเชฟเช‚เช—เซเชธ เชธเชฎเชพเชตเซ‡ เช›เซ‡ #define-เช“:

  • เชŸเชพเชฐเซเช—เซ‡เชŸ เช†เชฐเซเช•เชฟเชŸเซ‡เช•เซเชšเชฐ เชชเชฐ เช•เซ‡เชŸเชฒเชพ เชฐเชœเชฟเชธเซเชŸเชฐ เช…เชจเซ‡ เช•เซ‡เชŸเชฒเซ€ เชชเชนเซ‹เชณเชพเชˆ เช›เซ‡ (เช…เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เชœเซ‹เชˆเช เชคเซ‡เชŸเชฒเชพ เช›เซ‡, เชœเซ‡เชŸเชฒเชพ เช†เชชเชฃเซ‡ เชœเซ‹เชˆเช เช›เซ‡ - เชชเซเชฐเชถเซเชจ เช เช›เซ‡ เช•เซ‡ "เชธเช‚เชชเซ‚เชฐเซเชฃ เชฒเช•เซเชทเซเชฏ" เช†เชฐเซเช•เชฟเชŸเซ‡เช•เซเชšเชฐ เชชเชฐ เชฌเซเชฐเชพเช‰เชเชฐ เชฆเซเชตเชพเชฐเชพ เชตเชงเซ เช•เชพเชฐเซเชฏเช•เซเชทเชฎ เช•เซ‹เชกเชฎเชพเช‚ เชถเซเช‚ เชœเชจเชฐเซ‡เชŸ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡ เชคเซ‡ เชตเชฟเชถเซ‡ เชตเชงเซ เช›เซ‡. ...)
  • เชฏเชœเชฎเชพเชจ เชธเซ‚เชšเชจเชพเช“เชจเซเช‚ เชธเช‚เชฐเซ‡เช–เชฃ: x86 เชชเชฐ, เช…เชจเซ‡ TCI เชฎเชพเช‚ เชชเชฃ, เชธเซ‚เชšเชจเชพเช“ เชฌเชฟเชฒเช•เซเชฒ เชธเช‚เชฐเซ‡เช–เชฟเชค เชจเชฅเซ€, เชชเชฐเช‚เชคเซ เชนเซเช‚ เช•เซ‹เชก เชฌเชซเชฐเชฎเชพเช‚ เชธเซ‚เชšเชจเชพเช“ เชจเชนเซ€เช‚, เชชเชฐเช‚เชคเซ เชฌเชพเชˆเชจเชฐเซ€เชฏเชจ เชฒเชพเช‡เชฌเซเชฐเซ‡เชฐเซ€ เชธเซเชŸเซเชฐเช•เซเชšเชฐเซเชธ เชคเชฐเชซ เชจเชฟเชฐเซเชฆเซ‡เชถ เช•เชฐเชตเชพ เชœเชˆ เชฐเชนเซเชฏเซ‹ เช›เซเช‚, เชคเซ‡เชฅเซ€ เชนเซเช‚ เช•เชนเซ€เชถ: 4 เชฌเชพเช‡เชŸเซเชธ
  • เชฌเซ‡เช•เชเชจเซเชก เช•เชˆ เชตเซˆเช•เชฒเซเชชเชฟเช• เชธเซ‚เชšเชจเชพเช“ เชœเชจเชฐเซ‡เชŸ เช•เชฐเซ€ เชถเช•เซ‡ เช›เซ‡ - เช…เชฎเซ‡ เชฌเชพเชˆเชจเชฐเซ€เชฏเชจเชฎเชพเช‚ เชœเซ‡ เช•เช‚เชˆเชชเชฃ เชถเซ‹เชงเซ€เช เช›เซ€เช เชคเซ‡เชจเซ‹ เชธเชฎเชพเชตเซ‡เชถ เช•เชฐเซ€เช เช›เซ€เช, เชเช•เซเชธเชฟเชฒเชฐเซ‡เชŸเชฐเชจเซ‡ เชฌเชพเช•เซ€เชจเชพเชจเซ‡ เชธเชฐเชณเชฎเชพเช‚ เชคเซ‹เชกเชตเชพ เชฆเซ‹
  • เชฌเซ‡เช•เชเชจเซเชก เชฆเซเชตเชพเชฐเชพ เชตเชฟเชจเช‚เชคเซ€ เช•เชฐเชพเชฏเซ‡เชฒ TLB เช•เซ‡เชถเชจเซเช‚ เช…เช‚เชฆเชพเชœเชฟเชค เช•เชฆ เช•เซ‡เชŸเชฒเซเช‚ เช›เซ‡. เชนเช•เซ€เช•เชค เช เช›เซ‡ เช•เซ‡ QEMU เชฎเชพเช‚ เชฌเชงเซเช‚ เช—เช‚เชญเซ€เชฐ เช›เซ‡: เชคเซ‡เชฎ เช›เชคเชพเช‚ เชคเซเชฏเชพเช‚ เชธเชนเชพเชฏเช• เช•เชพเชฐเซเชฏเซ‹ เช›เซ‡ เชœเซ‡ เชฎเชนเซ‡เชฎเชพเชจ MMU (เชนเชตเซ‡ เช†เชชเชฃเซ‡ เชคเซ‡เชจเชพ เชตเชฟเชจเชพ เช•เซเชฏเชพเช‚ เชนเซ‹เชˆเชถเซเช‚?) เชจเซ‡ เชงเซเชฏเชพเชจเชฎเชพเช‚ เชฒเชˆเชจเซ‡ เชฒเซ‹เชก/เชธเซเชŸเซ‹เชฐ เช•เชฐเซ‡ เช›เซ‡, เชคเซ‡เช“ เชคเซ‡เชฎเชจเชพ เช…เชจเซเชตเชพเชฆ เช•เซ‡เชถเชจเซ‡ เชฌเช‚เชงเชพเชฐเชฃเชจเชพ เชฐเซ‚เชชเชฎเชพเช‚ เชธเชพเชšเชตเซ‡ เช›เซ‡, เชœเซ‡เชจเซ€ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เชธเซ€เชงเซ€ เชฌเซเชฐเซ‹เชกเช•เชพเชธเซเชŸ เชฌเซเชฒเซ‹เช•เซเชธเชฎเชพเช‚ เชเชฎเซเชฌเซ‡เชก เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช…เชจเซเช•เซ‚เชณ เช›เซ‡. เชชเซเชฐเชถเซเชจ เช เช›เซ‡ เช•เซ‡, เช†เชฆเซ‡เชถเซ‹เชจเชพ เชจเชพเชจเชพ เช…เชจเซ‡ เชเชกเชชเซ€ เช•เซเชฐเชฎ เชฆเซเชตเชพเชฐเชพ เช† เชฌเช‚เชงเชพเชฐเชฃเชฎเชพเช‚ เช•เชˆ เช‘เชซเชธเซ‡เชŸ เชธเซŒเชฅเซ€ เชตเชงเซ เช…เชธเชฐเช•เชพเชฐเช• เชฐเซ€เชคเซ‡ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡?
  • เช…เชนเซ€เช‚ เชคเชฎเซ‡ เชเช• เช…เชฅเชตเชพ เชฌเซ‡ เช†เชฐเช•เซเชทเชฟเชค เชฐเชœเซ€เชธเซเชŸเชฐเชจเชพ เชนเซ‡เชคเซเชจเซ‡ เชฌเชฆเชฒเซ€ เชถเช•เซ‹ เช›เซ‹, เช•เชพเชฐเซเชฏ เชฆเซเชตเชพเชฐเชพ เชŸเซ€เชฌเซ€เชจเซ‡ เช•เซ‰เชฒ เช•เชฐเชตเชพเชจเซเช‚ เชธเช•เซเชทเชฎ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹ เช…เชจเซ‡ เชตเซˆเช•เชฒเซเชชเชฟเช• เชฐเซ€เชคเซ‡ เชฅเซ‹เชกเชพ เชจเชพเชจเชพเชจเซเช‚ เชตเชฐเซเชฃเชจ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹ inline- เชœเซ‡เชตเชพ เช•เชพเชฐเซเชฏเซ‹ flush_icache_range (เชชเชฐเช‚เชคเซ เช† เช…เชฎเชพเชฐเซ‹ เช•เซ‡เชธ เชจเชฅเซ€)

เชซเชพเชˆเชฒ tcg-target.inc.c, เช…เชฒเชฌเชคเซเชค, เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡ เช•เชฆเชฎเชพเช‚ เช˜เชฃเซเช‚ เชฎเซ‹เชŸเซเช‚ เชนเซ‹เชฏ เช›เซ‡ เช…เชจเซ‡ เชคเซ‡เชฎเชพเช‚ เช˜เชฃเชพ เชซเชฐเชœเชฟเชฏเชพเชค เช•เชพเชฐเซเชฏเซ‹ เชนเซ‹เชฏ เช›เซ‡:

  • เชชเซเชฐเชพเชฐเช‚เชญ, เชœเซ‡เชฎเชพเช‚ เชธเซ‚เชšเชจเชพเช“ เช•เชฏเชพ เช“เชชเชฐเซ‡เชจเซเชก เชชเชฐ เช•เชพเชฎ เช•เชฐเซ€ เชถเช•เซ‡ เช›เซ‡ เชคเซ‡เชจเชพ เชชเชฐ เชชเซเชฐเชคเชฟเชฌเช‚เชงเซ‹ เชธเชนเชฟเชค. เชฎเชพเชฐเชพ เชฆเซเชตเชพเชฐเชพ เชฌเซ€เชœเชพ เชฌเซ‡เช•เชเชจเซเชกเชฎเชพเช‚เชฅเซ€ เชธเซเชชเชทเซเชŸเชชเชฃเซ‡ เชจเช•เชฒ เช•เชฐเซ€
  • เชซเช‚เช•เซเชถเชจ เช•เซ‡ เชœเซ‡ เชเช• เช†เช‚เชคเชฐเชฟเช• เชฌเชพเชฏเชŸเซ‡เช•เซ‹เชก เชธเซ‚เชšเชจเชพ เชฒเซ‡ เช›เซ‡
  • เชคเชฎเซ‡ เช…เชนเซ€เช‚ เชธเชนเชพเชฏเช• เช•เชพเชฐเซเชฏเซ‹ เชชเชฃ เชฎเซ‚เช•เซ€ เชถเช•เซ‹ เช›เซ‹, เช…เชจเซ‡ เชคเชฎเซ‡ เชธเซเชฅเชฟเชฐ เช•เชพเชฐเซเชฏเซ‹เชจเซ‹ เชชเชฃ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹ tcg/tcg.c

เชฎเชพเชฐเชพ เชฎเชพเชŸเซ‡, เชฎเซ‡เช‚ เชจเซ€เชšเซ‡เชจเซ€ เชตเซเชฏเซ‚เชนเชฐเชšเชจเชพ เชชเชธเช‚เชฆ เช•เชฐเซ€: เช†เช—เชฒเชพ เช…เชจเซเชตเชพเชฆ เชฌเซเชฒเซ‹เช•เชจเชพ เชชเซเชฐเชฅเชฎ เชถเชฌเซเชฆเซ‹เชฎเชพเช‚, เชฎเซ‡เช‚ เชšเชพเชฐ เชชเซ‹เช‡เชจเซเชŸเชฐ เชฒเช–เซเชฏเชพ: เชเช• เชถเชฐเซ‚เช†เชคเชจเซเช‚ เชšเชฟเชนเซเชจ (เช†เชœเซเชฌเชพเชœเซเชฎเชพเช‚ เชšเซ‹เช•เซเช•เชธ เชฎเซ‚เชฒเซเชฏ 0xFFFFFFFF, เชœเซ‡ เชŸเซ€เชฌเซ€เชจเซ€ เชตเชฐเซเชคเชฎเชพเชจ เชธเซเชฅเชฟเชคเชฟ เชจเช•เซเช•เซ€ เช•เชฐเซ‡ เช›เซ‡), เชธเช‚เชฆเชฐเซเชญ, เชœเชจเชฐเซ‡เชŸ เช•เชฐเซ‡เชฒ เชฎเซ‹เชกเซเชฏเซเชฒ เช…เชจเซ‡ เชกเซ€เชฌเช—เซ€เช‚เช— เชฎเชพเชŸเซ‡ เชฎเซ‡เชœเชฟเช• เชจเช‚เชฌเชฐ. เชชเชนเซ‡เชฒเชพ เชšเชฟเชนเซเชจ เชฎเซ‚เช•เชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚ เชนเชคเซเช‚ 0xFFFFFFFF - nเชœเซเชฏเชพเช‚ n - เชเช• เชจเชพเชจเซ€ เชธเช•เชพเชฐเชพเชคเซเชฎเช• เชธเช‚เช–เซเชฏเชพ, เช…เชจเซ‡ เชฆเชฐเซ‡เช• เชตเช–เชคเซ‡ เชœเซเชฏเชพเชฐเซ‡ เชคเซ‡ เชฆเซเชญเชพเชทเชฟเชฏเชพ เชฆเซเชตเชพเชฐเชพ เชšเชฒเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เชคเซเชฏเชพเชฐเซ‡ เชคเซ‡ 1 เชฆเซเชตเชพเชฐเชพ เชตเชงเซเชฏเซเช‚. เชœเซเชฏเชพเชฐเซ‡ เชคเซ‡ เชชเชนเซ‹เช‚เชšเซเชฏเซเช‚ 0xFFFFFFFE, เชธเช‚เช•เชฒเชจ เชฅเชฏเซเช‚, เชฎเซ‹เชกเซเชฏเซเชฒ เชซเช‚เช•เซเชถเชจ เชŸเซ‡เชฌเชฒเชฎเชพเช‚ เชธเชพเชšเชตเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚, เชจเชพเชจเชพ "เชฒเซ‰เชจเซเชšเชฐ" เชฎเชพเช‚ เช†เชฏเชพเชค เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚, เชœเซ‡เชฎเชพเช‚ เชเช•เซเชเซ‡เช•เซเชฏเซเชถเชจ เชฅเชฏเซเช‚ tcg_qemu_tb_exec, เช…เชจเซ‡ เชฎเซ‹เชกเซเชฏเซเชฒ QEMU เชฎเซ‡เชฎเชฐเซ€เชฎเชพเช‚เชฅเซ€ เชฆเซ‚เชฐ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚ เชนเชคเซเช‚.

เช•เซเชฒเชพเชธเชฟเช•เซเชธเชจเซ‡ เชธเชฎเชœเชพเชตเชตเชพ เชฎเชพเชŸเซ‡, "เช•เซเชฐเชš, เชชเซเชฐเซ‹เช—เชฐเชจเชพ เชนเซƒเชฆเชฏ เชฎเชพเชŸเซ‡ เช† เช…เชตเชพเชœเชฎเชพเช‚ เช•เซ‡เชŸเชฒเซเช‚ เช—เซ‚เช‚เชฅเชพเชฏเซ‡เชฒเซเช‚ เช›เซ‡..." เชœเซ‹ เช•เซ‡, เชธเซเชฎเซƒเชคเชฟ เช•เซเชฏเชพเช‚เช• เชฒเซ€เช• เชฅเชˆ เชฐเชนเซ€ เชนเชคเซ€. เชตเชงเซเชฎเชพเช‚, เชคเซ‡ QEMU เชฆเซเชตเชพเชฐเชพ เชธเช‚เชšเชพเชฒเชฟเชค เชฎเซ‡เชฎเชฐเซ€ เชนเชคเซ€! เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เชเช• เช•เซ‹เชก เชนเชคเซ‹ เช•เซ‡, เชœเซเชฏเชพเชฐเซ‡ เช†เช—เชฒเซ€ เชธเซ‚เชšเชจเชพ (เชธเชพเชฐเซ€ เชฐเซ€เชคเซ‡, เชเชŸเชฒเซ‡ เช•เซ‡, เชเช• เชจเชฟเชฐเซเชฆเซ‡เชถเช•) เชฒเช–เชคเซ€ เชตเช–เชคเซ‡, เชœเซ‡เชจเซ€ เชฒเชฟเช‚เช• เช† เชœเช—เซเชฏเชพเช เชนเชคเซ€ เชคเซ‡ เช•เชพเชขเซ€ เชจเชพเช–เซเชฏเซเช‚, เชชเชฐเช‚เชคเซ เช† เชฎเชฆเชฆ เช•เชฐเซ€ เชถเช•เซเชฏเซเช‚ เชจเชนเซ€เช‚. เช–เชฐเซ‡เช–เชฐ, เชธเซŒเชฅเซ€ เชธเชฐเชณ เช•เชฟเชธเซเชธเชพเชฎเชพเช‚, QEMU เชธเซเชŸเชพเชฐเซเชŸเช…เชช เชตเช–เชคเซ‡ เชฎเซ‡เชฎเชฐเซ€ เชซเชพเชณเชตเซ‡ เช›เซ‡ เช…เชจเซ‡ เชคเซเชฏเชพเช‚ เชœเชจเชฐเซ‡เชŸ เชฅเชฏเซ‡เชฒ เช•เซ‹เชก เชฒเช–เซ‡ เช›เซ‡. เชœเซเชฏเชพเชฐเซ‡ เชฌเชซเชฐ เชธเชฎเชพเชชเซเชค เชฅเชพเชฏ เช›เซ‡, เชคเซเชฏเชพเชฐเซ‡ เช•เซ‹เชก เชซเซ‡เช‚เช•เซ€ เชฆเซ‡เชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ เช…เชจเซ‡ เชชเช›เซ€เชจเซ‹ เช•เซ‹เชก เชคเซ‡เชจเซ€ เชœเช—เซเชฏเชพเช เชฒเช–เชตเชพเชจเซเช‚ เชถเชฐเซ‚ เช•เชฐเซ‡ เช›เซ‡.

เช•เซ‹เชกเชจเซ‹ เช…เชญเซเชฏเชพเชธ เช•เชฐเซเชฏเชพ เชชเช›เซ€, เชฎเชจเซ‡ เชธเชฎเชœเชพเชฏเซเช‚ เช•เซ‡ เชœเชพเชฆเซเชˆ เชจเช‚เชฌเชฐ เชธเชพเชฅเซ‡เชจเซ€ เชฏเซเช•เซเชคเชฟเช เชฎเชจเซ‡ เชชเซเชฐเชฅเชฎ เชชเชพเชธ เชชเชฐ เชฌเชฟเชจ-เชชเซเชฐเชพเชฐเช‚เชญเชฟเช• เชฌเชซเชฐ เชชเชฐ เช•เช‚เชˆเช• เช–เซ‹เชŸเซเช‚ เชฎเซเช•เซเชค เช•เชฐเซ€เชจเซ‡ เชขเช—เชฒเชพ เชตเชฟเชจเชพเชถเชฎเชพเช‚ เชจเชฟเชทเซเชซเชณ เชจ เชฅเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ€. เชชเชฐเช‚เชคเซ เชชเช›เซ€เชฅเซ€ เชฎเชพเชฐเชพ เช•เชพเชฐเซเชฏเชจเซ‡ เชฌเชพเชฏเชชเชพเชธ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชฌเชซเชฐเชจเซ‡ เช•เซ‹เชฃ เชซเชฐเซ€เชฅเซ€ เชฒเช–เซ‡ เช›เซ‡? Emscripten เชตเชฟเช•เชพเชธเช•เชฐเซเชคเชพเช“เชจเซ€ เชธเชฒเชพเชน เชฎเซเชœเชฌ, เชœเซเชฏเชพเชฐเซ‡ เชฎเชจเซ‡ เช•เซ‹เชˆ เชธเชฎเชธเซเชฏเชพ เช†เชตเซ€, เชคเซเชฏเชพเชฐเซ‡ เชฎเซ‡เช‚ เชชเชฐเชฟเชฃเชพเชฎเซ€ เช•เซ‹เชกเชจเซ‡ เชฎเซ‚เชณ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชชเชฐ เชชเชพเช›เซ‹ เชชเซ‹เชฐเซเชŸ เช•เชฐเซเชฏเซ‹, เชคเซ‡เชจเชพ เชชเชฐ Mozilla Record-Replay เชธเซ‡เชŸ เช•เชฐเซเชฏเซ‹... เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡, เช…เช‚เชคเซ‡ เชฎเชจเซ‡ เชเช• เชธเชฐเชณ เชตเชพเชค เชธเชฎเชœเชพเชˆ: เชฆเชฐเซ‡เช• เชฌเซเชฒเซ‹เช• เชฎเชพเชŸเซ‡, a struct TranslationBlock เชคเซ‡เชจเชพ เชตเชฐเซเชฃเชจ เชธเชพเชฅเซ‡. เช…เชจเซเชฎเชพเชจ เช•เชฐเซ‹ เช•เซ‡ เช•เซเชฏเชพเช‚... เชคเซ‡ เชธเชพเชšเซเช‚ เช›เซ‡, เชฌเชซเชฐเชฎเชพเช‚ เชฌเซเชฒเซ‹เช•เชจเซ€ เชฌเชฐเชพเชฌเชฐ เชชเชนเซ‡เชฒเชพเช‚. เช†เชจเซ‡ เชธเชฎเชœเซ€เชจเซ‡, เชฎเซ‡เช‚ เช•เซเชฐเซ‡เชš (เช“เช›เชพเชฎเชพเช‚ เช“เช›เชพ เช•เซ‡เชŸเชฒเชพเช•) เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชจเซเช‚ เช›เซ‹เชกเซ€ เชฆเซ‡เชตเชพเชจเซเช‚ เชจเช•เซเช•เซ€ เช•เชฐเซเชฏเซเช‚, เช…เชจเซ‡ เชซเช•เซเชค เชœเชพเชฆเซเชˆ เชจเช‚เชฌเชฐ เชซเซ‡เช‚เช•เซ€ เชฆเซ€เชงเซ‹, เช…เชจเซ‡ เชฌเชพเช•เซ€เชจเชพ เชถเชฌเซเชฆเซ‹เชจเซ‡ เชŸเซเชฐเชพเชจเซเชธเชซเชฐ เช•เชฐเซ€ เชฆเซ€เชงเชพ. struct TranslationBlock, เชเช•เชฒ เชฒเชฟเช‚เช• เช•เชฐเซ‡เชฒเซ€ เชธเซ‚เชšเชฟ เชฌเชจเชพเชตเชตเซ€ เชœเซ‡ เช…เชจเซเชตเชพเชฆ เช•เซ‡เชถ เชฐเซ€เชธเซ‡เชŸ เชฅเชพเชฏ เชคเซเชฏเชพเชฐเซ‡ เชเชกเชชเชฅเซ€ เชชเชธเชพเชฐ เชฅเชˆ เชถเช•เซ‡ เช›เซ‡, เช…เชจเซ‡ เชฎเซ‡เชฎเชฐเซ€เชจเซ‡ เช–เชพเชฒเซ€ เช•เชฐเซ€ เชถเช•เซ‡ เช›เซ‡.

เช•เซ‡เชŸเชฒเชพเช• เช•เซเชฐเซ‰เชš เชฐเชนเซ‡ เช›เซ‡: เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เช•เซ‹เชก เชฌเชซเชฐเชฎเชพเช‚ เชšเชฟเชนเซเชจเชฟเชค เชชเซ‹เช‡เชจเซเชŸเชฐ - เชคเซ‡เชฎเชพเช‚เชฅเซ€ เช•เซ‡เชŸเชฒเชพเช• เชธเชฐเชณ เช›เซ‡ BinaryenExpressionRef, เชเชŸเชฒเซ‡ เช•เซ‡, เชคเซ‡เช“ เชเชตเชพ เช…เชญเชฟเชตเซเชฏเช•เซเชคเชฟเช“เชจเซ‡ เชœเซเช เช›เซ‡ เช•เซ‡ เชœเซ‡ เชœเชจเชฐเซ‡เชŸ เช•เชฐเซ‡เชฒเชพ เชฎเซ‚เชณเชญเซ‚เชค เชฌเซเชฒเซ‹เช•เชฎเชพเช‚ เชฐเซ‡เช–เซ€เชฏ เชฐเซ€เชคเซ‡ เชฎเซ‚เช•เชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡, เชญเชพเช— เช BBs เชตเชšเซเชšเซ‡ เชธเช‚เช•เซเชฐเชฎเชฃ เชฎเชพเชŸเซ‡เชจเซ€ เชถเชฐเชค เช›เซ‡, เชญเชพเช— เช เช›เซ‡ เช•เซ‡ เช•เซเชฏเชพเช‚ เชœเชตเซเช‚ เช›เซ‡. เช เซ€เช• เช›เซ‡, เชฐเชฟเชฒเซ‚เชชเชฐ เชฎเชพเชŸเซ‡ เชชเชนเซ‡เชฒเซ‡เชฅเซ€ เชœ เชคเซˆเชฏเชพเชฐ เชฌเซเชฒเซ‹เช•เซเชธ เช›เซ‡ เชœเซ‡ เชถเชฐเชคเซ‹ เช…เชจเซเชธเชพเชฐ เช•เชจเซ‡เช•เซเชŸ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡. เชคเซ‡เชฎเชจเซ‡ เช…เชฒเช— เชชเชพเชกเชตเชพ เชฎเชพเชŸเซ‡, เชงเชพเชฐเชฃเชพเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ เช•เซ‡ เชคเซ‡ เชฌเชงเชพ เช“เช›เชพเชฎเชพเช‚ เช“เช›เชพ เชšเชพเชฐ เชฌเชพเช‡เชŸเซเชธ เชฆเซเชตเชพเชฐเชพ เชธเช‚เชฐเซ‡เช–เชฟเชค เช›เซ‡, เชœเซ‡เชฅเซ€ เชคเชฎเซ‡ เชฒเซ‡เชฌเชฒ เชฎเชพเชŸเซ‡ เช“เช›เชพเชฎเชพเช‚ เช“เช›เชพ เชจเซ‹เช‚เชงเชชเชพเชคเซเชฐ เชฌเซ‡ เชฌเชฟเชŸเซเชธเชจเซ‹ เชธเซเชฐเช•เซเชทเชฟเชค เชฐเซ€เชคเซ‡ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เซ‹, เชœเซ‹ เชœเชฐเซ‚เชฐเซ€ เชนเซ‹เชฏ เชคเซ‹ เชคเชฎเชพเชฐเซ‡ เชคเซ‡เชจเซ‡ เชฆเซ‚เชฐ เช•เชฐเชตเชพเชจเซเช‚ เชฏเชพเชฆ เชฐเชพเช–เชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡. เชฎเชพเชฐเซเช— เชฆเซเชตเชพเชฐเชพ, TCG เชฒเซ‚เชชเชฎเชพเช‚เชฅเซ€ เชฌเชนเชพเชฐ เชจเซ€เช•เชณเชตเชพเชจเซเช‚ เช•เชพเชฐเชฃ เชธเซ‚เชšเชตเชตเชพ เชฎเชพเชŸเซ‡ QEMU เชฎเชพเช‚ เช†เชตเชพ เชฒเซ‡เชฌเชฒเซเชธ เชชเชนเซ‡เชฒเซ‡เชฅเซ€ เชœ เช‰เชชเชฏเซ‹เช—เชฎเชพเช‚ เชฒเซ‡เชตเชพเชฏ เช›เซ‡.

Binaryen เชฎเชฆเชฆเชฅเซ€

WebAssembly เชฎเชพเช‚ เชฎเซ‹เชกเซเชฏเซเชฒเซเชธ เชซเช‚เช•เซเชถเชจ เชงเชฐเชพเชตเซ‡ เช›เซ‡, เชœเซ‡เชฎเชพเช‚เชจเชพ เชฆเชฐเซ‡เช•เชฎเชพเช‚ เชเช• เชฌเซ‹เชกเซ€ เชนเซ‹เชฏ เช›เซ‡, เชœเซ‡ เชเช• เช…เชญเชฟเชตเซเชฏเช•เซเชคเชฟ เช›เซ‡. เช…เชญเชฟเชตเซเชฏเช•เซเชคเชฟเช“ เช เชฏเซเชจเชฐเซ€ เช…เชจเซ‡ เชฆเซเชตเชฟเชธเช‚เช—เซ€ เช•เซเชฐเชฟเชฏเชพเช“ เช›เซ‡, เช…เชจเซเชฏ เช…เชญเชฟเชตเซเชฏเช•เซเชคเชฟเช“, เชจเชฟเชฏเช‚เชคเซเชฐเชฃ เชชเซเชฐเชตเชพเชน, เชตเช—เซ‡เชฐเซ‡เชจเซ€ เชธเซ‚เชšเชฟ เชงเชฐเชพเชตเชคเชพ เชฌเซเชฒเซ‹เช•เซเชธ. เชฎเซ‡เช‚ เชชเชนเซ‡เชฒเซ‡เชฅเซ€ เชœ เช•เชนเซเชฏเซเช‚ เชคเซ‡เชฎ, เชจเชฟเชฏเช‚เชคเซเชฐเชฃ เชชเซเชฐเชตเชพเชน เช…เชนเซ€เช‚ เช‰เชšเซเชš-เชธเซเชคเชฐเชจเซ€ เชถเชพเช–เชพเช“, เชฒเซ‚เชชเซเชธ, เชซเช‚เช•เซเชถเชจ เช•เซ‰เชฒเซเชธ, เชตเช—เซ‡เชฐเซ‡ เชคเชฐเซ€เช•เซ‡ เชšเซ‹เช•เซเช•เชธ เชฐเซ€เชคเซ‡ เช—เซ‹เช เชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เชซเช‚เช•เซเชถเชจ เชฎเชพเชŸเซ‡ เชฆเชฒเซ€เชฒเซ‹ เชธเซเชŸเซ‡เช• เชชเชฐ เชชเชธเชพเชฐ เชฅเชคเซ€ เชจเชฅเซ€, เชชเชฐเช‚เชคเซ เชธเซเชชเชทเซเชŸ เชฐเซ€เชคเซ‡, JS เชจเซ€ เชœเซ‡เชฎ. เชคเซเชฏเชพเช‚ เชตเซˆเชถเซเชตเชฟเช• เชšเชฒเซ‹ เชชเชฃ เช›เซ‡, เชชเชฐเช‚เชคเซ เชฎเซ‡เช‚ เชคเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซเชฏเซ‹ เชจเชฅเซ€, เชคเซ‡เชฅเซ€ เชนเซเช‚ เชคเชฎเชจเซ‡ เชคเซ‡เชฎเชจเชพ เชตเชฟเชถเซ‡ เช•เชนเซ€เชถ เชจเชนเซ€เช‚.

เชซเช‚เช•เซเชถเชจเซเชธเชฎเชพเช‚ เชธเซเชฅเชพเชจเชฟเช• เชšเชฒ เชชเชฃ เชนเซ‹เชฏ เช›เซ‡, เชœเซ‡ เชถเซ‚เชจเซเชฏเชฎเชพเช‚เชฅเซ€ เชจเช‚เชฌเชฐ เช†เชชเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เชชเซเชฐเช•เชพเชฐเชจเซเช‚: int32 / int64 / float / double. เช† เช•เชฟเชธเซเชธเชพเชฎเชพเช‚, เชชเซเชฐเชฅเชฎ n เชธเซเชฅเชพเชจเชฟเช• เชšเชฒ เช เชซเช‚เช•เซเชถเชจเชฎเชพเช‚ เชชเชธเชพเชฐ เช•เชฐเชพเชฏเซ‡เชฒเซ€ เชฆเชฒเซ€เชฒเซ‹ เช›เซ‡. เชฎเชนเซ‡เชฐเชฌเชพเชจเซ€ เช•เชฐเซ€เชจเซ‡ เชจเซ‹เช‚เชง เช•เชฐเซ‹ เช•เซ‡ เชจเชฟเชฏเช‚เชคเซเชฐเชฃ เชชเซเชฐเชตเชพเชนเชจเซ€ เชฆเซเชฐเชทเซเชŸเชฟเช เช…เชนเซ€เช‚ เชฌเชงเซเช‚ เชธเช‚เชชเซ‚เชฐเซเชฃเชชเชฃเซ‡ เชจเชฟเชฎเซเชจ-เชธเซเชคเชฐเชจเซเช‚ เชจเชฅเซ€, เชคเซ‡เชฎ เช›เชคเชพเช‚, เชชเซ‚เชฐเซเชฃเชพเช‚เช•เซ‹ เชนเชœเซ€ เชชเชฃ "เชธเชนเซ€ เช•เชฐเซ‡เชฒ/เชธเชนเซ€ เช•เชฐเซ‡เชฒ" เชตเชฟเชถเซ‡เชทเชคเชพ เชงเชฐเชพเชตเชคเชพ เชจเชฅเซ€: เชธเช‚เช–เซเชฏเชพ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชตเชฐเซเชคเซ‡ เช›เซ‡ เชคเซ‡ เช‘เชชเชฐเซ‡เชถเชจ เช•เซ‹เชก เชชเชฐ เช†เชงเชพเชฐเชฟเชค เช›เซ‡.

เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡ เช•เชนเซ€เช เชคเซ‹, Binaryen เชชเซ‚เชฐเซ€ เชชเชพเชกเซ‡ เช›เซ‡ เชธเชฐเชณ C-API: เชคเชฎเซ‡ เชฎเซ‹เชกเซเชฏเซเชฒ เชฌเชจเชพเชตเซ‹ เช›เซ‹, เชคเซ‡เชจเชพเชฎเชพเช‚ เช…เชญเชฟเชตเซเชฏเช•เซเชคเชฟเช“ เชฌเชจเชพเชตเซ‹ - เชฏเซเชจเชฐเซ€, เชฆเซเชตเชฟเชธเช‚เช—เซ€, เช…เชจเซเชฏ เช…เชญเชฟเชตเซเชฏเช•เซเชคเชฟเช“เชฎเชพเช‚เชฅเซ€ เชฌเซเชฒเซ‹เช•เซเชธ, เชจเชฟเชฏเช‚เชคเซเชฐเชฃ เชชเซเชฐเชตเชพเชน, เชตเช—เซ‡เชฐเซ‡. เชชเช›เซ€ เชคเชฎเซ‡ เชคเซ‡เชจเชพ เชถเชฐเซ€เชฐ เชคเชฐเซ€เช•เซ‡ เช…เชญเชฟเชตเซเชฏเช•เซเชคเชฟ เชธเชพเชฅเซ‡ เช•เชพเชฐเซเชฏ เชฌเชจเชพเชตเซ‹. เชœเซ‹ เชคเชฎเซ‡, เชฎเชพเชฐเซ€ เชœเซ‡เชฎ, เชจเซ€เชšเชพ-เชธเซเชคเชฐเชจเชพ เชธเช‚เช•เซเชฐเชฎเชฃ เช—เซเชฐเชพเชซ เชงเชฐเชพเชตเซ‹ เช›เซ‹, เชคเซ‹ เชฐเชฟเชฒเซ‚เชชเชฐ เช˜เชŸเช• เชคเชฎเชจเซ‡ เชฎเชฆเชฆ เช•เชฐเชถเซ‡. เชœเซเชฏเชพเช‚ เชธเซเชงเซ€ เชนเซเช‚ เชธเชฎเชœเซเช‚ เช›เซเช‚, เชฌเซเชฒเซ‹เช•เชฎเชพเช‚ เช…เชฎเชฒเชจเชพ เชชเซเชฐเชตเชพเชนเชจเชพ เช‰เชšเซเชš-เชธเซเชคเชฐเชจเชพ เชจเชฟเชฏเช‚เชคเซเชฐเชฃเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเซ‹ เชถเช•เซเชฏ เช›เซ‡, เชœเซเชฏเชพเช‚ เชธเซเชงเซ€ เชคเซ‡ เชฌเซเชฒเซ‹เช•เชจเซ€ เชธเซ€เชฎเชพเช“เชฅเซ€ เช†เช—เชณ เชจ เชœเชพเชฏ - เชเชŸเชฒเซ‡ เช•เซ‡, เช†เช‚เชคเชฐเชฟเช• เชเชกเชชเซ€ เชชเชพเชฅ / เชงเซ€เชฎเซ‹ เชฌเชจเชพเชตเชตเชพเชจเซเช‚ เชถเช•เซเชฏ เช›เซ‡. เชฌเชฟเชฒเซเชŸ-เช‡เชจ TLB เช•เซ‡เชถ เชชเซเชฐเซ‹เชธเซ‡เชธเชฟเช‚เช— เช•เซ‹เชกเชจเซ€ เช…เช‚เชฆเชฐ เชชเชพเชฅ เชฌเซเชฐเชพเชจเซเชšเชฟเช‚เช—, เชชเชฐเช‚เชคเซ "เชฌเชพเชนเซเชฏ" เชจเชฟเชฏเช‚เชคเซเชฐเชฃ เชชเซเชฐเชตเชพเชนเชฎเชพเช‚ เชฆเช–เชฒ เชจ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡. เชœเซเชฏเชพเชฐเซ‡ เชคเชฎเซ‡ เชฐเชฟเชฒเซ‚เชชเชฐเชจเซ‡ เชฎเซเช•เซเชค เช•เชฐเซ‹ เช›เซ‹, เชคเซเชฏเชพเชฐเซ‡ เชคเซ‡เชจเชพ เชฌเซเชฒเซ‹เช•เซเชธ เชฎเซเช•เซเชค เชฅเชพเชฏ เช›เซ‡; เชœเซเชฏเชพเชฐเซ‡ เชคเชฎเซ‡ เชฎเซ‹เชกเซเชฏเซเชฒเชจเซ‡ เชฎเซเช•เซเชค เช•เชฐเซ‹ เช›เซ‹, เชคเซเชฏเชพเชฐเซ‡ เชคเซ‡เชจเซ‡ เชซเชพเชณเชตเซ‡เชฒ เช…เชญเชฟเชตเซเชฏเช•เซเชคเชฟเช“, เช•เชพเชฐเซเชฏเซ‹ เชตเช—เซ‡เชฐเซ‡ เช…เชฆเซƒเชถเซเชฏ เชฅเชˆ เชœเชพเชฏ เช›เซ‡. เช…เช–เชพเชกเซ‹.

เชœเซ‹ เช•เซ‡, เชœเซ‹ เชคเชฎเซ‡ เช•เซ‹เชˆ เชฆเซเชญเชพเชทเชฟเชฏเชพเชจเชพ เชฆเชพเช–เชฒเชพเชจเซ‡ เชฌเชฟเชจเชœเชฐเซ‚เชฐเซ€ เชฌเชจเชพเชตเชŸ เช…เชจเซ‡ เช•เชพเชขเซ€ เชจเชพเช–เซเชฏเชพ เชตเชฟเชจเชพ เชซเซเชฒเชพเชฏ เชชเชฐ เช•เซ‹เชกเชจเซเช‚ เช…เชฐเซเชฅเช˜เชŸเชจ เช•เชฐเชตเชพ เชฎเชพเช‚เช—เชคเชพ เชนเซ‹, เชคเซ‹ เช† เชคเชฐเซเช•เชจเซ‡ C++ เชซเชพเช‡เชฒเชฎเชพเช‚ เชฎเซ‚เช•เชตเชพเชจเซ‹ เช…เชฐเซเชฅ เชฅเชˆ เชถเช•เซ‡ เช›เซ‡, เช…เชจเซ‡ เชคเซเชฏเชพเช‚เชฅเซ€ เชฒเชพเช‡เชฌเซเชฐเซ‡เชฐเซ€เชจเชพ เชธเชฎเช—เซเชฐ C++ APIเชจเซเช‚ เชธเซ€เชงเซเช‚ เชธเช‚เชšเชพเชฒเชจ เช•เชฐเซ€เชจเซ‡ เชคเซˆเชฏเชพเชฐ- เชฌเชพเชฏเชชเชพเชธ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹. เช†เชตเชฐเชฃเซ‹ เชฌเชจเชพเชตเซเชฏเชพ.

เชคเซ‡เชฅเซ€ เชคเชฎเชจเซ‡ เชœเชฐเซ‚เชฐเซ€ เช•เซ‹เชก เชœเชจเชฐเซ‡เชŸ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡

// ะฝะฐัั‚ั€ะพะธั‚ัŒ ะณะปะพะฑะฐะปัŒะฝั‹ะต ะฟะฐั€ะฐะผะตั‚ั€ั‹ (ะผะพะถะฝะพ ะฟะพะผะตะฝัั‚ัŒ ะฟะพั‚ะพะผ)
BinaryenSetAPITracing(0);

BinaryenSetOptimizeLevel(3);
BinaryenSetShrinkLevel(2);

// ัะพะทะดะฐั‚ัŒ ะผะพะดัƒะปัŒ
BinaryenModuleRef MODULE = BinaryenModuleCreate();

// ะพะฟะธัะฐั‚ัŒ ั‚ะธะฟั‹ ั„ัƒะฝะบั†ะธะน (ะบะฐะบ ัะพะทะดะฐะฒะฐะตะผั‹ั…, ั‚ะฐะบ ะธ ะฒั‹ะทั‹ะฒะฐะตะผั‹ั…)
helper_type  BinaryenAddFunctionType(MODULE, "helper-func", BinaryenTypeInt32(), int32_helper_args, ARRAY_SIZE(int32_helper_args));
// (int23_helper_args ะฟั€ะธะพะฑ^WัะพะทะดะฐัŽั‚ัั ะพั‚ะดะตะปัŒะฝะพ)

// ัะบะพะฝัั‚ั€ัƒะธั€ะพะฒะฐั‚ัŒ ััƒะฟะตั€-ะผะตะณะฐ ะฒั‹ั€ะฐะถะตะฝะธะต
// ... ะฝัƒ ั‚ัƒั‚ ัƒะถ ะฒั‹ ะบะฐะบ-ะฝะธะฑัƒะดัŒ ัะฐะผะธ :)

// ะฟะพั‚ะพะผ ัะพะทะดะฐั‚ัŒ ั„ัƒะฝะบั†ะธัŽ
BinaryenAddFunction(MODULE, "tb_fun", tb_func_type, func_locals, FUNC_LOCALS_COUNT, expr);
BinaryenAddFunctionExport(MODULE, "tb_fun", "tb_fun");
...
BinaryenSetMemory(MODULE, (1 << 15) - 1, -1, NULL, NULL, NULL, NULL, NULL, 0, 0);
BinaryenAddMemoryImport(MODULE, NULL, "env", "memory", 0);
BinaryenAddTableImport(MODULE, NULL, "env", "tb_funcs");

// ะทะฐะฟั€ะพัะธั‚ัŒ ะฒะฐะปะธะดะฐั†ะธัŽ ะธ ะพะฟั‚ะธะผะธะทะฐั†ะธัŽ ะฟั€ะธ ะถะตะปะฐะฝะธะธ
assert (BinaryenModuleValidate(MODULE));
BinaryenModuleOptimize(MODULE);

... เชœเซ‹ เชนเซเช‚ เช•เช‚เชˆเชชเชฃ เชญเซ‚เชฒเซ€ เช—เชฏเซ‹ เชนเซ‹, เชคเซ‹ เชฎเชพเชซ เช•เชฐเชถเซ‹, เช† เชฎเชพเชคเซเชฐ เชธเซเช•เซ‡เชฒเชจเซ‡ เชฐเชœเซ‚ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช›เซ‡, เช…เชจเซ‡ เชตเชฟเช—เชคเซ‹ เชฆเชธเซเชคเชพเชตเซ‡เชœเซ€เช•เชฐเชฃเชฎเชพเช‚ เช›เซ‡.

เช…เชจเซ‡ เชนเชตเซ‡ เช•เซเชฐเซ‡เช•-เชซเซ‡เช•เซเชธ-เชชเซ‡เช•เซเชธ เชถเชฐเซ‚ เชฅเชพเชฏ เช›เซ‡, เช•เช‚เชˆเช• เช†เชจเชพ เชœเซ‡เชตเซเช‚:

static char buf[1 << 20];
BinaryenModuleOptimize(MODULE);
BinaryenSetMemory(MODULE, 0, -1, NULL, NULL, NULL, NULL, NULL, 0, 0);
int sz = BinaryenModuleWrite(MODULE, buf, sizeof(buf));
BinaryenModuleDispose(MODULE);
EM_ASM({
  var module = new WebAssembly.Module(new Uint8Array(wasmMemory.buffer, $0, $1));
  var fptr = $2;
  var instance = new WebAssembly.Instance(module, {
      'env': {
          'memory': wasmMemory,
          // ...
      }
  );
  // ะธ ะฒะพั‚ ัƒะถะต ัƒ ะฒะฐั ะตัั‚ัŒ instance!
}, buf, sz);

QEMU เช…เชจเซ‡ JS เชจเซ€ เชฆเซเชจเชฟเชฏเชพเชจเซ‡ เช•เซ‹เชˆเช• เชฐเซ€เชคเซ‡ เช•เชจเซ‡เช•เซเชŸ เช•เชฐเชตเชพ เช…เชจเซ‡ เชคเซ‡ เชœ เชธเชฎเชฏเซ‡ เชธเช‚เช•เชฒเชฟเชค เช•เชพเชฐเซเชฏเซ‹เชจเซ‡ เชเชกเชชเชฅเซ€ เชเช•เซเชธเซ‡เชธ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชเช• เชเชฐเซ‡ เชฌเชจเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เชนเชคเซ€ (เชฒเซ‰เชจเซเชšเชฐเชฎเชพเช‚ เช†เชฏเชพเชค เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡เชจเชพ เช•เชพเชฐเซเชฏเซ‹เชจเซเช‚ เช•เซ‹เชทเซเชŸเช•), เช…เชจเซ‡ เชœเชจเชฐเซ‡เชŸ เช•เชฐเซ‡เชฒเชพ เช•เชพเชฐเซเชฏเซ‹ เชคเซเชฏเชพเช‚ เชฎเซ‚เช•เชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเชพ เชนเชคเชพ. เช…เชจเซเช•เซเชฐเชฎเชฃเชฟเช•เชพเชจเซ€ เชเชกเชชเชฅเซ€ เช—เชฃเชคเชฐเซ€ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชถเซ‚เชจเซเชฏ เชถเชฌเซเชฆ เช…เชจเซเชตเชพเชฆ เชฌเซเชฒเซ‹เช•เชจเซ€ เช…เชจเซเช•เซเชฐเชฎเชฃเชฟเช•เชพเชจเซ‹ เชชเซเชฐเชพเชฐเช‚เชญเชฎเชพเช‚ เชคเซ‡เชจเชพ เชคเชฐเซ€เช•เซ‡ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซ‹ เชนเชคเซ‹, เชชเชฐเช‚เชคเซ เชชเช›เซ€ เช† เชธเซ‚เชคเซเชฐเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เช—เชฃเชคเชฐเซ€ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡เชฒ เช…เชจเซเช•เซเชฐเชฎเชฃเชฟเช•เชพ เชซเช•เซเชค เชซเซ€เชฒเซเชกเชฎเชพเช‚ เชซเชฟเชŸ เชฅเชตเชพ เชฒเชพเช—เซ€. struct TranslationBlock.

เชฎเชพเชฐเซเช— เชฆเซเชตเชพเชฐเชพ, เชกเซ‡เชฎเซ‹ (เชนเชพเชฒเชฎเชพเช‚ เช…เชธเซเชชเชทเซเชŸ เชฒเชพเช‡เชธเชจเซเชธ เชธเชพเชฅเซ‡) เชฎเชพเชคเซเชฐ เชซเชพเชฏเชฐเชซเซ‹เช•เซเชธเชฎเชพเช‚ เชธเชพเชฐเซเช‚ เช•เชพเชฎ เช•เชฐเซ‡ เช›เซ‡. เช•เซเชฐเซ‹เชฎ เชกเซ‡เชตเชฒเชชเชฐเซเชธ เชนเชคเชพ เช•เซ‹เชˆเช• เชฐเซ€เชคเซ‡ เชคเซˆเชฏเชพเชฐ เชจเชฅเซ€ เชนเช•เซ€เช•เชค เช เช›เซ‡ เช•เซ‡ เช•เซ‹เชˆ เชตเซเชฏเช•เซเชคเชฟ WebAssembly เชฎเซ‹เชกเซเชฏเซเชฒเซ‹เชจเชพ เชเช• เชนเชœเชพเชฐ เช•เชฐเชคเชพเช‚ เชตเชงเซ เช‰เชฆเชพเชนเชฐเชฃเซ‹ เชฌเชจเชพเชตเชตเชพ เชฎเชพเช‚เช—เซ‡ เช›เซ‡, เชคเซ‡เชฅเซ€ เชคเซ‡เชฃเซ‡ เชฆเชฐเซ‡เช• เชฎเชพเชŸเซ‡ เชตเชฐเซเชšเซเชฏเซเช…เชฒ เชธเชฐเชจเชพเชฎเชพเช‚เชจเซ€ เชœเช—เซเชฏเชพเชจเซ€ เชเช• เช—เซ€เช—เชพเชฌเชพเชˆเชŸ เชซเชพเชณเชตเซ€ เช›เซ‡...

เชนเชฎเชฃเชพเช‚ เชฎเชพเชŸเซ‡ เชเชŸเชฒเซเช‚ เชœ. เชœเซ‹ เช•เซ‹เชˆเชจเซ‡ เชฐเชธ เชนเซ‹เชฏ เชคเซ‹ เช•เชฆเชพเชš เชฌเซ€เชœเซ‹ เชฒเซ‡เช– เชนเชถเซ‡. เชเชŸเชฒเซ‡ เช•เซ‡, เชคเซเชฏเชพเช‚ เช“เช›เชพเชฎเชพเช‚ เช“เช›เชพ เชฐเชนเซ‡ เช›เซ‡ เชฎเชพเชคเซเชฐ เชฌเซเชฒเซ‹เช• เช‰เชชเช•เชฐเชฃเซ‹ เช•เชพเชฎ เช•เชฐเซ‡ เช›เซ‡. เชตเซ‡เชฌ เชเชธเซ‡เชฎเซเชฌเชฒเซ€ เชฎเซ‹เชกเซเชฏเซเชฒเซเชธเชจเชพ เชธเช‚เช•เชฒเชจเชจเซ‡ เช…เชธเซเชฎเซ‡เชณ เชฌเชจเชพเชตเชตเชพเชจเซ‹ เชชเชฃ เช…เชฐเซเชฅ เชฅเชˆ เชถเช•เซ‡ เช›เซ‡, เชœเซ‡เชฎ เช•เซ‡ JS เชตเชฟเชถเซเชตเชฎเชพเช‚ เชชเซเชฐเชšเชฒเชฟเชค เช›เซ‡, เช•เชพเชฐเชฃ เช•เซ‡ เชคเซเชฏเชพเช‚ เชนเชœเซ เชชเชฃ เชเช• เชฆเซเชญเชพเชทเชฟเชฏเชพ เช›เซ‡ เชœเซ‡ เชฎเซ‚เชณ เชฎเซ‹เชกเซเชฏเซเชฒ เชคเซˆเชฏเชพเชฐ เชจ เชฅเชพเชฏ เชคเซเชฏเชพเช‚ เชธเซเชงเซ€ เช† เชฌเชงเซเช‚ เช•เชฐเซ€ เชถเช•เซ‡ เช›เซ‡.

เช›เซ‡เชฒเซเชฒเซ‡ เชเช• เช•เซ‹เชฏเชกเซ‹: เชคเชฎเซ‡ 32-เชฌเซ€เชŸ เช†เชฐเซเช•เชฟเชŸเซ‡เช•เซเชšเชฐ เชชเชฐ เชฌเชพเชˆเชจเชฐเซ€ เช•เชฎเซเชชเชพเชˆเชฒ เช•เชฐเซ€ เช›เซ‡, เชชเชฐเช‚เชคเซ เช•เซ‹เชก, เชฎเซ‡เชฎเชฐเซ€ เช“เชชเชฐเซ‡เชถเชจเซเชธ เชฆเซเชตเชพเชฐเชพ, เชฌเชพเชˆเชจเชฐเซ€เชจเชฅเซ€, เชธเซเชŸเซ‡เช• เชชเชฐ เช•เซเชฏเชพเช‚เช• เช…เชฅเชตเชพ 2-เชฌเซ€เชŸ เชเชกเซเชฐเซ‡เชธ เชธเซเชชเซ‡เชธเชจเชพ เช‰เชชเชฒเชพ 32 เชœเซ€เชฌเซ€เชฎเชพเช‚ เชฌเซ€เชœเซ‡ เช•เซเชฏเชพเช‚เช• เชšเชขเซ‡ เช›เซ‡. เชธเชฎเชธเซเชฏเชพ เช เช›เซ‡ เช•เซ‡ เชฌเชพเชˆเชจเชฐเซ€เชจเชจเชพ เชฆเซƒเชทเซเชŸเชฟเช•เซ‹เชฃเชฅเซ€ เช† เชชเชฐเชฟเชฃเชพเชฎเซ€ เชธเชฐเชจเชพเชฎเซเช‚ เช–เซ‚เชฌ เชฎเซ‹เชŸเซเช‚ เช›เซ‡. เช†เชจเซ€ เช†เชธเชชเชพเชธ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฎเซ‡เชณเชตเชตเซเช‚?

เชเชกเชฎเชฟเชจ เชจเซ€ เชฐเซ€เชคเซ‡

เชฎเซ‡เช‚ เช†เชจเซเช‚ เชชเชฐเซ€เช•เซเชทเชฃ เช•เชฐเชตเชพเชจเซเช‚ เชธเชฎเชพเชชเซเชค เช•เชฐเซเชฏเซเช‚ เชจเชฅเซ€, เชชเชฐเช‚เชคเซ เชฎเชพเชฐเซ‹ เชชเซเชฐเชฅเชฎ เชตเชฟเชšเชพเชฐ เช เชนเชคเซ‹ เช•เซ‡ "เชœเซ‹ เชนเซเช‚ 32-เชฌเซ€เชŸ Linux เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเซเช‚ เชคเซ‹ เชถเซเช‚?" เชชเช›เซ€ เชเชกเซเชฐเซ‡เชธ เชธเซเชชเซ‡เชธเชจเซ‹ เช‰เชชเชฐเชจเซ‹ เชญเชพเช— เช•เชฐเซเชจเชฒ เชฆเซเชตเชพเชฐเชพ เช•เชฌเชœเซ‡ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡. เชเช•เชฎเชพเชคเซเชฐ เชชเซเชฐเชถเซเชจ เช เช›เซ‡ เช•เซ‡ เช•เซ‡เชŸเชฒเซ‹ เช•เชฌเชœเซ‹ เชฒเซ‡เชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡: 1 เช…เชฅเชตเชพ 2 Gb.

เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชฐเชจเซ€ เชฐเซ€เชคเซ‡ (เชชเซเชฐเซ‡เช•เซเชŸเชฟเชถเชจเชฐเซ‹ เชฎเชพเชŸเซ‡ เชตเชฟเช•เชฒเซเชช)

เชšเชพเชฒเซ‹ เชธเชฐเชจเชพเชฎเชพเชจเซ€ เชœเช—เซเชฏเชพเชจเซ€ เชŸเซ‹เชš เชชเชฐ เชเช• เชฌเชฌเชฒ เช‰เชกเชพเชตเซ€เช. เชนเซเช‚ เชฎเชพเชฐเซ€ เชœเชพเชคเชจเซ‡ เชธเชฎเชœเซ€ เชถเช•เชคเซ‹ เชจเชฅเซ€ เช•เซ‡ เชคเซ‡ เชถเชพ เชฎเชพเชŸเซ‡ เช•เชพเชฎ เช•เชฐเซ‡ เช›เซ‡ - เชคเซเชฏเชพเช‚ เชชเชนเซ‡เชฒเซ‡เชฅเซ€ เชเช• เชธเซเชŸเซ‡เช• เชนเซ‹เชตเซ‹ เชœเซ‹เชˆเช. เชชเชฐเช‚เชคเซ "เช…เชฎเซ‡ เชชเซเชฐเซ‡เช•เซเชŸเชฟเชถเชจเชฐเซเชธ เช›เซ€เช: เชฌเชงเซเช‚ เช†เชชเชฃเชพ เชฎเชพเชŸเซ‡ เช•เชพเชฎ เช•เชฐเซ‡ เช›เซ‡, เชชเชฐเช‚เชคเซ เช•เซ‹เชˆเชจเซ‡ เช–เชฌเชฐ เชจเชฅเซ€ เช•เซ‡ เชถเชพ เชฎเชพเชŸเซ‡..."

// 2gbubble.c
// Usage: LD_PRELOAD=2gbubble.so <program>

#include <sys/mman.h>
#include <assert.h>

void __attribute__((constructor)) constr(void)
{
  assert(MAP_FAILED != mmap(1u >> 31, (1u >> 31) - (1u >> 20), PROT_NONE, MAP_ANONYMOUS | MAP_PRIVATE, -1, 0));
}

... เชคเซ‡ เชธเชพเชšเซเช‚ เช›เซ‡ เช•เซ‡ เชคเซ‡ Valgrind เชธเชพเชฅเซ‡ เชธเซเชธเช‚เช—เชค เชจเชฅเซ€, เชชเชฐเช‚เชคเซ, เชธเชฆเชญเชพเช—เซเชฏเซ‡, Valgrind เชชเซ‹เชคเซ‡ เช–เซ‚เชฌ เชœ เช…เชธเชฐเช•เชพเชฐเช• เชฐเซ€เชคเซ‡ เชฆเชฐเซ‡เช•เชจเซ‡ เชคเซเชฏเชพเช‚เชฅเซ€ เชฌเชนเชพเชฐ เชงเช•เซ‡เชฒเซ‡ เช›เซ‡ :)

เช•เชฆเชพเชš เช•เซ‹เชˆ เช† เชฎเชพเชฐเซ‹ เช•เซ‹เชก เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช•เชพเชฐเซเชฏ เช•เชฐเซ‡ เช›เซ‡ เชคเซ‡เชจเชพ เชตเชฟเชถเซ‡ เชตเชงเซ เชธเชพเชฐเซ€ เชธเชฎเชœเซ‚เชคเซ€ เช†เชชเชถเซ‡...

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹