QEMU.js: рдЕрдм рдЧрдВрднреАрд░рддрд╛ рд╕реЗ рдФрд░ WASM рдХреЗ рд╕рд╛рде

рдПрдХ рдмрд╛рд░ рд╣рдБрд╕реА рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдЙрд▓рдЯрдлреЗрд░ рдХреЛ рд╕рд╛рдмрд┐рдд рдХрд░рдиреЗ рдФрд░ рдорд╢реАрди рдХреЛрдб рд╕реЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ (рдпрд╛ рдпреЛрдВ рдХрд╣реЗрдВ, Asm.js) рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдЬрд╛рдирдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред QEMU рдХреЛ рдкреНрд░рдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛, рдХреБрдЫ рд╕рдордп рдмрд╛рдж рд╣реИрдмрд░ рдкрд░ рдПрдХ рд▓реЗрдЦ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ред рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ, рдореБрдЭреЗ WebAssembly рдкрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рд░реАрдореЗрдХ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреА рдЧрдИ рдереА, рдФрд░ рдореБрдЭреЗ рд╕реНрд╡рдпрдВ рдРрд╕рд╛ рдорд╣рд╕реВрд╕ рдирд╣реАрдВ рд╣реБрдЖ рдерд╛ рдХрд┐ рд▓рдЧрднрдЧ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЪреБрдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рд╕реНрд╡рдпрдВ рдЫреЛрдбрд╝ рд░рд╣рд╛ рд╣реВрдВ ... рдХрд╛рдо рдЪрд▓ рдЧрдпрд╛, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рдзреАрд░реЗ-рдзреАрд░реЗ, рдФрд░ рдЕрдм, рдЙрд╕ рд▓реЗрдЦ рдореЗрдВ, "рдпрд╣ рдХреИрд╕реЗ рд╕рдорд╛рдкреНрдд рд╣реБрдЖ?" рд╡рд┐рд╖рдп рдкрд░ рдПрдХ рдЯрд┐рдкреНрдкрдгреА рджрд┐рдЦрд╛рдИ рджреАред рдореЗрд░реЗ рд╡рд┐рд╕реНрддреГрдд рдЬрд╡рд╛рдм рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рд╕реБрдирд╛ "рдпрд╣ рдПрдХ рд▓реЗрдЦ рдкрд░ рдЦреАрдВрдЪрддрд╛ рд╣реИред" рдЦреИрд░, рдЕрдЧрд░ рдпрд╣ рдЦреАрдВрдЪрддрд╛ рд╣реИ, рддреЛ рдПрдХ рд▓реЗрдЦ рд╣реЛрдЧрд╛ред рд╢рд╛рдпрдж рдХреЛрдИ рдХрд╛рдо рдЖрдПрдЧрд╛ред рдЗрд╕рд╕реЗ, рдкрд╛рдардХ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рддрдереНрдпреЛрдВ рдХреЛ рд╕реАрдЦрддрд╛ рд╣реИ, рдХреНрдпреВрдИрдПрдордпреВ рдХреЛрдб рдкреАрдврд╝реА рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рд╕рд╛рде рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдЬрд╕реНрдЯ-рдЗрди-рдЯрд╛рдЗрдо рдХрдВрдкрд╛рдЗрд▓рд░ рдХреИрд╕реЗ рд▓рд┐рдЦрддрд╛ рд╣реИред


рдХрд╛рд░реНрдп


рдЪреВрдВрдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдЬрд╛рди рд▓рд┐рдпрд╛ рдерд╛ рдХрд┐ рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ QEMU рдХреЛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдХреИрд╕реЗ рдкреЛрд░реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рдмрд╛рд░ рдЗрд╕реЗ рдмреБрджреНрдзрд┐рдорд╛рдиреА рд╕реЗ рдХрд░рдиреЗ рдФрд░ рдкреБрд░рд╛рдиреА рдЧрд▓рддрд┐рдпреЛрдВ рдХреЛ рди рджреЛрд╣рд░рд╛рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ред


рд╕рдордп рдХреА рддреНрд░реБрдЯрд┐ рд╕рдВрдЦреНрдпрд╛: рдмрд┐рдВрджреБ рд░рд┐рд▓реАрдЬ рд╕реЗ рд╢рд╛рдЦрд╛


рдореЗрд░реА рдкрд╣рд▓реА рдЧрд▓рддреА рдЕрдкрд╕реНрдЯреНрд░реАрдо рд╕рдВрд╕реНрдХрд░рдг 2.4.1 рд╕реЗ рдореЗрд░реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╢рд╛рдЦрд╛ рджреЗрдирд╛ рдерд╛ред рддрдм рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рдерд╛: рдпрджрд┐ рдмрд┐рдВрджреБ рд░рд┐рд▓реАрдЬрд╝ рдореМрдЬреВрдж рд╣реИ, рддреЛ рдпрд╣ рд╕рдВрднрд╡рддрдГ рдПрдХ рд╕рд╛рдзрд╛рд░рдг 2.4 рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╕реНрдерд┐рд░ рд╣реИ, рдФрд░ рдЗрд╕рд╕реЗ рднреА рдЕрдзрд┐рдХ master рд╢рд╛рдЦрд╛ рд╣реИред рдФрд░ рдЬрдм рд╕реЗ рдореИрдВ рдЕрдкрдиреЗ рдХреАрдбрд╝реЗ рдХреА рдЙрдЪрд┐рдд рдорд╛рддреНрд░рд╛ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣рд╛ рдерд╛, рдореБрдЭреЗ рдЕрдЬрдирдмреА рдХреА рдмрд┐рд▓реНрдХреБрд▓ рднреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рдереАред рддреЛ рд╢рд╛рдпрдж рдРрд╕рд╛ рд╣реА рд╣реБрдЖред рд▓реЗрдХрд┐рди рдпрд╣рд╛рдБ рдмреБрд░рд╛ рднрд╛рдЧреНрдп рд╣реИ: QEMU рдЕрднреА рднреА рдЦрдбрд╝рд╛ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдХреБрдЫ рдмрд┐рдВрджреБ рдкрд░ рд╡реЗ рднреА 10. рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдкреНрд░рддрд┐рд╢рдд рдХреЛрдб рдХреЗ рдЕрдиреБрдХреВрд▓рди рдХреА рдШреЛрд╖рдгрд╛ рдХреА "рд╣рд╛рдБ, рдЕрдм рдореИрдВ рдардВрдб рд╣реВрдБ," рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдФрд░ рдЯреВрдЯ рдЧрдпрд╛ ред рдпрд╣рд╛рдВ рд╣рдореЗрдВ рдПрдХ рд╡рд┐рд╖рдпрд╛рдВрддрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП: QEMU.js рдХреЗ рдПрдХрд▓-рдереНрд░реЗрдбреЗрдб рдкреНрд░рдХреГрддрд┐ рдФрд░ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рдореВрд▓ QEMU рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ (рдЕрд░реНрдерд╛рдд, рдпрд╣ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдЕрд╕рдВрдмрдВрдзрд┐рдд рдХреЛрдб рдкрдереЛрдВ рдХреЛ рд╕рдВрдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдФрд░ рди рдХреЗрд╡рд▓ "рд╕рднреА рдХрд░реНрдиреЗрд▓ рдкреНрд▓рдЧ рдХрд░реЗрдВ"), рдореБрдЦреНрдп рдХрд╛рд░реНрдп рдмрд╛рд╣рд░ рд╕реЗ рдХреЙрд▓ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рд▓рд┐рдП "рдмрд╛рд╣рд░ рдмрд╛рд░реА" рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдЗрд╕рд╕реЗ рдХреБрдЫ рдкреНрд░рд╛рдХреГрддрд┐рдХ рд╡рд┐рд▓рдп рдХреА рд╕рдорд╕реНрдпрд╛рдПрдВ рдкреИрджрд╛ рд╣реБрдИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рддрдереНрдп рдХрд┐ master рд╢рд╛рдЦрд╛ рд╕реЗ рдХреБрдЫ рдмрджрд▓рд╛рд╡, рдЬрд┐рдирдХреЗ рд╕рд╛рде рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ рдорд░реНрдЬ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдереА, рдХреЛ рднреА рдкреЙрдЗрдВрдЯ рд░рд┐рд▓реАрдЬрд╝ рдореЗрдВ рдЪреЗрд░реА рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛ (рдФрд░, рдЗрд╕рд▓рд┐рдП, рдореЗрд░реА рд╢рд╛рдЦрд╛ рдореЗрдВ), рд╢рд╛рдпрдж, рд╕реБрд╡рд┐рдзрд╛ рдирд╣реАрдВ рдЬреЛрдбрд╝реЗрдВрдЧреЗред


рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореИрдВрдиреЗ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рд╡реИрд╕реЗ рднреА рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдмрд╛рд╣рд░ рдлреЗрдВрдХ рджреЛ рднрд╛рдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреБрджрд╛ рдФрд░ рдХреБрдЫ рдирдпрд╛ рдФрд░ рдЕрдм master рд╕реЗ рдЖрдзрд╛рд░рд┐рдд рдЦрд░реЛрдВрдЪ рд╕реЗ рдПрдХ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдирд┐рд░реНрдорд╛рдгред


рдЧрд▓рддреА рдирдВрдмрд░ рджреЛ: рдЯреАрдПрд▓рдкреА рдкрджреНрдзрддрд┐


рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдПрдХ рдЧрд▓рддреА рдирд╣реАрдВ рд╣реИ, рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ - рдпрд╣ "рдЬрд╣рд╛рдВ рдФрд░ рдХреИрд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рд╣реИ?" рдХреА рдкреВрд░реА рдЧрд▓рддрдлрд╣рдореА рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдиреЗ рдХреА рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ, рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ "рдХреНрдпрд╛ рд╣рдо рд╡рд╣рд╛рдВ рдкрд╣реБрдВрдЪреЗрдВрдЧреЗ?" рдЗрди рд╢рд░реНрддреЛрдВ рдХреЗ рддрд╣рдд, рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдПрдХ рдЙрдЪрд┐рдд рд╡рд┐рдХрд▓реНрдк рдерд╛, рд▓реЗрдХрд┐рди, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдореИрдВ рдЗрд╕реЗ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рджреЛрд╣рд░рд╛рдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдЗрд╕ рдмрд╛рд░ рдореИрдВ рдЗрд╕реЗ рдмреБрджреНрдзрд┐рдорд╛рдиреА рд╕реЗ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛: рдкрд░рдорд╛рдгреБ рдХрдорд┐рдЯ, рдЬрд╛рдирдмреВрдЭрдХрд░ рдХреЛрдб рдореЗрдВ рдмрджрд▓рд╛рд╡ (рдФрд░ "рд╡рд░реНрдгреЛрдВ рдХреЗ рд╕рд╛рде рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╡рд░реНрдгреЛрдВ рдХреЛ рдПрдХ рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдпрд╣ (рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде)", рдЬреИрд╕рд╛ рдХрд┐ рд▓рд┐рдиреБрд╕ рдЯреЙрд░реНрд╡рд╛рд▓реНрдбреНрд╕ рдиреЗ рдПрдХ рдмрд╛рд░ рдХрд┐рд╕реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд╣рд╛ рдерд╛, рдпрджрд┐ рдЖрдк рд╡рд┐рдХрд┐рдЯрдиреА рдХреЛ рдорд╛рдирддреЗ рд╣реИрдВ), рдЖрджрд┐ред


рдЧрд▓рддреА рдирдВрдмрд░ рддреАрди: рдкрд╛рдиреА рдореЗрдВ рдЪрдврд╝рдиреЗ рдХрд╛ рдХрд╛рдВрдЯрд╛ рдирд╣реАрдВ рдЬрд╛рдирдирд╛


рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЗрд╕рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдирд╣реАрдВ рдкрд╛рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдм рдореИрдВрдиреЗ рдХрдо рд╕реЗ рдХрдо рдкреНрд░рддрд┐рд░реЛрдз рдХреЗ рдорд╛рд░реНрдЧ рдХрд╛ рдкрд╛рд▓рди рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдФрд░ рдЗрд╕реЗ "рдПрдХ рд╡рдпрд╕реНрдХ рддрд░реАрдХреЗ рд╕реЗ" рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрд░реНрдерд╛рддреН, рдЦрд░реЛрдВрдЪ рд╕реЗ рдЕрдкрдиреЗ рдЯреАрд╕реАрдЬреА рдмреИрдХреЗрдВрдб рдХреЛ рд▓рд┐рдЦреЗрдВ, рддрд╛рдХрд┐ рдореИрдВ рдмрд╛рдж рдореЗрдВ рдпрд╣ рди рдХрд╣реВрдВ, "рд╣рд╛рдВ, рдпрд╣ рдмреЗрд╢рдХ, рдзреАрд░реЗ-рдзреАрд░реЗ, рд▓реЗрдХрд┐рди рдореИрдВ рд╕рдм рдХреБрдЫ рдирд┐рдпрдВрддреНрд░рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ - рдЯреАрд╕реАрдЖрдИ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦрд╛ рд╣реИ ... "ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╢реБрд░реВ рдореЗрдВ рдпрд╣ рдПрдХ рд╕реНрдкрд╖реНрдЯ рд╕рдорд╛рдзрд╛рди рдХреА рддрд░рд╣ рд▓рдЧ рд░рд╣рд╛ рдерд╛ , рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдмрд╛рдЗрдирд░реА рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░ рд░рд╣рд╛ рдерд╛ ред рдЬреИрд╕рд╛ рдХрд┐ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, "рдореИрдВрдиреЗ рдЧреЗрдиреНрдЯ рдПрдХрддреНрд░ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдирд╣реАрдВ рдХрд┐ рдПрдХ": рдХреЛрдб рдмреЗрд╢рдХ, рдмрд╛рдЗрдирд░реА рд╣реИ, рд▓реЗрдХрд┐рди рдирд┐рдпрдВрддреНрд░рдг рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рдЗрд╕реЗ рд╕рдВрдХрд▓рди рдХреЗ рд▓рд┐рдП рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдзрдХреЗрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЬреЗрдПрд╕ рджреБрдирд┐рдпрд╛ рд╕реЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╡рд╕реНрддреБ рд╣реИ, рдЬреЛ рдЕрднреА рднреА рдХрд╣реАрдВ рди рдХрд╣реАрдВ рдмрдЪрд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдкрд░ рд╕рд╛рдзрд╛рд░рдг RISC рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рд▓рд┐рдП, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ, рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реНрдерд┐рддрд┐ рдХреЛ рдкреБрдирд░реНрдирд┐рд░реНрдорд┐рдд рдХреЛрдб рдХреЗ рд▓рд┐рдП рдЕрдиреБрджреЗрд╢ рдХреИрд╢ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдлреНрд▓рд╢ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рдпрджрд┐ рдпрд╣ рд╡рд╣ рдирд╣реАрдВ рд╣реИ рдЬреЛ рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдП, рддреЛ рдХрдо рд╕реЗ рдХрдо рдпрд╣ рдХрд░реАрдм рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдкрдиреЗ рдЖрдЦрд┐рд░реА рдкреНрд░рдпрд╛рд╕ рд╕реЗ, рдореИрдВрдиреЗ рд╕реАрдЦрд╛ рдХрд┐ рдирд┐рдпрдВрддреНрд░рдг рдХреЛ рдЕрдиреБрд╡рд╛рдж рдмреНрд▓реЙрдХ рдХреЗ рдордзреНрдп рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд┐рд╕реА рднреА рдСрдлрд╕реЗрдЯ рд╕реЗ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд┐рдП рдЧрдП рдмрд╛рдИрдЯреЗрдХреЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдФрд░ рд╣рдо рдмрд╕ рдЯреАрдмреА рдкрд░ рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рдЖрдХрд░ рд▓рд╛рдд рдорд╛рд░реА


рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВрдиреЗ рдЬреБрд▓рд╛рдИ рдореЗрдВ рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛, рдЬрд╛рджреБрдИ рдкреЗрдВрдбреЗрд▓ рдХреНрд░реЗрдк рдирд╣реАрдВ рдЖрдпрд╛: рдЖрдорддреМрд░ рдкрд░ рдЧреАрдерд╣рдм рдХреЗ рдкрддреНрд░ рдЗрд╢реНрдпреВ рдФрд░ рдкреБрд▓ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рд╕реВрдЪрдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░, рдЕрдЪрд╛рдирдХ , рд╕рдВрджрд░реНрдн рдореЗрдВ quu рдмреИрдХреЗрдВрдб рдХреЗ рд░реВрдк рдореЗрдВ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдХрд╣рддреЗ рд╣реИрдВ , "рдпрд╣рд╛рдБ рдпрд╣ рд╣реИ- рдЙрдиреНрд╣реЛрдВрдиреЗ рдРрд╕рд╛ рдХреБрдЫ рдХрд┐рдпрд╛, рд╢рд╛рдпрдж рд╡рд╣ рдХреБрдЫ рдХрд╣реЗрдВрдЧреЗред тАЭ рдпрд╣ WASM JIT рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП Emscripten рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдмрд╛рдЗрдирд░реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдерд╛ред рдЦреИрд░, рдореИрдВрдиреЗ рдХрд╣рд╛ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╡рд╣рд╛рдВ рдЕрдкрд╛рдЪреЗ 2.0 рд▓рд╛рдЗрд╕реЗрдВрд╕ рд╣реИ, рдФрд░ рдХреНрдпреВрдИрдПрдордпреВ рдХреЛ GPLv2 рдХреЗ рддрд╣рдд рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рд╡реЗ рдмрд╣реБрдд рд╕рдВрдЧрдд рдирд╣реАрдВ рд╣реИрдВред рдпрд╣ рдЕрдЪрд╛рдирдХ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреЛ рдХрд┐рд╕реА рддрд░рд╣ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛: рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдмрджрд▓ рдЬрд╛рдП, рдбрдмрд▓ рд▓рд╛рдЗрд╕реЗрдВрд╕ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд╢рд╛рдпрдж рдХреБрдЫ рдФрд░ ...)ред рдпрд╣, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдореБрдЭреЗ рдЦреБрд╢ рдХрд░ рджрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрд╕ рд╕рдордп рддрдХ рдХрдИ рдмрд╛рд░ рдмрд╛рдЗрдирд░реА рдкреНрд░рд╛рд░реВрдк WebAssembly рдХреЛ рджреЗрдЦ рдЪреБрдХрд╛ рдерд╛, рдФрд░ рдХрд┐рд╕реА рддрд░рд╣ рдореЗрд░реЗ рд▓рд┐рдП рджреБрдЦреА рдФрд░ рд╕рдордЭ рд╕реЗ рдмрд╛рд╣рд░ рдерд╛ред рдпрд╣рд╛рдБ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдерд╛ рдЬреЛ рд╕рдВрдХреНрд░рдордг рдЧреНрд░рд╛рдл рдХреЗ рд╕рд╛рде рдмреБрдирд┐рдпрд╛рджреА рдмреНрд▓реЙрдХреЛрдВ рдХреЛ рдКрдкрд░ рдЙрдард╛рдПрдЧрд╛, рдФрд░ рдмрд╛рдпрдЯреЗрдХреЛрдб рдЬрд╛рд░реА рдХрд░реЗрдЧрд╛, рдФрд░ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рджреБрднрд╛рд╖рд┐рдпрд╛ рдореЗрдВ рдЗрд╕реЗ рд▓реЙрдиреНрдЪ рднреА рдХрд░ рд╕рдХрддрд╛ рд╣реИред


рддрдм рдХреНрдпреВрдИрдПрдордпреВ рдореЗрд▓рд┐рдВрдЧ рд╕реВрдЪреА рдкрд░ рдПрдХ рдкрддреНрд░ рднреА рдерд╛, рд▓реЗрдХрд┐рди рдЗрд╕ рд╕рд╡рд╛рд▓ рдХреА рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, "рдЗрд╕реЗ рдХрд┐рд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?" рдФрд░ рдпрд╣, рдЕрдЪрд╛рдирдХ , рдЖрд╡рд╢реНрдпрдХ рдерд╛ред рдХрдо рд╕реЗ рдХрдо, рдЖрдк рдРрд╕реЗ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓реЛрдВ рдХреЛ рдПрдХ рд╕рд╛рде рдкрд░рд┐рдорд╛рд░реНрдЬрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рдпрд╣ рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рд╕реНрдорд╛рд░реНрдЯ рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:


  • рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдХреЗ рдХреБрдЫ рднреА рд╢рд┐рдХреНрд╖рдг рд╢реБрд░реВ рдХрд░рдирд╛
  • iOS рдкрд░ рд╡рд░реНрдЪреБрдЕрд▓рд╛рдЗрдЬреЗрд╢рди, рдЬрд╣рд╛рдВ рдХреЗрд╡рд▓ рдЕрдлрд╡рд╛рд╣реЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдордХреНрдЦреА рдкрд░ рдХреЛрдб рдкреАрдврд╝реА рдХрд╛ рдЕрдзрд┐рдХрд╛рд░ рд░рдЦрдиреЗ рд╡рд╛рд▓рд╛ рдПрдХрдорд╛рддреНрд░ рдЖрд╡реЗрджрди JS рдЗрдВрдЬрди рд╣реИ (рдХреНрдпрд╛ рдпрд╣ рд╕рдЪ рд╣реИ?)
  • рдорд┐рдиреА-рдУрдПрд╕ рдкреНрд░рджрд░реНрд╢рди - рдПрдХрд▓-рдбрд┐рд╕реНрдХ, рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд, рдлрд░реНрдорд╡реЗрдпрд░ рдХреЗ рд╕рднреА рдкреНрд░рдХрд╛рд░, рдЖрджрд┐ ...

рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд░рдирдЯрд╛рдЗрдо рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ


рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдХрд╣рд╛, рдХреНрдпреВрдИрдПрдордпреВ рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рд╕реЗ рдмрдВрдзрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдирд╣реАрдВ рд╣реИред рдЦреИрд░, рдпрд╣ рд╣реИ рдХрд┐ рдирд╣реАрдВ рдХреА рддрд░рд╣ ... рдкрд╣рд▓реЗ рддреЛ рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдирд╣реАрдВ рдерд╛, рдлрд┐рд░ рд╡реЗрдмрд╡рд░реНрдХрд░реНрд╕ рджрд┐рдЦрд╛рдИ рджрд┐рдП - рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ, рдпрд╣ рдкрд╛рд░рд╕реНрдкрд░рд┐рдХ рд░реВрдк рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рдЪрд░ рдХреЗ рдмрд┐рдирд╛ рд╕рдВрджреЗрд╢ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рд╣реИред рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдпрд╣ рдПрдХ рд╕рд╛рдЭрд╛ рдореЗрдореЛрд░реА рдореЙрдбрд▓ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдореМрдЬреВрджрд╛ рдХреЛрдб рдХреЛ рдкреЛрд░реНрдЯ рдХрд░рддреЗ рд╕рдордп рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рдорд╕реНрдпрд╛рдПрдВ рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИред рдлрд┐рд░, рдЬрдирддрд╛ рдХреЗ рджрдмрд╛рд╡ рдореЗрдВ, рдЗрд╕реЗ SharedArrayBuffers рдирд╛рдо рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдЙрдиреНрд╣реЛрдВрдиреЗ рдзреАрд░реЗ-рдзреАрд░реЗ рдЗрд╕реЗ рдкреЗрд╢ рдХрд┐рдпрд╛, рдЕрд▓рдЧ-рдЕрд▓рдЧ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рдЗрд╕рдХреЗ рд▓реЙрдиреНрдЪ рдХрд╛ рдЬрд╢реНрди рдордирд╛рдпрд╛, рдлрд┐рд░ рдирдП рд╕рд╛рд▓ рдХрд╛ рдЬрд╢реНрди рдордирд╛рдпрд╛, рдФрд░ рдлрд┐рд░ рдореЗрд▓реНрдЯрдбрд╛рдЙрди ... рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рд╡реЗ рдЗрд╕ рдирддреАрдЬреЗ рдкрд░ рдкрд╣реБрдВрдЪреЗ рдХрд┐ рдЕрд╕рднреНрдп, рд╕рдордп рдорд╛рдкрдиреЗ рдореЗрдВ рдЕрд╢рд┐рд╖реНрдЯрддрд╛ рди рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рд╕рд╛рдЭрд╛ рд╕реНрдореГрддрд┐ рдФрд░ рдХрд╛рдЙрдВрдЯрд░ рдХреЛ рдмрдврд╝рд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рд╡рд╛рд╣ рдХреА рдорджрдж рд╕реЗ, рдпрд╣ рдЕрднреА рднреА рдмрд╣реБрдд рд╕рдЯреАрдХ рд╣реИ ред рдЗрд╕рд▓рд┐рдП рдЙрдиреНрд╣реЛрдВрдиреЗ рд╕рд╛рдЭрд╛ рд╕реНрдореГрддрд┐ рдХреЗ рд╕рд╛рде рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рдХреЛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ рдмрд╛рдж рдореЗрдВ рдЗрд╕реЗ рд╡рд╛рдкрд╕ рдХрд░ рджрд┐рдпрд╛, рд▓реЗрдХрд┐рди, рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдкреНрд░рдпреЛрдЧ рд╕реЗ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рдЬреАрд╡рди рд╣реИ, рдФрд░ рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рд╣рдо рдЗрд╕реЗ рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд┐рдП рдмрд┐рдирд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВрдЧреЗред


рджреВрд╕рд░реА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕реНрдЯреИрдХ рдХреЗ рд╕рд╛рде рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рдЬреЛрдбрд╝рддреЛрдбрд╝ рдХреА рдЕрд╕рдВрднрд╡рддрд╛ рд╣реИ: рдЖрдк рдмрд╕ рд▓реЗ рдирд╣реАрдВ рд╕рдХрддреЗ, рд╡рд░реНрддрдорд╛рди рд╕рдВрджрд░реНрдн рдХреЛ рдмрдЪрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рдирдП рд╕реНрдЯреИрдХ рдХреЗ рд╕рд╛рде рдПрдХ рдирдП рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХреЙрд▓ рд╕реНрдЯреИрдХ рдХреЛ рдЬреЗрдПрд╕ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ, рдХреНрдпрд╛ рд╕рдорд╕реНрдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдордиреЗ рдЕрднреА рднреА рдкреВрд░реНрд╡ рдкреНрд░рд╡рд╛рд╣ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рд╣реИ? рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ QEMU рдореЗрдВ рдмреНрд▓реЙрдХ рдЗрдирдкреБрдЯ-рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдХреЛрд░рдЯрд╛рдЗрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдпрд╣рд╛рдВ рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рд╕реНрдЯреИрдХ рдЬреЛрдбрд╝рддреЛрдбрд╝ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧреАред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдПрдореНрд╕рд┐рдкреНрдЯреЗрди рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдПрдХ рддрдВрддреНрд░ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рджреЛ: Asyncify рдФрд░ Emterpreter ред рдкрд╣рд▓рд╛ рдЙрддреНрдкрдиреНрди рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдХреЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмреНрд▓реЙрдЯрд┐рдВрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЕрдм рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИред рджреВрд╕рд░рд╛ рд╡рд░реНрддрдорд╛рди "рд╕рд╣реА рддрд░реАрдХрд╛" рд╣реИ рдФрд░ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рджреБрднрд╛рд╖рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдмрд╛рдЗрдЯрдХреЛрдб рдХреА рдкреАрдврд╝реА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдзреАрд░реЗ-рдзреАрд░реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХреЛрдб рдХреЛ рдирд╣реАрдВ рдмрдврд╝рд╛рддрд╛ рд╣реИред рд╕рдЪ рд╣реИ, рдЗрд╕ рддрдВрддреНрд░ рдХреЗ рд▓рд┐рдП рдХреЛрд░рдЯрд╛рдЗрди рд╕рдорд░реНрдерди рдХреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рдард╣рд░рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ (рдкрд╣рд▓реЗ рд╕реЗ рд╣реА Asyncify рдХреЗ рддрд╣рдд рд▓рд┐рдЦреЗ рдЧрдП coroutines рдереЗ рдФрд░ Emterpreter рдХреЗ рд▓рд┐рдП рд▓рдЧрднрдЧ рдПрдХ рд╣реА рдПрдкреАрдЖрдИ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдерд╛, рдЖрдкрдХреЛ рдмрд╕ рдЙрдиреНрд╣реЗрдВ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рдерд╛)ред


рдлрд┐рд▓рд╣рд╛рд▓, рдореИрдВ рдЕрднреА рддрдХ WASM рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХреЛрдб рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рдирд╣реАрдВ рд╣реБрдЖ рд╣реВрдВ рдФрд░ рдПрдореНрдЯрд░рдкреЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреА рдЧрдИ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдмреНрд▓реЙрдХ рдбрд┐рд╡рд╛рдЗрд╕ рдЕрднреА рддрдХ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ (рдЕрдЧрд▓реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рджреЗрдЦреЗрдВ, рдЬреИрд╕рд╛ рдХрд┐ рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ ...)ред рдпрд╣реА рд╣реИ, рдЕрдВрдд рдореЗрдВ, рдЖрдкрдХреЛ рдРрд╕реА рдордЬрд╝реЗрджрд╛рд░ рд╕реНрддрд░рд┐рдд рдЪреАрдЬрд╝ рдорд┐рд▓рдиреА рдЪрд╛рд╣рд┐рдП:


  • рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреА рдЧрдИ рдмреНрд▓реЙрдХ I / O рдареАрдХ рд╣реИ, рдХреНрдпрд╛, рдХреНрдпрд╛ рдЖрдкрдиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рджреЗрд╢реА NVMe рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреА рдЙрдореНрдореАрдж рдХреА рдереА? :)
  • рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рд░реВрдк рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдореБрдЦреНрдп QEMU рдХреЛрдб (рдЕрдиреБрд╡рд╛рджрдХ, рдЕрдиреНрдп рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдЙрдкрдХрд░рдг, рдЖрджрд┐)
  • WASM рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдЕрддрд┐рдерд┐ рдХреЛрдб

QEMU рд╕реНрд░реЛрддреЛрдВ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ


рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рд╢рд╛рдпрдж рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рдЪреБрдХреЗ рд╣реИрдВ, рдЕрддрд┐рдерд┐ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рд▓рд┐рдП рдЗрдореНрдпреВрд▓реЗрд╢рди рдХреЛрдб рдФрд░ рдХреНрдпреВрдИрдПрдордпреВ рд╕реЗ рдореЗрдЬрдмрд╛рди рдорд╢реАрди рдирд┐рд░реНрджреЗрд╢ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реИрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдереЛрдбрд╝рд╛ рдкреЗрдЪреАрджрд╛ рдорд╛рдорд▓рд╛ рднреА рд╣реИ:


  • рдЧреЗрд╕реНрдЯ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рд╣реИрдВ
  • рд▓рд┐рдирдХреНрд╕ рдкрд░ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рд╡рд░реНрдЪреБрдЕрд▓рд╛рдЗрдЬреЗрд╢рди (рд╕рдВрдЧрдд рдЕрддрд┐рдерд┐ рдФрд░ рдореЗрдЬрдмрд╛рди рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП) рдХреЗрд╡реАрдПрдо, рдХрд╣реАрдВ рднреА рддреНрд╡рд░рдХ рд╣реИрдВ , рдЬреЗрдЖрдИрдЯреА рдХреЛрдб рдкреАрдврд╝реА рдХреЗ рд▓рд┐рдП рдЯреАрд╕реАрдЬреА рдХрд╣реАрдВ рднреАред QEMU 2.9 рдХреЗ рд╕рд╛рде рд╢реБрд░реВ, рд╡рд┐рдВрдбреЛрдЬ рдкрд░ HAXM рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рд╡рд░реНрдЪреБрдЕрд▓рд╛рдЗрдЬреЗрд╢рди рдорд╛рдирдХ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ ( рд╡рд┐рд╡рд░рдг )
  • рдпрджрд┐ рдЯреАрд╕реАрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рд╡рд░реНрдЪреБрдЕрд▓рд╛рдЗрдЬреЗрд╢рди рдирд╣реАрдВ рд╣реИ, рддреЛ рдЗрд╕рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдЬрдмрд╛рди рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдкреАрдврд╝реА рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рд╕рдорд░реНрдерди рд╣реИ, рд╕рд╛рде рд╣реА рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╡реНрдпрд╛рдЦреНрдпрд╛рдХрд╛рд░ рдХреЗ рд▓рд┐рдП
  • ... рдФрд░ рдЗрд╕рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ - рдмрд╛рд╣реНрдп рдкрд░рд┐рдзреАрдп, рдпреВрдЬрд░ рдЗрдВрдЯрд░рдлреЗрд╕, рдорд╛рдЗрдЧреНрд░реЗрд╢рди, рд░рд┐рдХреЙрд░реНрдб-рд░рд┐рдкреНрд▓реЗ рдЖрджрд┐ред

рд╡реИрд╕реЗ, рдХреНрдпрд╛ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ: QEMU рди рдХреЗрд╡рд▓ рдкреВрд░реЗ рдХрдВрдкреНрдпреВрдЯрд░ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдореЗрдЬрдмрд╛рди рдХрд░реНрдиреЗрд▓ рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрд╕реЗрд╕рд░, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдмрд╛рдпрд▓рд░ рдХреЗ рдЗрдВрд╕реНрдЯреНрд░реВрдореЗрдВрдЯреЗрд╢рди рдХреЗ рд▓рд┐рдП AFL рдлрд╝рдЬрд╝рд░ рджреНрд╡рд╛рд░рд╛ред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рдЗрд╕ QEMU рдореЛрдб рдХреЛ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП JS рдореЗрдВ рдкреЛрд░реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реЛ? ;)


рд╕рдмрд╕реЗ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдореБрдлрд╝реНрдд рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреА рддрд░рд╣, QEMU рдХреЛ configure рдФрд░ make рд▓рд┐рдП рдХреЙрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЖрдк рдХреБрдЫ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд░рддреЗ рд╣реИрдВ: рдПрдХ рдЯреАрд╕реАрдЬреА рдмреИрдХрдПрдВрдб, рдПрдХ рдзрд╛рдЧрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди, рдХреБрдЫ рдФрд░ред рдЖрдирдиреНрджрд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд▓реНрджреА рдордд рдХрд░реЛ / рднрдпрднреАрдд рд╣реЛ (рдЖрд╡рд╢реНрдпрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд░реЗрдЦрд╛рдВрдХрд┐рдд рдХрд░реЗрдВ) рдСрдЯреЛрдХреЙрдиреНрдлрд╝ рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ - рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдХреНрдпреВрдИрдПрдордпреВ рдкрд░ configure рд╕реНрд╡рдпрдВ-рд▓рд┐рдЦрд┐рдд рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдХреЛрдИ рдмрд╛рдд рдирд╣реАрдВ рд╣реИред


WebAssembly


рддреЛ рдпрд╣ рдХреНрдпрд╛ рдЪреАрдЬ рд╣реИ - WebAssembly (рдЙрд░реНрдл WASM)? рдпрд╣ Asm.js рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рд╣реИ, рдЕрдм рдорд╛рдиреНрдп рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рд╣реЛрдиреЗ рдХрд╛ рджрд┐рдЦрд╛рд╡рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдпрд╣ рд╡рд┐рд╢реБрджреНрдз рд░реВрдк рд╕реЗ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдФрд░ рдЕрдиреБрдХреВрд▓рд┐рдд рд╣реИ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЗрд╕рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ рд▓рд┐рдЦрдирд╛ рдмрд╣реБрдд рд╕рд░рд▓ рдирд╣реАрдВ рд╣реИ: рдпрд╣ рдХреЙрдореНрдкреИрдХреНрдЯрдиреЗрд╕ рдХреЗ рд▓рд┐рдП LEB128 рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИред


рдЖрдкрдиреЗ Asm.js рдХреЗ рд▓рд┐рдП рдкреБрдирд░реНрдЬрдиреНрдо рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реБрдирд╛ рд╣реЛрдЧрд╛ - рдпрд╣ "рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп" рдирд┐рд╖реНрдкрд╛рджрди рдкреНрд░рд╡рд╛рд╣ рдирд┐рдпрдВрддреНрд░рдг рдирд┐рд░реНрджреЗрд╢реЛрдВ (рдпрд╛рдиреА, рдпрджрд┐-рддрдм-рдЕрдиреНрдпрдерд╛, рд▓реВрдк, рдЖрджрд┐) рдХреА рдмрд╣рд╛рд▓реА рд╣реИ, рдЬрд┐рд╕рдХреЗ рддрд╣рдд рдЬреЗрдПрд╕ рдЗрдВрдЬрди рдХреЛ рдирд┐рдореНрди-рд╕реНрддрд░ рдХреЗ рдПрд▓рдПрд▓рд╡реАрдПрдо рдЖрдИрдЖрд░ рд╕реЗ рдЯреНрдпреВрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдкреНрд░реЛрд╕реЗрд╕рд░ рджреНрд╡рд╛рд░рд╛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдорд╢реАрди рдХреЛрдб рдХреЗ рдХрд░реАрдмред рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, QEMU рдХрд╛ рдордзреНрдпрд╡рд░реНрддреА рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рджреВрд╕рд░реЗ рдХреЗ рдХрд░реАрдм рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдБ рдпрд╣ рд╣реИ, bytecode, рдкреАрдбрд╝рд╛ рдХрд╛ рдЕрдВрдд ... рдФрд░ рдлрд┐рд░ рдмреНрд▓реЙрдХ, рдЕрдЧрд░-рддрдм-рдФрд░ рд▓реВрдк! ..!


рдФрд░ рдпрд╣ рдПрдХ рдФрд░ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдмрд╛рдЗрдирд░реАрди рдЙрдкрдпреЛрдЧреА рд╣реИ: рдпрд╣, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдмреНрд▓реЙрдХреЛрдВ рдХреЛ рдкрд╛рд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ WASM рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрдВрдЧреЗред рд▓реЗрдХрд┐рди рдпрд╣ рдмреЗрд╕ рдмреНрд▓реЙрдХ рдФрд░ рдЙрдирдХреЗ рдмреАрдЪ рдмрджрд▓рд╛рд╡ рдХреЗ рдЧреНрд░рд╛рдл рд╕реЗ рднреА рдХреЛрдб рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЦреИрд░, рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдХрд╣рд╛ рдерд╛ рдХрд┐ рдпрд╣ WebAssembly рднрдВрдбрд╛рд░рдг рдкреНрд░рд╛рд░реВрдк рдХреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ C / C ++ API рдХреЗ рдкреАрдЫреЗ рдЫрд┐рдкрд╛ рджреЗрддрд╛ рд╣реИред


рдЯреАрд╕реАрдЬреА (рдЯрд┐рдиреА рдХреЛрдб рдЬреЗрдирд░реЗрдЯрд░)


рдЯреАрд╕реАрдЬреА рдореВрд▓ рд░реВрдк рд╕реЗ рд╕реА рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдмреИрдХрдПрдВрдб рдерд╛ ред рдлрд┐рд░, рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░, рдпрд╣ рдЬреАрд╕реАрд╕реА рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзрд╛ рдирд╣реАрдВ рдЦрдбрд╝рд╛ рдХрд░ рд╕рдХрд╛, рд▓реЗрдХрд┐рди рдЕрдВрдд рдореЗрдВ рдЗрд╕реЗ рдореЗрдЬрдмрд╛рди рдордВрдЪ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдкреАрдврд╝реА рддрдВрддреНрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХреНрдпреВрдИрдПрдордпреВ рдореЗрдВ рдЕрдкрдиреА рдЬрдЧрд╣ рдорд┐рд▓реАред рдПрдХ рдЯреАрд╕реАрдЬреА рдмреИрдХрдПрдВрдб рднреА рд╣реИ рдЬреЛ рдХреБрдЫ рдЕрдореВрд░реНрдд рдмрд╛рдИрдЯреЗрдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рддреБрд░рдВрдд рджреБрднрд╛рд╖рд┐рдпрд╛ рджреНрд╡рд╛рд░рд╛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЗрд╕ рдмрд╛рд░ рдЗрд╕ рд╕рдордп рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рддрдереНрдп рдХрд┐ 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 s рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:


  • рдЯрд╛рд░рдЧреЗрдЯ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдкрд░ рдХрд┐рддрдиреЗ рд░рдЬрд┐рд╕реНрдЯрд░ рдФрд░ рдХрд┐рддрдиреЗ рдЪреМрдбрд╝реЗ рд╣реИрдВ (рд╣рдорд╛рд░реЗ рдкрд╛рд╕ - рдЬрд┐рддрдирд╛ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЙрддрдиреЗ рдмрд╣реБрдд рд╣реИрдВ - рдпрд╣ рд╕рд╡рд╛рд▓ "рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЯрд╛рд░реНрдЧреЗрдЯ" рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдкрд░ рдПрдХ рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рдХреЛрдб рдореЗрдВ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛ рдЙрд╕рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ) ...
  • рдореЗрдЬрдмрд╛рди рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рд╕рдВрд░реЗрдЦрдг: x86 рдкрд░, рдФрд░ рдЯреАрд╕реАрдЖрдИ рдореЗрдВ, рдирд┐рд░реНрджреЗрд╢ рдмрд┐рд▓реНрдХреБрд▓ рднреА рд╕рдВрд░реЗрдЦрд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдХреЛрдб рдмрдлрд░ рдореЗрдВ рдбрд╛рд▓рдиреЗ рдХрд╛ рдирд┐рд░реНрджреЗрд╢ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рджреЗ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдмрд╛рдЗрдирд░реАрди рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдХрд╣рддрд╛ рд╣реВрдВ: 4 рдмрд╛рдЗрдЯреНрд╕
  • рдмреИрдХрдПрдВрдб рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╡реИрдХрд▓реНрдкрд┐рдХ рдирд┐рд░реНрджреЗрд╢ рдХреНрдпрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдмрд╛рдЗрдирд░реА рдореЗрдВ рдЬреЛ рдХреБрдЫ рднреА рд╣рдо рдкрд╛рддреЗ рд╣реИрдВ рдЙрд╕реЗ рдЪрд╛рд▓реВ рдХрд░реЗрдВ, рдПрдХреНрд╕реАрд▓рд░реЗрдЯрд░ рдХреЛ рдмрд╛рдХреА рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рджреЗрдВ
  • рдЯреАрдПрд▓рдмреА рдХреИрд╢ рдХрд╛ рдЕрдиреБрдорд╛рдирд┐рдд рдЖрдХрд╛рд░ рдмреИрдХрдПрдВрдб рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ QEMU рдореЗрдВ рд╕рдм рдХреБрдЫ рдЧрдВрднреАрд░ рд╣реИ: рдпрджреНрдпрдкрд┐ рд╕рд╣рд╛рдпрдХ рдХрд╛рд░реНрдп рд╣реИрдВ рдЬреЛ рдЕрддрд┐рдерд┐ MMU (рдФрд░ рдЕрдм рдЗрд╕рдХреЗ рдмрд┐рдирд╛?) рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рд▓реЛрдб / рд╕реНрдЯреЛрд░ рдХрд░рддреЗ рд╣реИрдВ, рд╡реЗ рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдкрдиреЗ рдЕрдиреБрд╡рд╛рдж рдХреИрд╢ рдХреЛ рд╕рд╣реЗрдЬрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдПрдореНрдмреЗрдб рдХрд░рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрддрд╛ рд╣реИ? рд╕реАрдзреЗ рдЕрдиреБрд╡рд╛рдж рдмреНрд▓реЙрдХ рдореЗрдВред рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдХреМрди рд╕реА рдСрдлрд╕реЗрдЯ рд╕рдмрд╕реЗ рдХреБрд╢рд▓рддрд╛ рд╕реЗ рдХрдорд╛рди рдХреЗ рдПрдХ рдЫреЛрдЯреЗ рдФрд░ рддреЗрдЬ рдЕрдиреБрдХреНрд░рдо рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ
  • рдпрд╣рд╛рдВ рдЖрдк рдПрдХ рдпрд╛ рджреЛ рдЖрд░рдХреНрд╖рд┐рдд рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рдХреЛ рдореЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЯреАрдмреА рдХреЙрд▓ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ flush_icache_range рдЬреИрд╕реЗ рдЫреЛрдЯреЗ inline рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ рдХрд╛ рд╡рд░реНрдгрди рдХрд░ flush_icache_range (рд▓реЗрдХрд┐рди рдпрд╣ рд╣рдорд╛рд░рд╛ рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реИ)

рдмреЗрд╢рдХ, tcg-target.inc.c рдЖрдорддреМрд░ рдкрд░ рдмрд╣реБрдд рдмрдбрд╝реА рд╣реЛрддреА рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдХрдИ рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдп рд╣реЛрддреЗ рд╣реИрдВ:


  • рдЖрд░рдВрднреАрдХрд░рдг, рд╕рдВрдХреЗрдд рдХрд░рдирд╛, рдЕрдиреНрдп рдмрд╛рддреЛрдВ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЙрд╕ рдирд┐рд░реНрджреЗрд╢ рдкрд░ рдкреНрд░рддрд┐рдмрдВрдз рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдСрдкрд░реЗрдВрдб рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рдФрд░ рдмреИрдХрдПрдВрдб рд╕реЗ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдирдХрд▓ рдХреА рдЧрдИ
  • рдЖрдВрддрд░рд┐рдХ рдмрд╛рдЗрдЯрдХреЛрдб рдХреЗ рдПрдХ рдирд┐рд░реНрджреЗрд╢ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХрд╛рд░реНрдп
  • рдпрд╣рд╛рдБ рдЖрдк рд╕рд╣рд╛рдпрдХ рдХрд╛рд░реНрдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣рд╛рдБ рднреА рдЖрдк tcg/tcg.c рд╕реЗ рд╕реНрдереИрддрд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

рдЦреБрдж рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд░рдгрдиреАрддрд┐ рдЪреБрдиреА: рдЕрдЧрд▓реЗ рдЕрдиреБрд╡рд╛рдж рдмреНрд▓реЙрдХ рдХреЗ рдкрд╣рд▓реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдореИрдВрдиреЗ рдЪрд╛рд░ рдкреЙрдЗрдВрдЯрд░реНрд╕ рд▓рд┐рдЦреЗ: рд╕реНрдЯрд╛рд░реНрдЯ рдорд╛рд░реНрдХ ( 0xFFFFFFFF рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдореВрд▓реНрдп, рдЬрд┐рд╕рдиреЗ рдЯреАрдмреА рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА), рд╕рдВрджрд░реНрдн, рдЙрддреНрдкрдиреНрди рдореЙрдбреНрдпреВрд▓, рдФрд░ рдбреАрдмрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЬрд╛рджреВ рдХреА рд╕рдВрдЦреНрдпрд╛ред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд▓реЗрдмрд▓ рдХреЛ 0xFFFFFFFF - n рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд╣рд╛рдВ n рдПрдХ рдЫреЛрдЯреА рдзрдирд╛рддреНрдордХ рд╕рдВрдЦреНрдпрд╛ рд╣реИ, рдФрд░ рд╣рд░ рдмрд╛рд░ рджреБрднрд╛рд╖рд┐рдпрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдпрд╣ 1 рд╕реЗ рдмрдврд╝ рдЬрд╛рддрд╛ рд╣реИред рдЬрдм рдпрд╣ 0xFFFFFFFE рддрдХ рдкрд╣реБрдВрдЪ рдЧрдпрд╛, рд╕рдВрдХрд▓рди рд╣реБрдЖ, рддреЛ рдореЙрдбреНрдпреВрд▓ рдПрдХ рдЫреЛрдЯреЗ "рд▓реЙрдиреНрдЪрд░" рдореЗрдВ рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬреЛ рдлрд╝рдВрдХреНрд╢рди рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрди рдмрд╛рдПрдВ tcg_qemu_tb_exec , рдФрд░ рдореЙрдбреНрдпреВрд▓ QEMU рдореЗрдореЛрд░реА рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред


рдХреНрд▓рд╛рд╕рд┐рдХреНрд╕ рдХреЛ рдкреИрд░рд╛рдлрд╝реЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, "рдХреНрд░рдЪ, рджрд┐рд▓ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдзреНрд╡рдирд┐ рдореЗрдВ рдХрд┐рддрдирд╛ рдкреНрд░реЛрдЧреНрд░реИрд╕реНрдЯ рдЗрдВрдЯрд░рд╡реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ..."ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╕реНрдореГрддрд┐ рдХрд╣реАрдВ рд▓реАрдХ рд╣реЛ рд░рд╣реА рдереАред рдФрд░ рдпрд╣ QEMU рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдмрдВрдзрд┐рдд рдПрдХ рдореЗрдореЛрд░реА рдереА! рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдХреЛрдб рдерд╛ рдЬреЛ рдХрд┐ рдЕрдЧрд▓реЗ рдирд┐рд░реНрджреЗрд╢ (рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, рдПрдХ рд╕реВрдЪрдХ) рдХреЛ рд▓рд┐рдЦрддреЗ рд╕рдордп, рдЙрд╕ рд▓рд┐рдВрдХ рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рдерд╛ рдЬреЛ рдкрд╣рд▓реЗ рдЗрд╕ рдЬрдЧрд╣ рдкрд░ рдерд╛, рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд╛рдпрджрд╛ рдирд╣реАрдВ рд╣реБрдЖред рджрд░рдЕрд╕рд▓, рд╕рд░рд▓рддрдо рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреНрдпреВрдИрдПрдордпреВ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░ рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╡рд╣рд╛рдВ рдЙрддреНрдкрдиреНрди рдХреЛрдб рд▓рд┐рдЦрддрд╛ рд╣реИред рдЬрдм рдмрдлрд░ рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдХреЛрдб рдХреЛ рдмрд╛рд╣рд░ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЕрдЧрд▓реЗ рдХреЛ рдЙрд╕рдХреЗ рд╕реНрдерд╛рди рдкрд░ рд▓рд┐рдЦрд╛ рдЬрд╛рдирд╛ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред


рдХреЛрдб рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдЬрд╛рджреВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдмреИрд╕рд╛рдЦреА рдиреЗ рд╣рдореЗрдВ рдвреЗрд░ рдХреЗ рд╡рд┐рдирд╛рд╢ рдкрд░ рдирд╣реАрдВ рдкрдбрд╝рдиреЗ рджрд┐рдпрд╛, рдкрд╣рд▓реЗ рдкрд╛рд╕ рдкрд░ рдЕрдирдЗрдВрд╕реНрдЯреЙрд▓ рдХрд┐рдП рдЧрдП рдмрдлрд░ рдкрд░ рдХреБрдЫ рдЧрд▓рдд рдХрд┐рдпрд╛ред рд▓реЗрдХрд┐рди рдмрд╛рдж рдореЗрдВ рдореЗрд░реЗ рдХрд╛рд░реНрдп рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд░рддреЗ рд╣реБрдП рдмрдлрд░ рдХреЛ рдХреМрди рд▓рд┐рдЦрддрд╛ рд╣реИ? рдЬреИрд╕рд╛ рдХрд┐ Emscripten рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рд╕рд▓рд╛рд╣ рджреА, рдПрдХ рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рдЪрд▓рд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдкрд░рд┐рдгрд╛рдореА рдХреЛрдб рдХреЛ рдореВрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд░ рд╡рд╛рдкрд╕ рдкреЛрд░реНрдЯ рдХрд┐рдпрд╛, рдЙрд╕ рдкрд░ рдореЛрдЬрд╝рд┐рд▓рд╛ рд░рд┐рдХреЙрд░реНрдб-рд░реАрдкреНрд▓реЗ рд╕реЗрдЯ рдХрд┐рдпрд╛ ... рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореБрдЭреЗ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдмрд╛рдд рдХрд╛ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ: рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рдПрдХ struct TranslationBlock рдкреНрд░рддреНрдпреЗрдХ рдмреНрд▓реЙрдХ рдХреЗ рд▓рд┐рдП рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЕрдиреБрдорд╛рди рдХрд░реЗрдВ рдХрд┐ ... рдпрд╣ рд╕рд╣реА рд╣реИ, рдмреНрд▓реЙрдХ рдХреЗ рдареАрдХ рд╕рд╛рдордиреЗ рдмрдлрд░ рдореЗрдВ рд╣реИред рдпрд╣ рдорд╣рд╕реВрд╕ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдЗрд╕реЗ рдмреИрд╕рд╛рдЦреА (рдХрдо рд╕реЗ рдХрдо рдХреБрдЫ) рдХреЗ рд╕рд╛рде рдЯрд╛рдИ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдФрд░ рдмрд╕ рдореИрдЬрд┐рдХ рдирдВрдмрд░ рдХреЛ рдлреЗрдВрдХ рджрд┐рдпрд╛, рдФрд░ рд╢реЗрд╖ рд╢рдмреНрджреЛрдВ рдХреЛ struct TranslationBlock рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛, рдПрдХ рдПрдХрд▓-рд▓рд┐рдВрдХ рдХреА рдЧрдИ рд╕реВрдЪреА рдмрдирд╛рдИ рдЬрд┐рд╕рд╕реЗ рдЖрдк рдЬрд▓реНрджреА рд╕реЗ рдЕрдиреБрд╡рд╛рдж рдХреИрд╢ рдХреЛ рд░реАрд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдореЗрдореЛрд░реА рдХреЛ рдореБрдХреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рдХреБрдЫ рдмреИрд╕рд╛рдЦреА рдмрдиреА рд╣реБрдИ рд╣реИ: рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреЛрдб рдмрдлрд╝рд░ рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рд╕рдВрдХреЗрдд - рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдмрд╕ BinaryenExpressionRef , рдЕрд░реНрдерд╛рдд, рд╡реЗ рдЙрди рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЙрддреНрдкрдиреНрди рдЖрдзрд╛рд░ рдЗрдХрд╛рдИ рдореЗрдВ рд░реИрдЦрд┐рдХ рд░реВрдк рд╕реЗ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рднрд╛рдЧ - рдбрдмреНрд▓реНрдпреВрдмреА рдХреЗ рдмреАрдЪ рд╕рдВрдХреНрд░рдордг рд╕реНрдерд┐рддрд┐, рднрд╛рдЧ - рдЬрд╣рд╛рдВ рдЬрд╛рдирд╛ рд╣реИред рдЦреИрд░, рд░реАрд▓реЛрдкрд░ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рддреИрдпрд╛рд░ рдмреНрд▓реЙрдХ рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рд╢рд░реНрддреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрдирдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдзрд╛рд░рдгрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рд╕рднреА рдХрдо рд╕реЗ рдХрдо рдЪрд╛рд░ рдмрд╛рдЗрдЯреНрд╕ рд╕рдВрд░реЗрдЦрд┐рдд рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЖрдк рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рд▓реЗрдмрд▓ рдХреЗ рджреЛ рдмрд┐рдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдиреЗ рдкрд░ рдЗрд╕реЗ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╛рдж рд░рдЦрдирд╛ рд╣реЛрдЧрд╛ред рд╡реИрд╕реЗ, рдЯреАрд╕реАрдЬреА рдЪрдХреНрд░ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреЗ рдХрд╛рд░рдг рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдРрд╕реЗ рд▓реЗрдмрд▓ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреНрдпреВрдИрдПрдордпреВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред


рдмрд╛рдЗрдирд░реАрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛


WebAssembly рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рд╣реЛрддреЗ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рд╢рд░реАрд░ рд╣реЛрддрд╛ рд╣реИред рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпрд╛рдВ рдПрдХрд╛рддреНрдордХ рдФрд░ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рд╕рдВрдЪрд╛рд▓рди рд╣реИрдВ, рдмреНрд▓реЙрдХ рдЬрд┐рд╕рдореЗрдВ рдЕрдиреНрдп рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреА рд╕реВрдЪреА рд╢рд╛рдорд┐рд▓ рд╣реИ, рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╡рд╛рд╣, рдЖрджрд┐ред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдХрд╣рд╛ рдерд╛, рдпрд╣рд╛рдБ рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╡рд╛рд╣ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рд╢рд╛рдЦрд╛рдУрдВ, рд▓реВрдк, рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдЖрджрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдареАрдХ-рдареАрдХ рдЖрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рддрд░реНрдХ рдвреЗрд░ рдкрд░ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрд╛рд░рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдЬреЗрдПрд╕ рдореЗрдВ рд╣реИред рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдирд╣реАрдВ рдХреАред


рдлрд╝рдВрдХреНрд╢рдВрд╕ рдореЗрдВ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рднреА рд╣реЛрддреЗ рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рд╕реНрдХреНрд░реИрдЪ рд╕реЗ рдЯрд╛рдЗрдк рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: int32 / int64 / float / doubleред рдкрд╣рд▓реЗ n рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рджрд┐рдП рдЧрдП рддрд░реНрдХ рд╣реИрдВред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрджреНрдпрдкрд┐ рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╡рд╛рд╣ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд┐рдореНрди-рд╕реНрддрд░ рдХрд╛ рдирд╣реАрдВ рд╣реИ, рдлрд┐рд░ рднреА рдкреВрд░реНрдгрд╛рдВрдХ рд╕рд╛рдЗрди / рд╕рд╛рдЗрдирд▓реЗрд╕ рд╕рд╛рдЗрди рдХреЛ рдирд╣реАрдВ рд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВ: рд╕рдВрдЦреНрдпрд╛ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░реЗрдЧреА рдпрд╣ рдСрдкрд░реЗрд╢рди рдХреЛрдб рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред


рдЖрдорддреМрд░ рдкрд░, рдмрд╛рдЗрдирд░реАрди рдПрдХ рд╕рд░рд▓ рд╕реА-рдПрдкреАрдЖрдИ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ: рдЖрдк рдПрдХ рдореЙрдбреНрдпреВрд▓ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЗрд╕рдореЗрдВ рдЖрдк рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдмрдирд╛рддреЗ рд╣реИрдВ - рдПрдХрд╛рддреНрдордХ, рдмрд╛рдЗрдирд░реА, рдЕрдиреНрдп рднрд╛рд╡реЛрдВ рд╕реЗ рдмреНрд▓реЙрдХ, рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╡рд╛рд╣, рдЖрджрд┐ред рдлрд┐рд░ рдЖрдк рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рд╢рд░реАрд░ рдЖрдкрдХреЛ рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк, рдореЗрд░реА рддрд░рд╣, рдПрдХ рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рд╕рдВрдХреНрд░рдордг рдЧреНрд░рд╛рдл рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рд░рд┐рд▓реЙрдкрд░ рдШрдЯрдХ рдЖрдкрдХреА рд╕рд╣рд╛рдпрддрд╛ рдХрд░реЗрдЧрд╛ред рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ, рдмреНрд▓реЙрдХ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдкреНрд░рд╡рд╛рд╣ рдХреЗ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдирд┐рдпрдВрддреНрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рдпрд╣ рдмреНрд▓реЙрдХ рдХреА рд╕реАрдорд╛ рд╕реЗ рдкрд░реЗ рдирд╣реАрдВ рдЬрд╛рддрд╛ рд╣реИ - рдЕрд░реНрдерд╛рдд, рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдЯреАрдПрд▓рдмреА рдХреИрд╢ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЛрдб рдХреЗ рдЕрдВрджрд░ рдПрдХ рдЖрдВрддрд░рд┐рдХ рдлрд╛рд╕реНрдЯ рдкрде / рдзреАрдореА рдкрде рд╢рд╛рдЦрд╛ рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЛрдИ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдирд╣реАрдВ рд╣реИ ред рдЬрдм рдЖрдк рд░реАрд▓реЙрдкрд░ рдЬрд╛рд░реА рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдХреЗ рдмреНрд▓реЙрдХ рдЬрд╛рд░реА рд╣реЛрддреЗ рд╣реИрдВ, рдЬрдм рдЖрдк рдПрдХ рдореЙрдбреНрдпреВрд▓, рднрд╛рд╡, рдХрд╛рд░реНрдп рдЖрджрд┐ рдЬрд╛рд░реА рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред


рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрджрд┐ рдЖрдк рдЗрдВрдЯрд░рдкреНрд░реЗрдЯрд░ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдирд┐рд░реНрдорд╛рдг рдФрд░ рд╡рд┐рд▓реЛрдкрди рдХреЗ рдмрд┐рдирд╛ рдЪрд▓рддреЗ-рдЪрд▓рддреЗ рдХреЛрдб рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕ рддрд░реНрдХ рдХреЛ 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 , ( ), . , translation block, , struct TranslationBlock .


, ( ) Firefox. Chrome - , - WebAssembly, ...


. , , - . , . , WebAssembly , JS, , , .


: 32- , Binaryen, - - 2 32- . , Binaryen . ?


-

, ┬л , 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 :)


, - , ...

Source: https://habr.com/ru/post/hi451306/


All Articles