××× ×¢×××¢××¢ ××֞ך ׊×ך×ק, Fabrice Bellard
- ×Öž×€Ö¿× ×ק×ך
- ×€×××ק××× ×Š× ×ַך××¢×× ×Öž× ×Ö· ×§×¢×š× ×©×֞׀עך
- ×€×××ק××× ×Š× ×ַך××¢×× ××× ××עך×ע׊עך ××Öž××¢
- ש×××Š× ×€Ö¿×ַך ×Ö· ×ך××ס × ××עך ×€×× ××Ö·××¢××֞ס ××× ××Ö·×¡× ×ַךק×Ö·×עק×שעך×
×××¢×× ×× ×ך×× ×€×× ×, ××× ×§×¢× ×¢× ×××Š× ×עךק××¢×š× ×Ö·× ××× ×€×ַק×, ××× TCI ××Öž××¢, עס ××× × ××©× ×× ××Ö·×¡× ××ַש×× ××× ×¡×ך×ק׊×עס ××× ×××֞ס ××¢× ×¢× ×× ×עך׀֌ך×Ö·××Ö·×, ×Öž×עך ×× ×××עק×Öž××¢ ××ק×××¢× ×€×× ×××, ×Öž×עך ××֞ס ××× × ××©× ××××©× ×× ×¢×¡×Ö·× ×¡ - ×Š× ××××¢× ××× ××××€× ×§×× ××××£ ×Ö· × ××Ö·×¢ ×ַךק×Ö·×עק×שעך, ×××× ××ך ××Öž× ××Ö·××××ק, ×Ö· C ק×Ö·××€ÖŒ×××עך ××× ××¢× ×× - שך×××× ×Ö· ק×Öž× ××¢× ×¢×š×Ö·××֞ך ×§×¢× ×¢× ×××× ×€ÖŒ×Öž×ס××€ÖŒ×Öž×× ×.
××× ××׊×, × ×Öž× ×Š×××× ××֞ך ×€×× ×××עך×× ××× ×ק×× × ××× ×× ×§×¢×× ×ק×ך ק×Öž× ××× ×××× ×€×š×× ×Š×××, ×Ö· ×ך××¢×× ×€ÖŒ×š×Öž×××Ö·××××€ÖŒ ×ך××ס, ××× ×××֞ס ××ך ×§×¢× ×¢× ×©××× ××××€×, ××ש×, ק×Öž××××š× ×ַס.
×××֞ס ××× Emscripten
× ×Öž×××Ö·×××ַס, ×€×××¢ ק×Öž××€ÖŒ××עךס ××Öž×× ×ך××ס, ×עך ס××£ ךע×××××Ö·× ×€×× ×××֞ס ××× ××ש×Ö·×××ַסקך××€ÖŒ×. ×¢×××¢××¢, ××× ×××€ÖŒ סקך××€ÖŒ×, ××¢× ×¢× ×¢×š××××©× ×Ö·×× ×××¢× ×Š× ×××× ×עך ×עס×עך ×××¢× ×Š× ×©×š××Ö·×× ×€Ö¿×ַך ×× ×××¢×. ××× ×עך ××¢×××קעך ׊×××, Emscripten ××× ×Ö· ×××¢× ×Š× × ×¢××¢× ××××ס××× × C ×Öž×עך C ++ ק×Öž× ××× ×Š×× ×××€× ×¢××¢× ×¢×¡ ××× ×Ö· ×××¢×עךעך-××××¢× ×¢× ×€×֞ךע×. ××××£
עךש×עך ׀֌ך×××ך×
××× ×Ö·×××¢××××, ××× ××× × ××©× ×עך עךש×עך ××¢× ×ש ×Š× ×§×××¢× ×ַך×××£ ××× ××¢× ××¢××Ö·× ×§ ×€×× ×ַך××עך׀××š× ×§×¢×× ×Š× ××ש×Ö·×××ַסקך××€ÖŒ×. עס ××× ××¢×××¢× ×Ö· קש×× ××××£ ×× ReactOS ×€×֞ך×× ×××× ××֞ס ××× ××¢×××¢× × ××Š× Emscripten. ××€××× ×€×š×עך, עס ××¢× ×¢× ××¢×××¢× ×š×××֞ךס ×Ö·× Fabrice Bellard ××× ××֞ס ×€ÖŒ×¢×š×¡× ×Ö·××, ×Öž×עך ××ך ××Öž×× ×עךע×× ×××¢×× jslinux, ×××֞ס, ××× ××××Ö·× ××× ××× ×××ס×, ××× × ×֞ך ×Ö·× ×€ÖŒ×š×××× ×Š× ××Ö·× ×××Ö·×× ×עך×ך×××× ××¢× ×× ×€×֞ךש××¢××× × ××× JS, ××× ××× ×עשך××× ×€Ö¿×× ×§×š×ַ׊×. ש׀֌ע×עך, ×××ך×××Ö·× ×§×¡ 86 ××× ××¢×××¢× ×עשך××× - ×Ö·× ×Ö·××€×סק××××× ×§××××× ××¢× ×¢× ×ַך××Ö·× ×עש××§× ×€Ö¿×ַך עס, ×××, ××× ×¡××××××, ×× ×ךעסעךע "ךע×Ö·××××" ×€×× ×× ×¢×××Ö·×××ש×Ö·× ××¢×××× ×¢×¡ ××¢×××¢× ×Š× × ××Š× SeaBIOS ××× ×€×ך××××ַךע. ××× ×Ö·××ש×Ö·×, עס ××× ××¢×××¢× ××€ÖŒ××ת ×××× ×€ÖŒ×š×××× ×Š× ×€ÖŒ×Öž×š× ×§×¢×× × ××Š× ×¢×סקך××€ÖŒ××¢× - ××× ×ע׀ך×××× ×Š× ××Öž× ××֞ס
×Ö·×××, עס ×××Öž×× ××סק×××¢×, ××Öž ××¢× ×¢× ×× ×ק×ך××, ××Öž ××× ×¢×סקך××€ÖŒ××¢× - × ×¢××¢× ×¢×¡ ××× ×Š×× ×××€× ×¢××¢×. ××עך עס ××¢× ×¢× ×× ×××× ××××××××¢×§× ××××£ ×××¢×××¢ קע×× ××× ×Öž×€×¢× ××ק, ××× ××××××Öž××¢×§× ××××£ ×××¢×××¢ ×× ××××××Öž××¢×§× ×Öž×€×¢× ××¢× ×××', ××× ×××× ×¢×š ×€×× ××× ×××
××× ×× ×Öž× ×××× ×¢×¡ ××× ××¢×××¢× ×Ö· ××¢××Ö·× ×§ ×Š× ×€×©×× ×©×š××Ö·×× ×Ö· ×€×ַך×××Ö·× ×€Ö¿×ַך libffi ××× JS ××× ××××€× × ×֞ך××Ö·× ×עסץ, ×Öž×עך ××× ×× ×¡××£ ××× ××× ×Š×¢×××©× ×××¢×× ××× ×Š× ××Ö·×× ×××× ××¢×עך ×עקעס ×Ö·××× ×Ö·× ××× ×××¢×× ×ַך××¢×× ××× ×× ××××ס××× × ×§×Öž× - ×××֞ס ×§×¢× ××× ××Öž×, ××× ××× ××Öž××, "××¢× ×¢× ×× ××ַסקס ×Ö·××× ×§×Öž××€ÖŒ××׊××š× "××¢× ×¢× ××ך ×Ö·××× × ×ַך×ש?" ××× ××Öž× ×Š× ×€ÖŒ×Öž×š× libffi ×Š× ×× ×× ×עך ×ַךק×Ö·×עק×שעך, ×Ö·××× ×Š× ××Öž×× - ׊×× ×××ק, Emscripten ××× ×××××¢ ××ַקך×֞ס ×€Ö¿×ַך ×× ××× ×¢ ×€Ö¿×ַך××Ö·×××× × (××× ××ש×Ö·×××ַסקך××€ÖŒ×, ××Öž - × ×, ×××¢××עך ×× ×ַךק×Ö·×עק×שעך, ×Ö·××× ×× ×ַסע×××Ö·××עך), ××× ×× ×€×××ק××× ×Š× ××××€× ×§×Öž× ×××©×¢× ×¢×š××××Ö·× ××××£ ×× ×€×××¢×. ××× ×Ö·×××¢××××, × ×Öž× ××× ×ק×× × ××× ×€ÖŒ××Ö·××€×֞ך××¢-×Öž×€×¢× ××ק libffi ׀ך×Ö·×××Ö·× ×¥ ×€Ö¿×ַך ×¢×××¢××¢ ××Öž×, ××× ××Ö·× ×¢×××¢××¢ ק×Öž××€ÖŒ×××Ö·×××¢ ק×Öž× ××× ××¢×××€× ×¢×¡ ××××£ ×עך עךש×עך ׀֌ך×Öž××¢ ××× ××¢×€Ö¿×× ×¢×. ×Š× ×××× ××עךך×ַש×, ×× ×€ÖŒ×š×Öž××¢ ××× ××¢×××¢× ×׊×××. ×עךש×××× × ×€×× ×××× ××©×¢× × - ק××× ××××¥, עס ××¢×ך××¢× ×€×× ×עך עךש×עך ק×Ö·×עך - ×××, × ×Öž× × ××©× ××××××ק ×××× ×××××, ××¢××× ××¢× ×Š× ×§××§× ××× ×× ×š×××Ö·×××× × ×§×Öž× ××××עך, ×Š× ×֞׀֌ש×Ö·×Š× ××× ×Š× ×ך×Öž×× ××××Ö·×עך. ××Öž ××× ××¢××× ××¢× × ×ס××¢× ×€Ö¿×ַך ×× ×Š××××× ××Öž× - ×× ××××× ××Ö·× ×××× ×€Ö¿×× ×§×Š××¢ ××× ××¢×××¢× ffi_call
- ××֞ס ××Öž× ××¢××××× ×Ö· ×עך×Öž×× ×š××€×. עס ××× ×§××× ×š××€× ×××. ×Ö·××× ××× ×עש××§× ×××× ×¢×š×©×עך ׊××¢× ××¢××, ×××֞ס קעךעק××Ö·× ×Ö· ××¢×ת ××× ×× ×€ÖŒ×š×Öž××¢ ×××֞ס ××× ×§××֞ך ×Š× ×§××× ×Öž××××€ÖŒ××Ö·× ×ªÖŒ×××× - ×€×ַק××ש × ×××¢×š× ××Öž× × ×× ×××× ×§×Ö·××€ÖŒ×¢×š× ××× a == b
××× ××€××× ××× a - b < EPS
- ××ך ×××× ××Ö·×š×€Ö¿× ×Š× ××¢××¢× ×§×¢× ×× ××Öž××××¢, ×Ö·× ×עךש 0 ×××¢× ×××× ×××עך ××××Ö·× ×Š× 1/3 ... ××× ×Ö·×××¢××××, ××× ×עק×××¢× ××× ×Ö· ×××עך ×€ÖŒ×Öž×š× ×€×× libffi, ×××֞ס ×€ÖŒ×ַס×× ×× ×¡×××€ÖŒ××Ö·×¡× ×עסץ, ××× ××× ×××֞ס ×××× ××× ×Š×× ×××€×עש××¢×× - ××× ××ַש××Öž×¡× ×¢×¡ ×××Öž×× ×××× × ××××ק, ××× ×××¢× ××××× ×¢×¡ ש׀֌ע×עך. ק×ק ×€×֞ך××ס, ××× ×××¢× ××Öž×× ×Ö·×, ××× ×¢×¡ ×€××š×§×¢×š× ×××ס, ×עך ק×Ö·××€ÖŒ×××עך ××× × ××©× ××€××× ×ַך××Ö·× ×עךע×× × ×× libffi ×€×× ×§×Š××¢ ××× ×× ××¢×Š× ×§×Öž×.
×Öž×עך, ××× ××× ×©××× ××¢××××, עס ××¢× ×¢× ×¢×××¢××¢ ×××××××ש×Ö·× ×, ××× ×Š××××©× ×× ×€×š×× × ××Š× ×€×× ×€×ַךש××× ×Ö·× ×××€××× × × ×Ö·××ך, ×Ö· ×עך ׀֌ך×קךע ש×ך×× ××× ××¢×××¢× ×€×ַך××֞ך×× - ××ש×Ö·×××ַסקך××€ÖŒ× ×××š× ×€ÖŒ××Ö·× ×©×××Š× × ××©× ×××××××ךע×Ö·××× × ××× ×©×¢×š× ××֌ך××. ××× ×€ÖŒ×š×× ×Š××€ÖŒ, ××֞ס ×§×¢× ×××ש×Ö·×××Ö·×× ××€××× ×××× ×עך××€Ö¿× ×Ö· ××× ××¢××Ö·× ×§, ×Öž×עך × ××©× ×€Ö¿×ַך ×€ÖŒ×֞ך××× × ×§×Öž× ×××¢××¢× ×¡ ×ַךק×Ö·×עק×שעך ××× ×××× ×Š× C ×€Ö¿×¢××¢×. ×××× ×עךע××, Firefox ××× ×¢×§×¡×€ÖŒ×¢×š×××¢× ××× × ××× ×©×××Š× ×©×¢×š× ××עךס, ××× Emscripten ××× ×Ö· ×€××ךע×Ö·× ×××€ÖŒ××Ö·××¢× ×××ש×Ö·× ×€Ö¿×ַך ×××, ×Öž×עך ××× ××× × ××©× ×××¢×× ×Š× ×Öž×€×¢× ××¢× ××××£ עס. ××× ××× ×Š× ×€ÖŒ×Ö·××¢××¢× ×××Öž×š×Š× ×××ס ×××××-××ךע×Ö·××× × ×€×× ×× ×§×¢×× ×§×Öž× - ××֞ס ×××, ××¢×€×× ×¢× ×××ס ××× ×× ×€Ö¿×¢××¢× ××××€×, ××Ö·× ×× ×××£ ×€×× ×× ×©××××£ ×€×××¡× ××ק ××× ××¢× ×€×Öž××¢× ××× ×Ö· ××Ö·××× ×עך ×€Ö¿×× ×§×Š××¢, ××× ×š××€× ×Ö·××Ö· ×€×Ö·× ×קש×Ö·× × ×××× ×¢×š ×××š× ×××× ×¢×š ×€×× ×× ××××€ÖŒ× ×©××××£.
׊××××××¢ ׀֌ך×ÖŒ×××
××× ×¢×××¢××¢ ×€×× ×, עס ××× ××¢×××¢× ×§××֞ך ×Ö·× ×עך ׀֌ך×Öž×××¢× ××× × ×Öž× ××֞ך×, ××× ×Ö·× ×Š××€×Ö·× ×Š× ×©×××€ÖŒ× ×§×š×Ö·×ש×× ×ַך×× ×× ×§×Öž× ×××Öž×× × ××©× ×€××š× ×Š× ×§××× ×××ס. ××¡×§× ×: ××ך ××Ö·×š×€Ö¿× ×Š× ×¡×ס××¢××Ö·×××××š× ××¢× ×€ÖŒ×š×֞׊עס ×€×× ×Ö·××× × ×§×š×Ö·×ש××. ×עך××עך, ××עךס××¢ 2.4.1, ×××֞ס ××× ××¢×××¢× ×€×š×ש ××× ×עך ׊×××, ××× ××¢× ×××¢× (× ××©× 2.5.0, ××××Ö·×, ××עך ××××ס×, עס ×××¢× ×××× ××Ö·×× ××× ×× × ××Ö·×¢ ××עךס××¢ ×××֞ס ××¢× ×¢× × ×Öž× × ××©× ××¢×××€×, ××× ××× ××Öž×× ××¢× ×× ×€×× ×××× ×××××¢× ×¢ ××Ö·×× ), ××× ×עך עךש×עך ××Ö·× ××× ××¢×××¢× ×Š× ××עךשך×××× ×¢×¡ ×עש×Öž××¢× thread-posix.c
. × ×, ××֞ס ×××, ××× ×××עך: ×××× ×¢×ע׊עך ×ע׀ך×××× ×Š× ××ך××€××š× ×Ö·× ×֞׀֌עך×ַ׊××¢ ×××֞ס ×€××š× ×Š× ×××ַק×× ×, ×× ×€Ö¿×× ×§×Š××¢ ××× ××× ×עך××€× abort()
- ×€×× ×§×ךס, ××֞ס ××× × ××©× ×¡×Öž××××¢ ×Ö·××¢ ×× ×€×š××××¢××¢× ××× ×Ö·××Öž×, ×Öž×עך ××× ××× ×ס×עך עס ××× ××¢×××¢× ×¢×€×¢×¡ ×עך ×Öž× ××¢× ×¢× ××× ×©××× ××ַק×××¢× ×¡×ª××š× ××Ö·××.
××× ×Ö·×××¢××××, Emscripten ×֞׀֌׊×עס ××¢× ×¢× ×××עך × ×׊×ק ××× ×€ÖŒ×֞ך××× × ×§×Öž× ×Š× JS -s ASSERTIONS=1 -s SAFE_HEAP=1
- ××× ××Ö·×€ÖŒ× ×¢×××¢××¢ ×××׀֌ס ×€×× ×Ö·× ×××€××× × × ×Ö·××ך, ×Ö·××Ö· ××× ×§×Ö·××ס ×Š× ×Ö·× ×Ö·× ×Ö·×××× × ×Ö·×ךעס (×××֞ס ××× × ××©× ×§×Öž× ×¡×ס××¢× × ××× ×× ×§×Öž× ×€Ö¿×ַך ××××€ÖŒ× ×¢×š××× ××× HEAP32[addr >> 2] = 1
) ×Öž×עך ך××€× ×Ö· ×€Ö¿×× ×§×Š××¢ ××× ×× ×××ךע×× × ××עך ×€×× ×ַך××××¢× ××.
×××š× ××¢× ×××¢×, ×Ö·×××× ××Ö·× × ×¢×š×š×֞ךס ××¢× ×¢× ×Ö· ××Ö·××× ×עך ×ַך××ס××¢××. ××× ××× ×©××× ××¢××××, קע×× ××× ×Ö· "×××××©×¢× ×¢×š×××××" ×× ×עך׀֌ך×××Ö·×××× ××Ö·×§×¢× × ×€Ö¿×ַך ק×Öž× ××ך TCI (ק×××× ×ש×ק ק×Öž× ××עך×ע׊עך), ××× ×Š× ××××¢× ××× ××××€× ×§×¢×× ××××£ ×Ö· × ××Ö·×¢ ×ַךק×Ö·×עק×שעך, ×××× ××ך ××Öž× ××Ö·××××ק, ×Ö· C ק×Ö·××€ÖŒ×××עך ××× ××¢× ××. "×××× ××ך ××¢× × ××Ö·××××ק". ××× ××× ××¢×××¢× ×©××××Ö·××××ק, ××× ×¢×¡ ×€××š×§×¢×š× ×××ס ×Ö·× TCI × ××Š× ×Ö·× ×Ö·×××× × ×ַקסעס ×××¢× ×€ÖŒ×ַךס×× × ×××× ×××עק×Öž××¢. ××֞ס ×××, ××××£ ×Ö·××¢ ס×֞ךץ ×€×× ARM ××× ×× ×עךע ×ַךק×Ö·×עק××©×¢×š× ××× ××Ö·××קע ××¢×××Ö·×× ×ַקסעס, Qemu ק×Ö·××€ÖŒ×××× ××××Ö·× ××× ××Öž×× ×Ö· × ×֞ך××Ö·× TCG ××Ö·×§×¢× × ×××֞ס ×××©×¢× ×¢×š×××¥ ××¢××××š× ×§×Öž×, ×Öž×עך ×Š× TCI ×××¢× ×ַך××¢×× ××××£ ××× ××× ×× ×× ×עך קש××. ×Öž×עך, ××× ×¢×¡ ×€××š×§×¢×š× ×××ס, ×× TCI ××ַק××××¢× ×××ש×Ö·× ×§××ך ×× ××¢××××× ×¢×€ÖŒ×¢×¡ ×¢× ××¢×. ××× ×Ö· ךע×××××Ö·×, ×€×× ×§×Š××¢ ך××€× ×€Ö¿×ַך ×Ö·× ×Ö·×××× × ××××¢× ×¢× ××¢× ×¢× ×Š×××¢××¢×× ×Š× ×× ×§×Öž×, ×××֞ס ××¢× ×¢× ××¢×€Ö¿×× ×¢× ××× ×× ×× ×עך ×××× ×€×× ×§×¢××.
ק×׀֌ע ׊עש×עך×× ×
××× ×Ö· ךע×××××Ö·×, ×Ö·× ×Ö·×××× × ×ַקסעס ×Š× TCI ××× ××¢×××¢× ×§×¢×š×¢×§××Ö·×, ×Ö· ××××€ÖŒ× ×©××××£ ××× ××¢×××¢× ××ש××€× ×××֞ס ××× ×§×¢×š ×עך××€× ×× ×€ÖŒ×š×ַסעסעך, RCU ××× ×¢×××¢××¢ ×× ×עךע ק×××× ××××. ××× ×Ö·××× ××× ×§×Ö·×עך קע×× ××× ×× ×֞׀֌׊××¢ -d exec,in_asm,out_asm
, ×××֞ס ×××× ×Ö·× ××ך ××Ö·×š×€Ö¿× ×Š× ××Öž×× ×××֞ס ×××ַקס ×€×× ×§×Öž× ××¢× ×¢× ×¢×§×¡×ַק××××Ö·×, ××× ×××× ××× ×עך ׊××× ×€×× ×ך×Öž×ק×Ö·×¡× ×Š× ×©×š××Ö·×× ×××֞ס ××Ö·×¡× ×§×Öž× ××× ××¢×××¢×, ×××֞ס ××Ö·××¢××֞ס ק×Öž× ××× ××¢××××š× (××× ××¢× ×€×Ö·×, ×××עק×Öž××¢). עס ס××ַךץ, עקס×ַק×××¥ ×¢×××¢××¢ ×××עך×ע׊×× × ×××ַקס, שך×××× ×× ××××Ö·××× × ×Öž× ××Öž× ××× ××× ×§×¡ ×Ö·× RCU ×××¢× ×××Š× ×Öž× ××××× ××× ... קך×ַש×× abort()
××× ×Ö· ×€Ö¿×× ×§×Š××¢ free()
. ×××š× ××× ×ק×× × ××× ×× ×€Ö¿×× ×§×Š××¢ free()
×× ×š ××× × ×× × ××¢××× ××¢ × ×Š × ×עך××××¡× , × × ×× × ××¢ × ×§×¢×€× × ×€× × ××¢ × ×§××€×¢ × ×××ק , ×°× ×¡ ×××× , ×× × × × ×××ÖŸ×××× , ×€×ך × ×Š×××¢×ײ×××¢ × ××֌ך×× , ×× × ×× ×©×× × × × ×××ק֟××š× × ×××¢ ך ×¢× ××¢× ×¢ ×× ×¡ ××¢×°×¢ × ×××¡× .
׊עש×עך×× × ×€×× ×× ×§×׀֌ע - ××× ×§××× ... ××× ×Ö·××Ö· ×Ö· ×€×Ö·×, עס ××× ×Ö· × ×׊×ק ס××××¢ - ×€×× (×××× ××¢×××¢×) ×× ××¢×××¢ ק×××××, ×ַסע×××Ö·× ×Ö· ××¢××××š× ×××× ×¢×š× ××× ××××€× ×¢×¡ ××× ×עך ×××Ö·××ך×× ×. × ×Öž× ×¢×××¢××¢ ××Öž×, ×× ×××× ×¢×š× ××× ×ך×××. ××× ×§×Ö·×עך עס ××× ×× ××¢×××¢ ×֞׀֌׊×עס - עס קך×ַש×× ××€××× ×עש×ַס ×× ××××Ö·×××××ש×Ö·×, ××××עך ×ַקש×× ×š××ש×× × ××ך××€×ך×× ×. עס ××× ×€ÖŒ×š×קךע, ×€×× ×§×ךס - ×ש××¢×ת, ×× ×§××××× ××¢× ×¢× × ××©× ×€ÖŒ×× ×§× ×× ××¢×××¢, ×××֞ס ××× × ××©× ××××ש, ××××Ö·× ×§×Ö·× ×€×××עך ××ס׀×Öž×š×©× ×Ö· ×××¡× ×Ö·× ×עךש ×֞׀֌׊×עס, ×Öž×עך ××× ××Öž×× ×××Ö·××ך×× × - עךש×עך ××× ×××¢× ×€×ַךך×××× ××¢× ×ש×ק, ××× ××¢××Öž××, ×××× ××× ××× ××Ö·××××ק , ×עך ×֞ך×××× ×¢× ×××× ×¢×š ×××¢× ×עךש××Ö·× ×¢×. ××× ××××€× ×× ××¢×××¢ ××Ö·× ××× ×עך Valgrind ... Y-y-y, y-y-y, uh-uh, עס ×× ××¢×××××, ××ך×××¢××× ××¢× ×× ××××Ö·××××Ö·×××Öž× × ×֞ך××Ö·×× ××× ×ך××עך××¢×€××š× ××××£ ×€×ַך××Ö·× ××¢× ×××Ö·× ×× ×֞ך×××× ×¢× ×ש×ק ×Öž× ×Ö· ×××× ××××š×¢× ×× × ×××¢×× ×€×Ö·×ש ××֌ך×× ×ַקסעס, × ×× ×Š× ×עך××Öž× ×¢× ×××¢×× ×€××ס. ××¢××, ××× ××× ××Öž××, ××× ××ך × ××©× ×Š×××¢×ך××× ×€Ö¿×ַך ××¢× - ×Ö· קך×ַש×× × ×€ÖŒ×š×Öž×ך×Ö·× ×¡××ַ׀֌ס קך×ַש×× × ×××¢× ××Öž× ××©× ××× ×עך ×××Ö·××ך×× ×. ×××֞ס עס ××× ××¢×××¢× ××× ×Ö· ××ס×עך××¢. ×××× ××××€ÖŒ×Ö·××ַס×ַס ××× ×Ö·× ×Ö·××Öž× ××× ×עך ××¢×× × ×€×× ×× ×§×š×Ö·× × ××××¢× × ×Öž× ×Ö· קך×Ö·× ×עש×ַס ×× ××××Ö·×××××ש×Ö·×, ××× ××¢××××× ×ַך××¢× memset
-×Ö· ××× ×Ö· ×××××ק ×××Ö·×× × ××Š× ×Öž×עך mmx
, ×Öž×עך xmm
ךע××ש×ס×עך×, ××Öž×עך עס ××× ××¢×××¢× ×Ö· ס×Öž×š× ×€×× ×Ö·×××× ××Ö·× × ××¢×ת, ××Öž×ש עס ××× × ×Öž× ×©××עך ×Š× ××××××.
×Öž×ק××, Valgrind ××× × ××©× ××סק×××¢× ×Š× ××¢××€× ××Öž. ××× ××Öž ×× ××¢×š×¡× ×¢×§×××ק ××Ö·× ×× ××¢××××× - ×Ö·××¥ ×××× × ×Š× ××€××× ×Öž× ×××××, ×Öž×עך קך×ַש×× ×€Ö¿×ַך ××¢××Ö·×ךע ×××××ַק×Ö·× × ×¡×××ת ךע×× ×Š× ×Ö· ××¢×©×¢×¢× ×ש ×××֞ס ×§×¢× ××Öž×× ××¢×ך××€× ×××××Ö·× × ×€×× ×× ×¡×ך×ַקש×Ö·× × ×Š×ך×ק. × ××× ××¢ ׊ײ × ×× × ××€×× × × ×ש × ××¢×°×¢ × ×§××ך , ×° × ××× × ×Š × ××¢×š× ×¢× ×עך × ××× . ××× ×× ×¡××£, ××× × ×Öž× ××¢××× ×Š× ×××Š× ×ַך×Öž×€ÖŒ ××× ×××××. ×ך××§× ×××֞ס ×עך ××¢×עך ××× ××¢×××¢× ×š×ך××× ××× ××¢××××× ×Ö·× ×¢×¡ ××× × ××©× ×§××§× ××× ×Ö· × ××עך, ×Öž×עך ××Ö·× ×¥ ×Ö· ××× ×€×× ×××× ×¢×š× ××Ö·××. ×××, ×× ××× ××¢, ×× ×××× ×¢×š× ×©×ך××§× ××× ××¢×€Ö¿×× ×¢× ××¢×××Öž×š× ××× ×× ××××Öž×ס ×עקע - ××֞ס ×××, ×××Š× ×¢×¡ ××× ××¢×××¢× ××¢×××¢× ×Š× ××Öž×× ××× ×Ö· ××××Ö·× ××××× ×Ö·× ×¢×¡ ××× ××¢×××¢× ×Ö· ××ַ׀עך ×Öž×××עך׀××Öž×, ××× ×¢×¡ ××× ××€××× ×§××֞ך ×Ö·× ×¢×¡ ××× ××¢×××¢× ×עשך××× ×Š× ××¢× ××ַ׀עך. × ×, ע׀֌עס ××× ××֞ס - ××× Emscripten, ×××ק, עס ××× ×§××× ×š×Ö·× ××Ö·×××××ש×Ö·× ×€×× ×× ×Ö·×ךעס ×€ÖŒ××Ö·×¥, עס ××¢× ×¢× ×××× ×§××× ××Öž×עס ××× ×¢×¡, ×Ö·××× ××ך ×§×¢× ×¢× ×©×š××Ö·×× ×¢×š××¢×¥ ××× ×× ×××× ×€×× ×× ×§×Öž× ×Š× ×ַך××ס׀××š× ××Ö·×× ×××š× ×××Ö·×× ×€×× ×× ×ע׊××¢ ק×Ö·×עך, ק×ק ××××£ ×× ××Ö·××, ק×ק ××××£ ×× ×××Ö·××, ×××, ×××× ×¢×¡ ××× × ××©× ×€××š×¢× ×עך×, ××ַק×××¢× ×Ö· ××¢××Ö·× ×§. ××ת, עס × ×¢×× ×Ö· ×€ÖŒ×֞ך ×€×× ××× ×× ×Š× ××× ×§ × ×Öž× ×§××× ×¢× ×עך×× ×, ×Öž×עך ×××֞ס ×§×¢× ×¢× ××ך ××Öž×? ××× ×Ö· ךע×××××Ö·×, ×Ö· ס׀֌ע׊××€×ש ש××š× ××× ××¢×€×× ×¢× ×Ö·× ×§×Ö·×€ÖŒ×× ×× ××××Öž×ס ×€×× ×× ×Š××Ö·×××××Ö·××ק ××ַ׀עך ×Š× ×× ××Ö·×¡× ××֌ך×× - ×××, ××ַקע, עס ××× × ××©× ××¢× ×× ×€ÖŒ××Ö·×¥ ××× ×× ××ַ׀עך. ××¢×€Ö¿×× ×¢× ×× ×ק×ך ×€×× ×× ××Öž×× ×¢ ××ַ׀עך ×Ö·×ךעס ך×××Ö·×××× ××× ×Ö· ×€Ö¿×× ×§×Š××¢ qemu_anon_ram_alloc
××× ×עקע oslib-posix.c
- ×× ××Öž××ק עס ××× ××¢×××¢× ××֞ס: ××× ×¢×¡ ×§×¢× ×××× × ×׊×ק ×Š× ××Ö·× ×š×××¢× ×× ×Ö·×ךעס ×Š× ×Ö· ך×××ק ×××Ö·× ×€×× 2 ×× ××× ×ך××ס, ×€Ö¿×ַך ××¢× ××ך ×××¢×× ×€×š×¢×× mmap
עךש×עך ×Ö· ×××¡× ×עך, ××× ××¢××Öž×× ××ך ×××¢× ×Š×ך×קק×××¢× ×× ××××¢×€××ק ××× ×× ××××£ munmap
. ××× ×××× ×Ö·××Ö· ×Ö·×××× ××Ö·× × ××× × ××©× ×€×ך××× ××, ××ך ×××¢×× ×Öž× ××××Ö·×× ×× ×š×¢×××××Ö·× ×Ö·× ×©××Öž× ×€×× 2 ××¢××××××× getpagesize()
- mmap
עס ×××¢× × ×Öž× ××¢×× ×Ö· ×Ö·×××× × ×Ö·×ךעס ... ×Ö·××× ××× ×¢×סקך××€ÖŒ××¢× mmap
× ×֞ך ך××€× malloc
, ×Öž×עך ××Öž× ×¢×¡ ××× × ××©× ××Ö·× ×š×××¢× ××××£ ××¢× ×××Ö·×. ××× ×Ö·×××¢××××, ×Ö· ×ש×ק ×××֞ס ׀ך×ַס×ך××××Ö·× ××ך ×€Ö¿×ַך ×Ö· ×€ÖŒ×֞ך ×€×× ××ש×× ××× ×§×¢×š×¢×§××Ö·× ×××š× ×Ö· ×¢× ×עך×× × ××× ×Š×××× ×©×ך×ת.
×€Ö¿×¢×֎ק×××× ×€×× ×€×Ö·× ×€×Ö·× ×קש×Ö·× ×
××× ×××Š× ×עך ׀֌ך×ַסעסעך ××× ×§×Ö·×× ××× × ×¢×€ÖŒ×¢×¡, קע×× ××× × ××©× ×§×š×Ö·×, ×Öž×עך ×× ×€×ַךש××¢×× ××× × ××©× ×§×¢×š ××××£, ××× ×עך ׀֌ך×ַסעסעך ×עש×××× × ×××× ××× ××׀֌ס, ×××× ×ש׀×× ×××š× ×× ×š×¢×××××Ö·× -d exec,in_asm,out_asm
. × ××××€ÖŒ×Ö·××ַס×ַס ××× ××עך××ש×: ×××Ö·×עך ×× ×עך×ַ׀֌ץ (×Öž×עך, ××× ×Ö·×××¢××××, ×Ö·××¢ ×× ×עך×ַ׀֌ץ) ××Öž× × ×× ×Öž× ×§×××¢×. ××× ××ַקע, ×××× ××ך סקך××€ÖŒ ×× ×× ×עך×ַ׀֌ץ ×€×× ×× ××¢××××š× ×€Ö¿×ַך××Ö·×××× ×, ×××֞ס ×€Ö¿×ַך ×¢×××¢××¢ ס××× ××¢×ך××¢×, ××ך ××ַק×××¢× ×Ö· ×¢× ××¢× ××××. ×Öž×עך ××֞ס ××× ××֞ך × ×× ××¢×××¢× ×עך ×¢× ×׀ֿעך: ×Ö· ×€Ö¿×ַך×××²Ö·× ×€Ö¿×× ×× ×ַך××ס××¢××¢××¢× ×¢ ש׀֌××š× ××× ×עך ××××× ×עך××Öž× ×עך ×֞׀֌׊××¢ ××Öž× ×ַך××ס××¢×××××, ×Ö·× ×× ×¢×§×עק×׊××¢ÖŸ×ך×Ö·×עק×× ××Öž×× ××× ××֞ך ×€×š× ×Š×¢×©××××. ××Öž עס ×××× ×××× ××¢×××× ×Ö·× ×€×ַך××××Ö·× ×€×× ×××֞ס ××× ×š×¢×§×֞ך××¢× × ××Š× ×× ××Öž× ×שעך emrun
××××Ö·××× × ×š×¢×××××Ö·× ××× ×× ×š×¢×××××Ö·× ×€×× ×× ××¢××××š× ×€Ö¿×ַך××Ö·×××× × ××× × ××©× ×Ö· ××֞ך ××¢×ש×Ö·× ×ק×Ö·× ×€ÖŒ×š×֞׊עס. ××× ××Öž× × ×× ××××¡× ×€ÖŒ×× ×§× ××× ×Ö· ׀֌ך×Öž×ך×Ö·× ×€×××¡× ××ק ××× ×Ö· ×××¢×עךעך ק×Ö·× ×¢×§×¥ ×Š× emrun
, ×Öž×עך ×¢×××¢××¢ ש×ך×ת ××× ×עך ךע×××××Ö·× ××¢× ×¢× ×š×עך××× ××ש×, ×Ö·××× ×× ××××ק ××× ×× ××××ק ××× × ××©× × ×Öž× ×Ö· ס××× ×Š× ×××¢×š× ×¢××¢× ×Ö·× ×× ×ך××ַעק××֞ך×עס ××Öž×× ×××××עך××ש×. ××× ×Ö·×××¢××××, עס ××× ××¢××××š× ×§××֞ך ×Ö·× ×××× ×× ×× ×¡×ך×ַקש×Ö·× × ljmpl
עס ××× ×Ö· ××עך××Ö·× × ×Š× ×€×ַךש×××¢× ×¢ ×Ö·×ךעסעס, ××× ×× ××××עק×Öž× ×××©×¢× ×¢×š××××Ö·× ××× ×€×Ö·× ××Ö·××¢× ××Ö·×× ×Ö·× ×עךש: ×××× ×¢×š ×ÖŒ××× ×Ö·× ×× ×¡×ך×ק×××Öž× ×Š× ×š××€× ×Ö· ××¢×׀֌עך ×€Ö¿×× ×§×Š××¢, ×× ×× ×עךע × ×ש×. × ×Öž× ××Öž×××× × ×× ×× ×¡×ך×ַקש×Ö·× × ××× ××¢××¢×š× × ×× ×§×Öž× ×××֞ס ×ך×Ö·× ×××××¥ ââ×× ×× ×¡×ך×ַקש×Ö·× ×, עס ××× ××¢××××š× ×§××֞ך ×Ö·×, עךש×עך, ××××× ××××עך עס ××× ×× ×š×¢××ס×ך××š× cr0
עס ××× ××¢×××¢× ××¢×××× ×Ö· ךעק×֞ך××× × - ×××× × ××Š× ×Ö· ××¢×׀֌עך - ×××֞ס ס×××××©× ×× ×€ÖŒ×š×ַסעסעך ×Š× ×€ÖŒ×š×Öž×עק××¢× ××Öž××¢, ××× ×Š×××××× ×¡, ×Ö·× ×× js ××עךס××¢ ק××× ××Öž× ×¡×××××©× ×Š× ×€ÖŒ×š×Öž×עק××¢× ××Öž××¢. ×Öž×עך ×עך ×€×Ö·×§× ××× ×Ö·× ×× ×× ×עך ש×ך×× ×€×× Emscripten ××× ×××× ×××××שעק ×Š× ×עך××Öž×× ×§×Öž× ×Ö·××Ö· ××× ×× ×××€ÖŒ××Ö·××¢× ×××ש×Ö·× ×€×× ×× ×¡×ך×ַקש×Ö·× × call
××× TCI, ×××֞ס ××¢×עך ×€×× ×§×Š××¢ ×××Ö·×× ×š×¢×××××Ö·×× ××× ×××€ÖŒ long long f(int arg0, .. int arg9)
- ×€×Ö·× ×קש×Ö·× × ×××× ×××× ×עך××€× ××× ×× ×š××××ק × ××עך ×€×× ×ַך××××¢× ××. ×××× ×× ××¢×š×©× ××× ×××××Ö·××××××, ×××€ÖŒ×¢× ××× × ××××£ ×× ××××Ö·××× × ×¡×¢×××× ×ס, ×× ×€ÖŒ×š×Öž×ך×Ö·× ×××¢× ×§×š×Ö·× (×××֞ס ××× ×××) ×Öž×עך ך××€× ×× ×××ךע×× ×€×× ×§×Š××¢ (×××֞ס ×××¢× ×××× ×ך××עך×ק ×Š× ××××Ö·××× ×). עס ××× ×××× ×Ö· ×ך×× ×֞׀֌׊××¢ - ××¢×× ×× ××ך ×€×× ×š×Ö·×€ÖŒ×¢×š× ×××֞ס ××××× / ×ַך×Öž×€ÖŒ× ×¢××¢× ×ַך××××¢× ××, ×Öž×עך ××× ××Ö·× ×¥ ×× ×š×Ö·×€ÖŒ×¢×š× × ×¢××¢× ×Ö· ×€ÖŒ××Ö·×¥ ×€×× ×€ÖŒ××Ö·×¥, ×ך×Öž×¥ ×עך ×€×Ö·×§× ×Ö·× ××× ×€×Ö·×§× ××× × ×֞ך ××Ö·×š×€Ö¿× ×Ö· ×××¡× ×עך ××× ×Ö· ××× ××¢×š× ×š×ַ׀֌עך×. ××֞ס ×Ö·×××× ××× ×××עך ×ך××עך×ק, ×Öž×עך עס ××Öž× ××× ×ַך××ס××¢××××× ×Ö· ×עך ×¢×š× ×¡×עך ׀֌ך×Öž×××¢×: ××× ×× ×××©×¢× ×¢×š××××Ö·× ×§×Öž× ×€×× ×× ×š×ַ׀֌עך ×€×Ö·× ×קש×Ö·× ×, ×× ×ַך××××¢× ×× ××¢× ×¢× ×§×Öž× ××עך××¢× ××× ×§×Öž× ××עך××¢×, ×Öž×עך ××× ×× ×€Ö¿×× ×§×Š××¢ ××× ×× ×××©×¢× ×¢×š××××Ö·× ×ַך××××¢× ×× ××× × ××©× ×עך××€× - × ×, ×€ÖŒ×× ×§× ××× ××× ×××× libffi ×××€ÖŒ××Ö·××¢× ×××ש×Ö·×. ×Ö·× ×××, ×¢×××¢××¢ ××¢×׀֌עךס ××¢× ×¢× ×€×©×× × ××©× ×¢×§×¡×ַק××××Ö·×.
׊×× ×××ק, Qemu ××× ××ַש×× ×××× ×¢××××ק ךש×××ת ×€×× ××¢×׀֌עךס ××× ×× ×€×Öž×š×¢× ×€×× ×Ö· ××¢×עך ×עקע ×××
DEF_HELPER_0(lock, void)
DEF_HELPER_0(unlock, void)
DEF_HELPER_3(write_eflags, void, env, tl, i32)
××× ××¢× ×¢× ××¢× ××Š× ××Ö·× ×¥ ××Öž×× ×¢: עךש×עך, ××ַקך×֞ס ××¢× ×¢× ×š××××€××× × ××× ×× ××¢×š×¡× ×ש××× ×¢ ×××¢× DEF_HELPER_n
, ××× ××¢××Öž×× ×××š× ×¡ ××××£ helper.h
. ××× ×× ××֞ס ×Ö·× ×× ××ַקך×Öž× ××× ×קס׀֌×Ö·× ××× ××× ×Ö· ס×ך×ק××ך ×× ××××Ö·×××עך ××× ×Ö· ק×Öž××¢, ××× ××¢××Öž×× ×Ö· ××¢× ××¢ ××× ×××€××× ×, ××× ×Ö·× ×©××Öž× ×€×× ×¢××¢××¢× ×× - #include <helper.h>
××× ×Ö· ךע×××××Ö·×, ××× ×עס×Öž×£ ××¢××× ×Ö· ××¢××¢×× ×××× ×Š× ×€ÖŒ×š××××š× ×× ××××××Öž×עק ××× ×ַך××¢×
××× ×Ö·×××, × ×Öž× ××¢×, ×עך ׀֌ך×ַסעסעך ס××× ×Š× ×ַך××¢××. עס ×××× × ×Š× ×××× ××××Ö·× ×× ×€×ַךש××¢×× ××× ×§××× ××Öž× ×× ××××Ö·×××××, ××Öž×ש memtest86+ ××× ×××××ת ×Š× ××××€× ××× ×× ××¢××××š× ×€Ö¿×ַך××Ö·×××× ×. ××Öž עס ××× × ××××ק ×Š× ×עךק××¢×š× ×Ö·× ×× Qemu ×××֞ק I / O ק×Öž× ××× ×עשך××× ××× ×§×֞ך×Öž×××× ×¢×¡. Emscripten ××× ×××× ×××××¢× ×¢ ×××עך ×ך××§× ×××€ÖŒ××Ö·××¢× ×××ש×Ö·×, ×Öž×עך עס × ×Öž× ××ךף ×Š× ×××× ×עש×××Š× ××× ×× ×§×¢×× ×§×Öž×, ××× ××ך ×§×¢× ×¢× ××××Ö·××× × ×× ×€ÖŒ×š×ַסעסעך ××׊×: קע×× ×©×××Š× ×֞׀֌׊×עס -kernel
, -initrd
, -append
, ××× ×××֞ס ××ך ×§×¢× ×¢× ×©××××× ××× ×קס ×Öž×עך, ××ש×, memtest86+, ×Öž× × ××Š× ×××֞ק ××¢×××סעס. ×Öž×עך ××Öž ××× ×עך ׀֌ך×Öž×××¢×: ××× ×× ××¢××××š× ×€Ö¿×ַך××Ö·×××× ×, ××ך ×§×¢× ×¢× ××¢× ×× ××× ×קס ×§×¢×š× ×š×¢×××××Ö·× ×Š× ×× ×§×Ö·× ×¡×Öž×× ××× ×× ×֞׀֌׊××¢ -nographic
, ××× ×§××× ×š×¢×××××Ö·× ×€×× ××¢× ×××¢×עךעך ×Š× ×× ×××֞ק××Ö·× ×€Ö¿×× ××× ×¢×¡ ××× ××Öž× ××©× emrun
, × ×× ×עק×××¢×. ××֞ס ×××, עס ××× × ××©× ×§××֞ך: ×עך ׀֌ך×ַסעסעך ××× × ××©× ×ך××¢×× ×Öž×עך ×× ×ך×Ö·×€×קס ךע×××××Ö·× ××× × ××©× ×ך××¢××. ××× ××Ö·× ××× ××ך ×××× ××¢×€×Ö·×× ×Š× ×××ַך×× ×Ö· ××ס×. עס ××Öž× ××× ×ַך××ס××¢××××× ×Ö·× "×עך ׀֌ך×ַסעסעך ש××Öž×€× × ×ש×, × ×֞ך ×××× ×§×¢× ××ק ס××Öž×××," ××× × ×Öž× ×××¢×× ×€×× ×£ ××× ××, ×עך ×§×¢×š× ××× ×Ö· ×€ÖŒ××Ö·×¥ ×€×× ×ַך××ק××¢× ××××£ ×× ×§×Ö·× ×¡×Öž×× ××× ×ע׊×××× ×Š× ××¢× ××¢×. עס ××× ××¢××××š× ×§××֞ך ×Ö·× ×עך ׀֌ך×ַסעסעך, ××× ×Ö·×××¢××××, ×ַך××¢×, ××× ××ך ××Ö·×š×€Ö¿× ×Š× ×ך×Öž×× ××× ×× ×§×Öž× ×€Ö¿×ַך ×ך××¢×× ××× SDL2. ׊×× ××Ö·×××עך×, ××× ××Öž× × ×× ××××¡× ××× ×Š× × ××Š× ××¢× ××××××Öž×עק, ×Ö·××× ××× ×¢×××¢××¢ עך×עך ××× ××¢××× ×Š× ××Ö·× ×××¢× ××× ×ך×Ö·×€. ××× ×¢×××¢××¢ ×€×× ×, ×× ×©××š× ×€ÖŒ×ַך×Ö·××¢×0 ×€××Ö·×©× ××××£ ××¢× ×¢×§×š×Ö·× ××××£ ×Ö· ×××× ××× ×עך×ך×× ×, ×××֞ס ס×Ö·×××שעס××× ×¢×××¢××¢ ××¢××× ×§×¢×. ××× ×× ×¡××£, עס ×€××š×§×¢×š× ×××ס ×Ö·× ×× ×€ÖŒ×š×Öž×××¢× ××× ××¢×××¢× ×Ö·× ×§×¢×× ×¢×€Ö¿× × ×¢×××¢××¢ ×××ך×××Ö·× ×€Ö¿×¢× ×Š×עך ××× ×××× ×€×××ש ×€Ö¿×¢× ×Š×עך, ׊××××©× ×××֞ס ××ך ×§×¢× ×¢× ××ַש××××¢× ××× Ctrl-Alt-n: עס ×ַך××¢× ××× ×× ××¢××××š× ××××¢×, ×Öž×עך × ××©× ××× Emscripten. × ×Öž× ××ַק×××¢× ××ַ׀ך××Ö·×¢× ×€×× ××× ××××ק Windows × ××Š× ×֞׀֌׊×עס -monitor none -parallel none -serial none
××× ×× ×¡×ך×ַקש×Ö·× × ×Š× ×€×֞ךס׀×Ö·×× ×š××ך×××¢× ×× ××× ×Š×¢ ×€×ַךש××¢×× ××××£ ××¢×עך ך×Ö·×, ×Ö·××¥ ×€ÖŒ××׊××× × ××¢×ך××¢×.
ק×֞ך×Öž×××× ×¢×¡
×Ö·×××, ×¢×××Ö·×××ש×Ö·× ××× ××¢× ×××¢×עךעך ×ַך××¢×, ×Öž×עך ××ך ×§×¢× ×¢× × ××©× ××××€× ×¢×€ÖŒ×¢×¡ ×ש×ק×Ö·×××¢ ××××-×€××Öž×€ÖŒ×€ÖŒ× ××× ×¢×¡, ××××Ö·× ×¢×¡ ××× ×§××× ×××֞ק ××× / ×Öž - ××ך ××Ö·×š×€Ö¿× ×Š× ×× ×¡×ך×××¢× × ×©×××Š× ×€Ö¿×ַך ק×֞ך×Öž×××× ×. קע×× ××× ×©××× ×¢×××¢××¢ ק×֞ך×Öž×××× ×¢ ××Ö·×§×¢× ××, ×Öž×עך ךע×× ×Š× ×עך × ×Ö·××ך ×€×× ××ש×Ö·×××ַסקך××€ÖŒ× ××× ×× ×¢×סקך××€ÖŒ××¢× ×§×Öž× ××¢× ×¢×š×Ö·××֞ך, ××ך ×§×¢× ×¢× × ××©× × ×֞ך ×Öž× ××××× ××ש×Ö·××Ö·××× × ×¡××ַקס. עס ×××Öž×× ××סק×××¢× ×Ö·× "×Ö·××¥ ××× × ×××Öž, ×× ××× ×§ ××× ×Ö·××עק××¢× ×××¢×," ×Öž×עך ×× ×¢×סקך××€ÖŒ××¢× ××¢×××¢××֞׀֌עךס ××Öž×× ×©××× ××¢× ×××¢× ××֞ך×× ×€×× ×Ö·××¥. ××֞ס ××× ×××€ÖŒ××Ö·××¢× ×Ö·× ××Ö·× ×¥ ××Öž×× ×¢: ××Öž××ך ך××€× ×Ö· ×€×× ×§×Š××¢ ך××€× ××× ××¢× ×¡×ַס׀֌×ש×ַס emscripten_sleep
××× ×¢×××¢××¢ ×× ×עךע × ××Š× ×× Asyncify ×עק×Ö·× ×××Ö·×, ××× ××¢××× × ××× ×××Ö·×× ×§×Ö·××ס ××× ×š××€× ×Š× ×§××× ×€×× ×§×Š××¢ ××× ×××× ×¢×š ×€×× ×× ×€×š×עך××קע ׊×××× ×§×ַסעס ×§×¢× ×€ÖŒ×ַס××š× ××××Ö·×עך ×ַך×Öž×€ÖŒ ×× ×Öž× ×××××. ××× ××׊×, ××××עך ××¢×עך ס×ַס׀֌×ש×ַס ך××€×, ××ך ×××¢×× ×××סק×××Ö·×× ×Ö·× ×ַס×× ×§ ק×Öž× ×עקס×, ××× ××××× × ×Öž× ××¢× ×š××£, ××ך ×××¢×× ×§×Öž× ×ך×Öž×××š× ×Š× ×Ö· ××ס×× ×קך×Ö·× ×ַס ך××€× ××× ×€×ך×עק×××¢×, ××× ×××× ×¢×¡ ××× ××¢×××¢×, ××ך ך×Ö·××¢×××¢× ×Ö·××¢ ××××¢ ××עך××Ö·××Ö·×× ××× ××¢× ×ַס×× ×§ ק×Öž× ×עקס×, ×Öž× ××××Ö·×× ×××֞ס ×€Ö¿×× ×§×Š××¢ ×Š× ×ַך××עך׀××š× ×§×Öž× ×ך×Öž× ×Š× ×××¢× ××ך ××Ö·×š×€Ö¿× ×Š× ×€×֞ך××¢×Š× ××ך××€×ך×× ×, ××× ×ַך××ס××Ö·× × ××¢× ×§×š×Ö·× × ×€Ö¿×× ×§×Š××¢. ××֞ס ××× ××× ×¢×¡ ××× ×Ö· ×€ÖŒ××Ö·×¥ ×Š× ××¢×š× ×¢× ×× ×××ךק×× × -O3
. ××× ××××€× ×× ×××©×¢× ×¢×š××××Ö·× ×§×Öž×, ××× Chromium ×¢×¡× ××ק×Öž×š× ××× ×§×š×ַש××. ××× ××× ××× ×××¢×ת ×עק××§× ××××£ ×××ס עך ××× ×€×š××××š× ×Š× ×××× ×××××... × ×, ×××ס ×§×¢× ××× ××××, ××× ××××× ×××× ×ע׀ך×××š× ×××× ××¢× ××××× ××× ××¢××¢×× ×Š× ×©×××××š× ××× ××€×××××××š× × 500+ MB Javascript.
׊×× ××Ö·×××עך×, ×× ×שעקס ××× ×× Asyncify ש×××Š× ××××××Öž×עק ק×Öž× ××¢× ×¢× × ××©× ××֞ך ׀ך××Ö·× ×××¢× ××× longjmp
-s ×××֞ס ××¢× ×¢× ××¢× ××Š× ××× ×× ×××ך×××Ö·× ×€ÖŒ×š×ַסעסעך ק×Öž×, ×Öž×עך × ×Öž× ×Ö· ק×××× ××Ö·××¢ ×××֞ס ××ס××××Ö·×× ×× ×שעקס ××× ×š×ס××Öž×š× ×§×Ö·× ×עקסץ ××× ×××× ×Ö·××¥ ××× ×××, ×× ×§×Öž× ××¢×ך××¢×. ××× ××¢××Öž×× ×Ö· ××Öž×× ×¢ ××Ö·× ×× ××¢×××××: ××× ×שעקס ××× ×× ×¡×× ×קך×Ö·× ×Ö·×××ש×Ö·× ×§×Öž× ××¢× ×¢× ×ך×××¢×š× - ×× ××¢×××¢ ×Öž× ×¢×¡ ×××֞ס קך×Ö·× ×× ×§×Öž× ××××, ×××× ×× ××ך××€×ך×× × ××Öž××ק, עס ××Öž× ×××× ××€×עש××¢×× - ×¢×ע׊עך ×ע׀ך×××× ×Š× ××Ö·×€ÖŒ× ×Ö· ש××× ×§×Ö·×€ÖŒ××©×¢×š× ×××עקס. ׊×× ×××ק, ××֞ס ××× ××¢×××¢× × ××©× ×Ö· ××Ö·××ש×ק×Ö·× ×€ÖŒ×š×Öž×××¢× ××× ×× ×¡×ך××Ö·××××× ×§×Öž× - ××× ××× ××¢×××¢× ×€×©×× × ××Š× ×× × ×֞ך××Ö·× ××××€ÖŒ× ×©××××£ ×€×Ö·× ×קש×Ö·× ×Ö·×××× ×Š××עש××¢×× ×××š× Emscripten, ×Öž×עך ××× ×× ××ס×× ×קך×Ö·× ×ַס ך××€× ×××Öž×× ××֞ך ×Ö·× ××ך×Ö·×€ÖŒ ××¢× ×Öž× ×××××, ××× ××× ××¢× ××Öž××¢× × ×¢×¡ ×××Öž×× ×€×ַך××Öž××. setTimeout
×€Ö¿×× ×עך ××××€ÖŒ× ×©××××£ - ×Ö·×××, ×עך ק×Öž× ××× ×ך××× ××× ×× ××××€ÖŒ× ×©××××£ ××עך×Ö·×××Öž× ×Öž× ××¢×××× ×× ×€×š×עך××קע ××עך×Ö·×××Öž×. ך×ך×Öž× ××××£ ×Ö· ×× ×€×Ö·× ×Ö·× ×©××××£ ××× emscripten_sleep
, ××× ×× ×€×š××××¢××¢× ××× ×××עקסעס ×€×ךש×××€×. ×עך ק×Öž× ××× ××€××× ×עך ××Ö·××ש×ק×Ö·× - × ×Öž× ×Ö·××¢, ××× ×€×ַק×, ××× ××Öž× × ×× ××Öž×× ×¢×××¢××¢ ק×Öž× ×××֞ס ׀֌ך××€ÖŒ×¢×š× ×× ××××Ö·×עך ×Ö·× ×Ö·×××ש×Ö·× ×š×Ö·× - ×עך ׀֌ך×ַסעסעך × ×֞ך ק×Ö·×ק××Ö·××××¥ ע׀֌עס ××× ×עך עקך×Ö·× ××× ×€ÖŒ×ך××Ö·××ק×× ×עך×××Ö·× ××ק×. ×Öž×עך, ×× ×€×š××××¢××¢× ××Öž×× × ××©× ××Ö·××× ××֞ך×: ××× ×§×¢×× ××ך××€×ך×× × ×××Öž×× ×€×©×× ×¢× ×××§× ×©××× ×Öž× ×§××× ××××¡× ×¢××¢× ×Öž×עך עךך×֞ךס. ××× ××¢× ××Öž××¢× × ××× ××¢××¢×× ××× ××××£ עס, ×Öž×עך, ק×ק ×€×֞ך××ס, ××× ×××¢× ××Öž×× ×Ö·× ×× ×€ÖŒ×š×Öž×××¢× ××× ××¢×××¢× ××֞ס: ×× ×§×֞ך×Öž×××× ×¢ ק×Öž×, ××× ×€×ַק×, ××× × ××©× × ××Š× setTimeout
(×Öž×עך ×××Ö· ××× ×ס×עך × ××©× ××× ×Öž×€× ××× ××ך ××× ×ך×Ö·×××): ×€×× ×§×Š××Öž× ××š× emscripten_yield
׀ש×× ×©××¢×× ×× ××ס×× ×קך×Ö·× ×ַס ך××€× ×€×Öž×. ×× ××× ×Š×¢ ×€×× × ××× ×Ö·× emscripten_coroutine_next
××× × ××©× ×Ö·× ××ס×× ×קך×Ö·× ×ַס ×€Ö¿×× ×§×Š××¢: ××× ×¢××××× ×ק עס ×שעקס ×× ×€×Öž×, ××ַש××¢××ק עס ××× ×ך×Ö·× ×¡×€×¢×š×¡ ק×Öž× ×ך×Öž× ×Š× ××× ×¢×¡ ××× ××ךף. ×Ö·× ×××, ×× ××¢×עך×× × ×€×× ×× ×Öž× ××××× ×¢× ×ס ××֞ך×. ×עך ׀֌ך×Öž×××¢× ××× ××¢×××¢× ×Ö·× ×š×¢×× ×Š× × ×׊×-× ×Öž×-׀ך××, ×××֞ס ××× ×ך××ס ×××¢× ×× ×§×֞ך×Öž×××× ×¢ ××¢×§× ××× ××¢×××¢× ×€×ַךקך××€ÖŒ×× ×š×¢×× ×Š× ××¢× ×€×Ö·×§× ×Ö·× ××× ××Öž×× × ××©× × ×Öž×××Ö·×× ×Ö· ××××××ק ש××š× ×€×× ×§×Öž× ×€×× ×× ××××ס××× × ×§×֞ך×Öž×××× ×¢ ××Ö·×§×¢× ×, ×× ×€×× ×§×Š××¢ qemu_in_coroutine
×××××¢×§×¢×š× ××ת ×××¢× ××× ×€×Ö·×§× ×¢×¡ ××Öž× ××Öž×× ×××××¢×§×¢×š× ×€×Ö·×ש. ×× × ×× × ××¢×€×ך × × ×š××£ emscripten_yield
, ××××¢ ך ×°×¢×××¢ ך ×¢ × ×× × × ×ש × ××¢×°×¢ × ×§×²× ×¢ ך ××××€ × ×©××ק emscripten_coroutine_next
, ×עך ×Öž× ××××× ×Ö·× ×€×Öž××××Ö·× ×Š× ×× ×©×€ÖŒ××¥, ×Öž×עך × ×× setTimeout
, ×° × ×× × ×× × ×©×× × ××¢×××× , ×× × × ×ש × ××¢×°×¢ × ×××ס×עש××¢×× .
××ש×Ö·×××ַסקך××€ÖŒ× ×§×Öž× ××ך
××× ××Öž, ××× ×€×ַק×, ××× ×× ×Š×××¢×××× "׊×ך××§×§×¢×š× ×× ××× ×¡× ×€×××ש." × ××©× ×¢××. ×€×× ×§×ךס, ×××× ××ך ××××€× ×§×¢×× ××× ××¢× ×××¢×עךעך, ââ××× Node.js ××× ×¢×¡, ××¢××Öž××, ××¢××××× ×××¢×, × ×Öž× ×××©×¢× ×¢×š××××× × ×§×Öž× ××× ×§×¢××, ××ך ××ַק×××¢× ××֞ך ×€×Ö·×ש ××ש×Ö·×××ַסקך××€ÖŒ×. ×Öž×עך × ×Öž×, ×¢×××¢××¢ ××× ×€×× ×€×Ö·×š×§×¢×š× ×ך×Ö·× ×¡×€×֞ך××ַ׊××¢.
עךש×עך, ×Ö· ×××¡× ×××¢×× ××× ×§×¢×× ×ַך××¢×. ××××¢ ×××× ××ך ×××××: ××× ××× × ××©× ×Ö· ×€×Ö·×××Ö·× ×§×¢×× ××¢×××¢××֞׀֌עך ××× ×××× ×§×Ö·× ×§×××ש×Ö·× × ×§×¢× ×××× ×€×Ö·×ש ××× ×¢×××¢××¢ עך×עך. ××× ××× ××Öž××, "×עך ×××× ×× × ×€×× ×עך ת֌×××× ××ַךף × ××©× ×Š×× ×××€×€×Ö·×× ××× ×× ×××× ×× × ×€×× ×× ×עךעך, ââ×× ×ַקס××Öž××Ö·××ק ××× ×¡×××× ×€×× ×€ÖŒ×¢×Ö·× ×Öž." קע×× ××× ×Ö· ×××עך × ××עך ×€×× ×עש×××Š× ××Ö·×¡× ×ַךק×Ö·×עק××©×¢×š× ××× ×€Ö¿×ַך ××¢×עך עס ××× ×Ö· ×××¢×××××Ö·×עך ××× target-i386
. ×××¢× ××ך ××××¢×, ××ך ×§×¢× ×¢× ×¡×€ÖŒ×¢×Š××€×׊××š× ×©×××Š× ×€Ö¿×ַך ×¢×××¢××¢ ××Ö·×¡× ×ַךק×Ö·×עק×שעך×, ×Öž×עך ×עך ךע×××××Ö·× ×××¢× × ×֞ך ×××× ×¢×××¢××¢ ×××× ×¢×š××. ×עך ק×Öž× ×Š× ×©×××Š× ×× ××Ö·×¡× ×ַךק×Ö·×עק×שעך, ××× ×§×¢×š, ×××©×¢× ×¢×š×××¥ ×¢×××¢××¢ ×× ×¢×š××¢× ×§×¢×× ×ַ׀֌עך××ש×Ö·× ×, ×××֞ס ×× TCG (Tiny Code Generator) ש××× ×××š× ×¡ ××× ××ַש×× ×§×Öž× ×€Ö¿×ַך ×עך ××Ö·××¢××֞ס ×ַךק×Ö·×עק×שעך. ××× ×¡×××××× ××× ×× ×š×¢×Ö·×××¢ ×עקע ××× ×× tcg ×××¢×××××Ö·×עך, ××֞ס ××× ××¢×××¢× ×¢×š××××©× ×Ö·×× ×××× ×€×× ×Ö· ךע×××עך C ק×Ö·××€ÖŒ×××עך, ×××֞ס ××× ×©×€ÖŒ×¢×עך ×Ö·××Ö·×€ÖŒ××× ×€Ö¿×ַך JIT. ×עך××עך, ×€Ö¿×ַך ×××ַש׀֌××, ׊×× ×ַךק×Ö·×עק×שעך ××× ×עך××× ×¢× ×€×× ××¢× ××֞ק×××¢× × ××× × ×× ×עך ×Ö· ××Ö·×¡× ×ַךק×Ö·×עק×שעך, ×Öž×עך ×Ö· ××Ö·××¢××֞ס ×ַךק×Ö·×עק×שעך. ××× ×¢×××¢××¢ ×€×× ×, ×× ×× ×עך ק×Öž××€ÖŒ×Öž× ×¢× × ×ך××ס - ק×××× ×ש×ק ק×Öž×× ×× ×עך׀֌ךע×עך (TCI), ×××֞ס ××Öž× ××ס׀××š× ×§×Öž× (×ÖŒ××¢× ×× ××¢×××¢ ×× ×¢×š××¢× ×ַ׀֌עך××ש×Ö·× ×) ××× ×עך ×Ö·××עק ×€×× ×Ö· ק×Öž× ××¢× ×¢×š×Ö·××֞ך ×€Ö¿×ַך ×Ö· ס׀֌ע׊××€×ש ××Ö·××¢××֞ס ×ַךק×Ö·×עק×שעך. ××× ×€×ַק×, ××× ×××× ××ַק××××¢× ×××ש×Ö·× ××××, ×עך ××עך×ע׊עך ×§×¢× × ××©× ×©××¢× ××ק ××ך××€××š× ××× ××¢××× × ××× ×Ö· JIT ק×Öž× ××¢× ×¢×š×Ö·××֞ך, × ×× ××××× ×§×××Ö·× ××××Ö·×××××¢ ××× ×עך××× ×¢× ×€×× ×××ק××Ö·×, ×Öž×עך ×××× ×§×××Ö·××Ö·×××××××××. ××Öž×ש ××× ××× × ××©× ×××עך ×Ö·× ×××× ××ַשך××Ö·××× × ××× ××֞ך ××Ö·×××Ö·××ק.
××× ×¢×š×©×עך ××× ×ע׀ך××××× ×Š× ××Ö·×× ×Ö· ×€××-×€××¢×××©× TCG ××Ö·×§×¢× ×, ×Öž×עך ×עש×××× × ×Š×¢×××©× ××× ×× ×ק×ך ק×Öž× ××× ×Ö· × ×× ××¢××Ö·×ךע ק××֞ך ××ַשך××Ö·××× × ×€×× ×× ×××עק×Öž××¢ ×× ×¡×ך×ַקש×Ö·× ×, ×Ö·××× ××× ××ַש××Öž×¡× ×Š× ××Ö·× ×××ק××¢× ×× TCI ××עך×ע׊עך. ××֞ס ××× ×¢×××¢××¢ ×Ö·××××Ö·× ××××ש××:
- ×××¢× ××ך ×××€ÖŒ××Ö·××¢× ×× × ×Ö· ק×Öž× ××¢× ×¢×š×Ö·××֞ך, ××ך ×§×¢× × ××©× ×§××§× ××× ×× ××ַשך××Ö·××× × ×€×× ×× ×¡×ך×ַקש×Ö·× ×, ×Öž×עך ××××£ ×× ××עך×ע׊עך ק×Öž×
- ××ך ×§×¢× ×¢× ×××©×¢× ×¢×š××× ×€×Ö·× ×קש×Ö·× × × ×× ×€Ö¿×ַך ××¢×עך ×××עך×ע׊×× × ×××֞ק ××¢×€ÖŒ××Öž× ×עך×, ×Öž×עך, ×€Ö¿×ַך ×××ַש׀֌××, ××××× × ×Öž× ×× ××× ×עך×עך ××ך××€×ך×× ×
- ×××× ×× ×××©×¢× ×¢×š××××Ö·× ×§×Öž× ×¢× ×עך×× ××¢× (××× ××֞ס ×××× × ×Š× ×××× ××¢×××¢×, ×××× ×ש׀×× ×××× ×× ×€×Ö·× ×קש×Ö·× × ××× × ×¢××¢× ××× ×× ×××Öž×š× ××Ö·××¢), ××× ×××¢× ××Ö·×š×€Ö¿× ×Š× ×€×ַךקך××€ÖŒ×× ×× ×××©×¢× ×¢×š××××Ö·× JS ק×Öž×, ×Öž×עך ××× ××× ×ס×עך ××× ×××¢× ××Öž×× ×¢×€ÖŒ×¢×¡ ×Š× ×š××××©×¢× ×¢×š××× ×¢×¡ ×€Ö¿××
×××¢×× ×× ×ך×× ×€×× ×, ××× ××× × ××©× ×××עך ×Ö·× ×€ÖŒ×Ö·××ש×× × ××× ××¢×××¢× × ×Öž× ×× ×§×Öž× ××× ×¢×§×¡×ַק××××Ö·× ×€Ö¿×ַך ×× ×¢×š×©×עך ××Öž×, ×Öž×עך ×× ×¢×š×©×עך ׊×××× ×€×× ×§×× ××¢× ×¢× ××¢× ××.
××××עס, ×עך ק×Öž× ××× ××¢×××¢× ×××©×¢× ×¢×š××××Ö·× ××× ×× ×€×Öž×š×¢× ×€×× ×Ö· ×ך××ס ××ַש××××¢× ××× ×× ×Ö·×ךעס ×€×× ×עך ×֞ך×××× ×¢× ×××עק×Öž× ××××¢×, ×Öž×עך ××¢×š× ×Öž×, ××¢××¢× ×§× ××¢× ×ַך×××§× ×××¢×× ×¢×סקך××€ÖŒ××¢×, ×Ö·×€ÖŒ××Ö·××Ö·×××ש×Ö·× ×€×× ×××©×¢× ×¢×š××××Ö·× JS ××× ×š×¢××Öž×€ÖŒ×× ×, ××× ××ַש××Öž×¡× ×Š× ×××©×¢× ×¢×š××× ×עך ××¢× ×ש ק×Öž×, ס׀֌ע׊××¢× ××× × ×¢×¡ ××× ×¢××€ÖŒ×ך×ק××. עס ××Öž× ××× ×××ס××¢×ך××× ×Ö·× ×עך ××××× ×€ÖŒ×Öž××׊××¢ ×€×× × ××× ×× ×××עך×ע׊×× × ×××֞ק ××× ×××× ×Öž× ××××. × ×× ×€×š×עך ××¢×××× ××× ××¢×××, × ×Öž× ×Ö· ×שעת ××ך ××Öž×× ×Ö· ק×Öž× ××¢× ×¢×š×Ö·××֞ך ×××֞ס ×××©×¢× ×¢×š××××Ö·× ×§×Öž× ××× ×׀ס (×Öž××××× ×Öž× ××׀֌ס). ××עך ש××¢×× ×××ק, עס קך×ַש×, ××¢×× ×Ö· ×Öž× ××Öž× ×Ö·× ×× ×× ×¡×ך×ַקש×Ö·× × ××¢× ×¢× ×€×× ×¢×××¢××¢ ×€×Ö·×ש ××¢× ×. ×עך׊×, ×× ×ע׊××¢ ××××¢× ××× ××¢× ×š×¢×§×ךס××Öž× ××ך×× ××× ××¢×××¢× brcond
. ×Öž×ק××, ××× ×××¢× ××××× ×Ö·× ××××¢× ×ק×Ö·× ×שעק ×Š× ×עך ××ך ×€×× ××¢× ××××¢× ××××עך ××× × ×Öž× ×× ×š×¢×§×ךס××××¢ ך××€× ××× ... × ×× ×××× ×¢×š ×€×× ××× ××× ××¢×××¢× ×¢×§×¡×ַק××××Ö·×, ×Öž×עך × ×Öž× ×× ××ַש××¢×××§× ××ַש××××¢× ××× × ×Öž× × ×× ×Ö·× ×עךש. ××× ×× ×¡××£, × ×Öž× ××¢××¢×š× × ×× ×××©×¢× ×¢×š××××Ö·× ×§×Öž×, ××× ×××× ××¢××¢× ×Ö·× × ×Öž× ×× ××ַש××××¢×, ×עך ×××Ö·×× ×Š× ×× ×§×š×Ö·× × ××××¢× ××× ×š×××Öž×××× ×€×× ×× ×Öž× ××××× ××× ××× ××ס××Öž××¢ ×Öž×××עךך×××Ö·× ×××š× ×× ×××©×¢× ×¢×š××××Ö·× ××ש×Ö·×××ַסקך××€ÖŒ× ×§×Öž×. ××× ×××× ××× ××× ×ך××ס×עש××¢××. ×€×ַך××š×¢×¡×¢×š× ×× ××ַ׀עך ×€×× ×××× ××¢×××××× ×Š× ×Š×¢× ××× × ××©× ××¢×€Ö¿××š× ×Š× ×¢×€ÖŒ×¢×¡, ××× ×¢×¡ ××× ××¢××××š× ×§××֞ך ×Ö·× ×× ×§×Öž× ××¢× ×¢×š×Ö·××֞ך ××× ×€×××¡× ××ק ××× ×§×š××××. ××ך ×××× ××¢×××× ××©×¢×§× ×× ××ך ××¢× ×¢× × ××©× ×ך××עך ×× ××š×¢× ×¢×Š× ×€×× ××¢× ×ע׊×××× ××, ××× ×××× ××ך ×××× ××ס ××¢×××, ××× ×ך××ס××¢×× ×× ××ךעס ×€×× ××¢× ×§×××¢× ×××× ×× ××× × ××× ×ס ס×××, ××× ××ך ×××× ×§×¢× ×¢× ×××××עך ×× ×€×ך×. ××× ×Ö·××ש×Ö·×, ××֞ס ס×Ö·×××× ×× ×€ÖŒ×š×Öž×××¢× "×××֞ס ×××©×¢× ×¢×š××××Ö·× ×€×Ö·× ×קש×Ö·× × ××Öž× ×××× ×× ×××Ö·××Ö·×××××Ö·× ×××× ××֞ס ש××ק ×€×× ×××עק×Öž××¢ ××× ×€××š×¢× ×עך×?" - ××××× ×× ×€Ö¿×× ×§×Š××¢ ×××֞ס ק×֞ך×ַס׀֌×Ö·× ×× ×Š× ××¢× ×××עך×ע׊×× × ×××֞ק ××ַךף ×××× ×× ×××Ö·××Ö·×××××Ö·×. ×××š× ××¢× ×××¢×, ××Öž×ש ××× ××××Ö·×× ×Ö·××¥ ××× Chromium (××× × ××× × ××Š× Firefox ××× ×¢×¡ ××× ×ך×× ×עך ×€Ö¿×ַך ××ך ×Š× × ××Š× ×Ö· ××Ö·××× ×עך ×××¢×עךעך ×€Ö¿×ַך ×קס׀֌עך×Ö·××Ö·× ×¥), Firefox ××¢××Öž××€Ö¿× ××ך ך××××ק ×× ×§×Ö·××€ÖŒ×Ö·××Ö·××××Ö·××× ××× ×× asm.js × ×֞ך××Ö·×, × ×Öž× ×××֞ס ×× ×§×Öž× ×× ××¢××××× ×Š× ×ַך××¢×× ×€×ַס×עך ××× ×§×š×Öž××××Ö·×.
×××ַש׀֌×× ×€×× ×××©×¢× ×¢×š××××Ö·× ×§×Öž×
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"]
ס×Öž×£
×Ö·×××, ×× ×ַך××¢× ××× × ×Öž× × ××©× ××¢×¢× ××ק×, ×Öž×עך ××× ××× ××× ×€×× ×עס×Öž× ××š×¢× ××¢× ××¢× ××Ö·× ×-×עך××× ×§×Ö·× ×¡×ך×ַקש×Ö·× ×Š× ×€ÖŒ×¢×š×€×¢×§×©×Ö·×. ×עך׀×ך ××× ××× ××ש×××¡× ×ך××ס׊×××¢×× ×××ס ××× ××× ×ע׊×. ×עך ק×Öž× ××× ×Ö· ×××¡× ×¡×§×¢×š× ××× ×¢×š×עך, ××××Ö·× ××֞ס ××× ×Ö·× ×¢×§×¡×€ÖŒ×¢×š×××¢× ×, ××× ×¢×¡ ××× × ××©× ×§××֞ך ××× ×©×××Ö·×× ×××֞ס ××ַךף ×××× ××¢×××. ××ס××Öž××¢, עס ××× ×××¢×š× ×Š× ×ַך××ס××¢×× × ×֞ך××Ö·× ×Ö·××Öž××שע ק×Ö·×××¥ ××××£ ש׀֌××¥ ×€×× ×¢×××¢××¢ ×עך ××Öž××¢×š× ××עךס××¢ ×€×× ââââקע××. ×עך×××²Ö·× ××× ××× ××××Ö· ×Ö· ×€Ö¿×Öž××¢× ××× ×Ö· ×××Öž×֟׀ֿ×֞ך××Ö·×: ×€Ö¿×ַך ××¢×× "××ך××", ×××֞ס ××× ××ײַ×× ×¡ ע׀֌עס ××ך×××¢××Ö·× ××¢×, ××× ×Š×××¢××××× ××¢×××Öž×š× ×Ö· ××¢××Ö·××עך ק×Öž××¢× ××ַך ××××£ ך×ס×ש. ×ַק×××Ö·×××, ×עך ×ַך×××§× ××× ××× ×Ö· ×ך××ס ××֞ס ×Ö· ך××××××× × ×€×× ×× ××¡×§× × git log
.
××ך ×§×¢× ×¢× ×€ÖŒ×š××××š× ×¢×¡ ×Ö·××¢
×××֞ס ××× ×©××× ×ך××¢××:
- x86 ×××ך×××Ö·× ×€ÖŒ×š×ַסעסעך ×€×××¡× ××ק
- עס ××× ×Ö· ×ך××¢×× ×€ÖŒ×š×Öž×××Ö·××××€ÖŒ ×€×× ×Ö· JIT ק×Öž× ××¢× ×¢×š×Ö·××֞ך ×€×× ××ַש×× ×§×Öž× ×Š× ××ש×Ö·×××ַסקך××€ÖŒ×
- עס ××× ×Ö· ××ס×עך ×€Ö¿×ַך ×ַסע×××Ö·××× × ×× ×עךע 32-×××¡× ××Ö·×¡× ×ַךק×Ö·×עק×שעך×: ךע×× ×××Š× ××ך ×§×¢× ×¢× ××Ö·×××× ××¢×š× ××× ×קס ×€Ö¿×ַך ×× ××׀֌ס ×ַךק×Ö·×עק×שעך ׀ך××× ××× ××¢× ×××¢×עךעך ××× ×× ××Öž×××× × ××× ×¢
×××֞ס ×Ö·× ×עךש ×§×¢× ×¢× ××ך ××Öž×
- ×€×ַך××××¢×š× ×¢×××Ö·×××ש×Ö·×. ××€××× ××× JIT ××Öž××¢ עס ס××× ×Š× ××××€× ×¡××Öž×עך ××× ×××ך×××Ö·× ×§×¡ 86 (×Öž×עך עס ××× ×€ÖŒ×Ö·××¢× ×ש×Ö·×× ×Ö· ××Ö·× ×¥ קע×× ××× ×Ö· ×€ÖŒ××Ö·×¥ ×€×× ×¢×××Ö·×××××× ××Ö·×× ×××Ö·×š× ××× ×ַךק×Ö·×עק×שעך×)
- ×Š× ××Ö·×× ×Ö· × ×֞ך××Ö·× ×Š×××× × - ׀ך×Ö·× ×ק××, ××× ××× × ××©× ×Ö· ××× ×××¢× ××¢×××¢××֞׀֌עך, ×Ö·××× ×××Š× ××× ××Öž×× ×š×××Ö·× ×× × ×֞ך××Ö·× ×¢×סקך××€ÖŒ××¢× ×©×Öž× ××× ×עס×עך ××× ×§×¢× ×¢×
- ׀֌ך×ÖŒ××× ×Š× ×§×Ö·×עך ×עך ק×Öž××€ÖŒ××׊××š× Qemu ×€×Ö·× ×קש×Ö·× × - × ×¢××××֞ךק×× ×, VM ×××ך×Ö·×××Öž×, ×¢×ק.
- UPD: ××ך ×××¢× ××Ö·×š×€Ö¿× ×Š× ×€×֞ך××××× ×××× ×××¡× ×××××¢××Ö·×€ÖŒ××Ö·× ×¥ ××× ×ש×ק ך××€ÖŒ×֞ךץ ×Š× Emscripten ×ַ׀֌ס×ך××, ××× ×× ×€×š×עך××קע ×€ÖŒ×֞ך×עךס ×€×× ×§×¢×× ××× ×× ×עךע ׀֌ך×Ö·××שעקס. ××Ö·× ×§ ×Š× ××× ×€Ö¿×ַך ××× ×§×¢× ×¢× ×××€ÖŒ××ס×Ö·× × ××Š× ×××עך ׊×ש×××ַעך ×Š× ×¢×סקך××€ÖŒ××¢× ××× ×Ö· ×××× ×€×× ×××× ×ַך××¢×.
×ק×ך: www.habr.com