рдореЗрд░рд╛ рдирд╛рдо Valery Shavel рд╣реИ, рдореИрдВ Yandex.Maps рд╡реЗрдХреНрдЯрд░ рдЗрдВрдЬрди рдХреА рд╡рд┐рдХрд╛рд╕ рдЯреАрдо рд╕реЗ рд╣реВрдВред рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рд╣рдордиреЗ рдЗрдВрдЬрди рдореЗрдВ WebAssembly рддрдХрдиреАрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ред рдиреАрдЪреЗ рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рд╣рдордиреЗ рдЗрд╕реЗ рдХреНрдпреЛрдВ рдЪреБрдирд╛, рд╣рдореЗрдВ рдХреНрдпрд╛ рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓реЗ рдФрд░ рдЖрдк рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЗрд╕ рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

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

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

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

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

рд╡рд╛рд╕рдо рдПрдХ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдкреНрд░рд╛рд░реВрдк рд╣реИ; рдЖрдк рдЗрд╕рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рднрд╛рд╖рд╛рдУрдВ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдХреЛрдб рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдХреНрд╕рд░, рдРрд╕реЗ рдкреВрд░реНрд╡-рд╕рдВрдХрд▓рд┐рдд рдХреЛрдб рдХреНрд▓рд╛рд╕рд┐рдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рддреЗрдЬрд╝ рд╣реЛрддреЗ рд╣реИрдВред WebAssembly рдкреНрд░рд╛рд░реВрдк рдХреЗ рдХреЛрдб рдореЗрдВ рдкреГрд╖реНрда рдХреЗ DOM рддрддреНрд╡реЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдирд╣реАрдВ рд╣реИ рдФрд░, рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рд╕рдордп рд▓реЗрдиреЗ рд╡рд╛рд▓реЗ рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╣рдордиреЗ C ++ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рднрд╛рд╖рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЪреБрдирд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХрд╛рдлреА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рддреЗрдЬ рд╣реИред
WebAssembly рдореЗрдВ C ++ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ
emscripten рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдЗрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ C ++ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдореЙрдбреНрдпреВрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдореБрдЦреНрдп рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рддрд░реАрдХреЗ рд╕реЗ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:
#include <emscripten/bind.h> #include <emscripten.h> #include <math.h> struct Point { double x; double y; }; double sqr(double x) { return x * x; } EMSCRIPTEN_BINDINGS(my_value_example) { emscripten::value_object<Point>("Point") .field("x", &Point::x) .field("y", &Point::y) ; emscripten::register_vector<Point>("vector<Point>"); emscripten::function("distance", emscripten::optional_override( [](Point point1, Point point2) { return sqrt(sqr(point1.x - point2.x) + sqr(point1.y - point2.y)) ; })); }
рдЗрд╕рдХреЗ рдмрд╛рдж, рдореИрдВ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЗрд╕ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдХреЛрдб рдореЗрдВ, рд╣рдо рдкреЙрдЗрдВрдЯ рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдкреНрд╡рд╛рдЗрдВрдЯ рдЗрдВрдЯрд░рдлреЗрд╕ рдореЗрдВ рдореИрдк рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рджреЛ рдлреАрд▓реНрдб рд╣реЛрдВрдЧреЗ - x рдФрд░ y, рд╡реЗ рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдХреЗ рдлреАрд▓реНрдб рд╕реЗ рдореЗрд▓ рдЦрд╛рддреЗ рд╣реИрдВред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрджрд┐ рд╣рдо C ++ рд╕реЗ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рд╡реЗрдХреНрдЯрд░ рдХрдВрдЯреЗрдирд░ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдЗрд╕реЗ рдкреНрд╡рд╛рдЗрдВрдЯ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдкрдВрдЬреАрдХреГрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдлрд┐рд░ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЗрд╕рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрдЧрд╛ред
рдФрд░ рдЕрдВрдд рдореЗрдВ, рдХреЛрдб рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдЯрд╛рдЗрдк рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдЗрд╕реЗ рдЗрд╕реА рдирд╛рдо рд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреИрд╕реЗ рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рдПред
Emscripten рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлрд╝рд╛рдЗрд▓ рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдореА рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЕрдкрдиреЗ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред рдЕрдм рд╣рдо рдПрдХ рдордирдорд╛рдиреЗ emscripten рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рдЬреЗрдиреЗрд░рд┐рдХ d.ts рдлрд╝рд╛рдЗрд▓ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдЙрдкрдпреЛрдЧреА рдХрд╛рд░реНрдп рдФрд░ рдкреНрд░рдХрд╛рд░ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реИрдВ:
declare module "emscripten_module" { interface EmscriptenModule { readonly wasmMemory: WebAssembly.Memory; readonly HEAPU8: Uint8Array; readonly HEAPF64: Float64Array; locateFile: (path: string) => string; onRuntimeInitialized: () => void; _malloc: (size: size_t) => uintptr_t; _free: (addr: size_t) => uintptr_t; } export default EmscriptenModule; export type uintptr_t = number; export type size_t = number; }
рдФрд░ рд╣рдо рдЕрдкрдиреЗ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП d.ts рдлрд╝рд╛рдЗрд▓ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:
declare module "emscripten_point" { import EmscriptenModule, {uintptr_t, size_t} from 'emscripten_module'; interface NativeObject { delete: () => void; } interface Vector<T> extends NativeObject { get(index: number): T; size(): number; } interface Point { readonly x: number; readonly y: number; } interface PointModule extends EmscriptenModule { distance: (point1: Point, point2: Point) => number; } type PointModuleUninitialized = Partial<PointModule>; export default function createModuleApi(Module: Partial<PointModule>): PointModule; }
рдЕрдм рд╣рдо рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдореЙрдбреНрдпреВрд▓ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рд▓рд┐рдП рд╡рд╛рджрд╛ рдХрд░реЗрдЧрд╛, рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛:
import EmscriptenModule from 'emscripten_module'; import createPointModuleApi, {PointModule} from 'emscripten_point'; import * as pointModule from 'emscripten_point.wasm'; export default function initEmscriptenModule<ModuleT extends EmscriptenModule>( moduleUrl: string, moduleInitializer: (module: Partial<EmscriptenModule>) => ModuleT ): Promise<ModuleT> { return new Promise((resolve) => { const module = moduleInitializer({ locateFile: () => moduleUrl, onRuntimeInitialized: function (): void {
рдЕрдм рдЗрд╕ рдкреНрд░реЙрдорд┐рд╕ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдбрд┐рд╕реНрдЯреЗрдВрд╕ рдлрдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде-рд╕рд╛рде рд╣рдорд╛рд░рд╛ рдореЙрдбреНрдпреВрд▓ рдорд┐рд▓рддрд╛ рд╣реИред
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЖрдк рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рд▓рд╛рдЗрди рджреНрд╡рд╛рд░рд╛ рд╡реЙрд╕рдо рдХреЛрдб рд▓рд╛рдЗрди рдХреЛ рдбреАрдмрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рд╕рд╛рдорд╛рдиреНрдп рд╕реА ++ рдХреА рддрд░рд╣ рдЙрди рдкрд░ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдирд╛ рдФрд░ рдХреЛрдб рдЪрд▓рд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдлрд┐рд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХрд╛ рдЕрд╡рд╕рд░ рд╣реЛрдЧрд╛ред рдлрд┐рд░ рднреА, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рднреА, рдЖрдкрдХреЗ рдкрд╛рд╕ рдорд╛рдирдХ рдХреЙрдЙрдЯ рд╕реНрдЯреНрд░реАрдо рддрдХ рдкрд╣реБрдВрдЪ рд╣реИ, рдЬреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрдВрд╕реЛрд▓ рдореЗрдВ рд╕рдм рдХреБрдЫ рдЖрдЙрдЯрдкреБрдЯ рдХрд░реЗрдЧрд╛ред
рдЗрд╕
рд▓рд┐рдВрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реЗрдЦ рдХрд╛ рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЙрджрд╛рд╣рд░рдг рдЙрдкрд▓рдмреНрдз рд╣реИ, рдЬрд╣рд╛рдБ рдЖрдк webpack.config рдФрд░ CMakeLists рдХреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред
рдкрд░рд┐рдгрд╛рдо
рдЗрд╕рд▓рд┐рдП, рд╣рдордиреЗ рдЕрдкрдиреЗ рдХреЛрдб рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдФрд░ рдкреЙрд▓реАрдЧреЙрди рдФрд░ рдкреЙрд▓реАрдЧреЙрди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рдпреЛрдЧ рд╢реБрд░реВ рдХрд┐рдпрд╛ред рдЪрд┐рддреНрд░ рдЖрд░реЗрдЦ рдФрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдЯрд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдФрд╕рдд рдкрд░рд┐рдгрд╛рдо рджрд┐рдЦрд╛рддрд╛ рд╣реИ:

рдирддреАрдЬрддрди, рд╣рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдореАрдЯреНрд░рд┐рдХ рдХреЗ рд▓рд┐рдП рдРрд╕реЗ рд░рд┐рд╢реНрддреЗрджрд╛рд░ рдЧреБрдгрд╛рдВрдХ рдорд┐рд▓реЗ:

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рд╢реБрджреНрдз рдЖрджрд┐рдо рдкрд╛рд░реНрд╕рд┐рдВрдЧ рд╕рдордп рдФрд░ рдЯрд╛рдЗрд▓ рдбрд┐рдХреЛрдбрд┐рдВрдЧ рд╕рдордп рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╡рд╛рд╕рдо рдЪрд╛рд░ рдЧреБрдирд╛ рд╕реЗ рдЕрдзрд┐рдХ рддреЗрдЬ рд╣реИред рдпрджрд┐ рдЖрдк рдХреБрд▓ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рд╕рдордп рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЕрдВрддрд░ рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА рдХрдо рд╣реИред рдРрд╕рд╛ рд╡рд╛рд╕ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдПрдХрддреНрд░ рдХрд░рдиреЗ рдХреА рд▓рд╛рдЧрдд рдХреЗ рдХрд╛рд░рдг рд╣реИред рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдкрд╣рд▓реА рдЯрд╛рдЗрд▓ рдореЗрдВ рд╕рдордЧреНрд░ рд▓рд╛рдн рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реИ (рдкрд╣рд▓реЗ рджрд╕ рдореЗрдВ - рдкрд╛рдВрдЪ рдмрд╛рд░ рд╕реЗ рдЕрдзрд┐рдХ)ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдлрд┐рд░ рд╕рд╛рдкреЗрдХреНрд╖ рдЧреБрдгрд╛рдВрдХ рд▓рдЧрднрдЧ рддреАрди рддрдХ рдХрдо рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рдирддреАрдЬрддрди, рдпрд╣ рд╕рдм рдорд┐рд▓рдХрд░ рдкреГрд╖реНрдарднреВрдорд┐ рдереНрд░реЗрдб рдореЗрдВ рдПрдХ рдЯрд╛рдЗрд▓ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╕рдордп рдХреЛ 20-25% рддрдХ рдХрдо рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред рдмреЗрд╢рдХ, рдпрд╣ рдЕрдВрддрд░ рдкрд┐рдЫрд▓реЗ рд╡рд╛рд▓реЗ рдХреА рддрд░рд╣ рдорд╣рд╛рди рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдХрд┐ рдЯреВрдЯреА рд╣реБрдИ рд▓рд╛рдЗрдиреЗрдВ рдФрд░ рдкреЙрд▓реАрдЧреЙрди рдкрд╛рд░реНрд╕ рдХрд░рдирд╛ рд╕рднреА рдЯрд╛рдЗрд▓ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рджреВрд░ рд╣реИред
рдЕрдЧрд░ рд╣рдо рдореЙрдбреНрдпреВрд▓ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдХреА рд╡рдЬрд╣ рд╕реЗ, рд▓рдЧрднрдЧ рдЖрдзреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдкрд╣рд▓реЗ рдЯрд╛рдЗрд▓ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рджреЗрд░реА рд╣реБрдИред рдордВрдЭрд▓рд╛ рд╡рд┐рд▓рдВрдм 188 рдПрдордПрд╕ рд╣реИред рджреЗрд░реА рдХреЗрд╡рд▓ рдкрд╣рд▓реА рдЯрд╛рдЗрд▓ рд╕реЗ рдкрд╣рд▓реЗ рд╣реЛрддреА рд╣реИ, рдФрд░ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдореЗрдВ рдЬреАрдд рд╕реНрдерд┐рд░ рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдк рд╢реБрд░реБрдЖрдд рдореЗрдВ рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдард╣рд░рд╛рд╡ рдХреЗ рд╕рд╛рде рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдПрдХ рдЧрдВрднреАрд░ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рдорд╛рдирддреЗ рд╣реИрдВред
рдПрдХ рдЕрдиреНрдп рдирдХрд╛рд░рд╛рддреНрдордХ рдкрдХреНрд╖ рд╕реНрд░реЛрдд рдХреЛрдб рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЖрдХрд╛рд░ рд╣реИред рд╡рд╕реАрдо рдХреЗ рдмрд┐рдирд╛ рдкреВрд░реЗ рд╡реЗрдХреНрдЯрд░ рдореИрдк рдЗрдВрдЬрди рдХреЗ рд▓рд┐рдП рдЧрдЬрд╝рд┐рдк-рд╕рдВрдкреАрдбрд╝рд┐рдд рдорд┐рдирд┐рдлрд╝рд╛рдЗрдб рдХреЛрдб - рд╡рд╛рд╕ - 191 KB рдХреЗ рд╕рд╛рдеред рдЙрд╕реА рд╕рдордп, рдХреЗрд╡рд▓ рдЯреВрдЯреА рд╣реБрдИ рд░реЗрдЦрд╛рдУрдВ рдФрд░ рдЖрдпрддреЛрдВ рдХреЗ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреЛ рд╡рд╕реНрдо рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рди рдХрд┐ рд╕рднреА рдкреНрд░рд╛рдЗрдореЗрдЯрд┐рд╡реНрд╕ рдЬреЛ рдПрдХ рдЯрд╛рдЗрд▓ рдореЗрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреНрд░реЛрдЯреЛрдмреБрдлрд╝ рдХреЛ рдбреАрдХреЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рд╢реБрджреНрдз C рдореЗрдВ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЪрдпрди рдХрд░рдирд╛ рдерд╛, C ++ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдЖрдХрд╛рд░ рдФрд░ рднреА рдмрдбрд╝рд╛ рдерд╛ред C ++ рдХрд╛ рд╕рдВрдХрд▓рди рдХрд░рддреЗ рд╕рдордп -O3 рдХреЗ рдмрдЬрд╛рдп -Oz рд╕рдВрдХрд▓рдХ рдзреНрд╡рдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рдЕрдВрддрд░ рдХреЛ рдХреБрдЫ рд╣рдж рддрдХ рдХрдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рд╕рд╛рде, рд╣рдо рдЙрддреНрдкрд╛рджрдХрддрд╛ рдЦреЛ рджреЗрддреЗ рд╣реИрдВред
рдлрд┐рд░ рднреА, рд╕реНрд░реЛрдд рдХреЗ рдЖрдХрд╛рд░ рдиреЗ рдХрд╛рд░реНрдб рдХреЗ рдЖрд░рдВрднреАрдХрд░рдг рдХреА рдЧрддрд┐ рдХреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ред рд╡рд╛рд╕рдо рдХреЗрд╡рд▓ рдзреАрдореЗ рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ рдЦрд░рд╛рдм рд╣реИ, рдФрд░ рдЕрдВрддрд░ 2% рд╕реЗ рдХрдо рд╣реИред рд╡рд╛рд╕реЗрдо рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рд╡реЗрдХреНрдЯрд░ рдЯрд╛рдЗрд▓реНрд╕ рдХрд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рджреГрд╢реНрдпрдорд╛рди рд╕реЗрдЯ, рдЬреЗрдПрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдореБрдХрд╛рдмрд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдереЛрдбрд╝рд╛ рддреЗрдЬ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╣ рдкрд╣рд▓реА рд╕рдВрд╕рд╛рдзрд┐рдд рдЯрд╛рдЗрд▓реЛрдВ рдкрд░ рдЕрдзрд┐рдХ рд▓рд╛рдн рдХреЗ рдХрд╛рд░рдг рд╣реИ, рдЬрдмрдХрд┐ рдЬреЗрдПрд╕ рдЕрднреА рддрдХ рдЕрдиреБрдХреВрд▓рд┐рдд рдирд╣реАрдВ рд╣реИред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЕрдЧрд░ рдЖрдк рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд╕рд╛рде рд╕рд╣рдЬ рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рд╡рд╛рд╕рдо рдЕрдм рдПрдХ рдпреЛрдЧреНрдп рд╡рд┐рдХрд▓реНрдк рд╣реИред рдЙрд╕реА рд╕рдордп, рдЖрдк рд╣рдорд╕реЗ рдХрдо рдкреНрд░рджрд░реНрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдЖрдк рдЗрд╕реЗ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдХрднреА-рдХрднреА рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реНрд╡рдпрдВ рдмрд╣реБрдд рддреЗрдЬрд╝реА рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╡рд╛рд╕ рдореЗрдВ рдЖрдкрдХреЛ рдбреЗрдЯрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рд╣рдорд╛рд░реЗ рдирдХреНрд╢реЗ рдЕрдм рдирд┐рдпрдорд┐рдд рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рддреЗ рд╣реИрдВред рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдореЗрдВ рд▓рд╛рдн рд╕рд╛рдорд╛рдиреНрдп рдкреГрд╖реНрдарднреВрдорд┐ рдХреЗ рдЦрд┐рд▓рд╛рдл рдЗрддрдирд╛ рдорд╣рд╛рди рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рдХреЗрд╡рд▓ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреНрд░рд╛рдЗрдореЗрдЯрд┐рд╡реНрд╕ рдХреЛ рд╡рд╛рд╕ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╢рд╛рдпрдж рд╣рдо Wasm рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдЗрд╕рдХреЗ рдЦрд┐рд▓рд╛рдл рдПрдХ рдФрд░ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рддрд░реНрдХ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдФрд░ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреА рдЬрдЯрд┐рд▓рддрд╛ рд╣реИ: рджреЛ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХреЗрд╡рд▓ рддрднреА рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдЬрдм рдкреНрд░рджрд░реНрд╢рди рд▓рд╛рдн рдХреЗ рд▓рд╛рдпрдХ рд╣реЛрддрд╛ рд╣реИред