{"id":485994,"date":"2026-07-02T22:02:02","date_gmt":"2026-07-02T22:02:02","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=485994"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=485994","title":{"rendered":"\u0410\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0441\u0442\u044c \u0432 WebAssembly(WASM)"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p><strong>WebAssembly (WASM)<\/strong> &#8212; \u044d\u0442\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442 \u0438 \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u044b\u0439 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u0431\u0430\u0439\u0442-\u043a\u043e\u0434\u0430, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u0434\u0430 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 \u0441 \u043e\u043a\u043e\u043b\u043e\u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e. \u041e\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432\u043d\u0443\u0442\u0440\u0438 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0439 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u044b \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u0441\u0435\u043c\u0438 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u043c\u0438 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430\u043c\u0438 (Chrome, Firefox, Safari, Edge).  WASM \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u044f\u0437\u044b\u043a\u043e\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u042d\u0442\u043e target \u0434\u043b\u044f C, C++, Rust, Go \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u044f\u0437\u044b\u043a\u043e\u0432.<\/p>\n<p>\u0425\u043e\u0442\u044c \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f \u0438 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b\u0430\u0441\u044c \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0432\u0435\u0431\u0430 \u0438 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043e\u0432, \u0441 \u0432\u044b\u0445\u043e\u0434\u043e\u043c WASI WASM \u0448\u0430\u0433\u043d\u0443\u043b \u0432 \u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u0439 \u0438 IoT-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438.<\/p>\n<details class=\"spoiler\">\n<summary>WASI (WebAssembly System Interface)<\/summary>\n<div class=\"spoiler__content\">\n<p>WASI (WebAssembly System Interface) &#8212; \u044d\u0442\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 (API), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u0438 WebAssembly <strong>\u0432\u043d\u0435 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430<\/strong>  <\/p>\n<\/div>\n<\/details>\n<p>\u041a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u043e\u0441\u0442\u044c, \u043e\u043a\u043e\u043b\u043e\u043d\u0430\u0442\u0438\u0432\u043d\u0430\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c, \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c \u0438 \u0438\u0437\u043e\u043b\u044f\u0446\u0438\u044f \u0441\u0438\u043b\u044c\u043d\u0435\u0435, \u0447\u0435\u043c \u0443 Docker-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u0434\u0435\u043b\u0430\u0435\u0442 \u044d\u0442\u0443 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438 \u043a\u0440\u0430\u0439\u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0439 \u0432 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 (\u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0434\u043b\u044f \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u043e\u0432).<\/p>\n<p>\u0422\u0438\u043f\u0438\u0447\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u0441 \u0431\u0438\u0437\u043d\u0435\u0441-\u043b\u043e\u0433\u0438\u043a\u043e\u0439 \u043d\u0435 \u043e\u0431\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e CPU-bound \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f\u043c\u0438, \u0435\u043c\u0443 \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u043d\u0443\u0436\u043d\u044b \u0434\u0430\u043d\u043d\u044b\u0435, \u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0445\u043e\u0434\u0438\u0442\u044c \u043f\u043e \u0441\u0435\u0442\u0438. \u041f\u0440\u0438 \u0432\u044b\u0431\u043e\u0440\u0435 WASM \u0438\u0437 \u0437\u0430 \u0435\u0433\u043e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0431\u044b\u043b\u043e \u0431\u044b \u0441\u0442\u0440\u0430\u043d\u043d\u043e \u043e\u0431\u043e\u0439\u0442\u0438 \u0441\u0442\u043e\u0440\u043e\u043d\u043e\u0439 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044e compute \u043d\u0430\u0448\u0435\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430: \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439 \u043d\u0435\u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0449\u0438\u0439 I\/O. <\/p>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f, \u043a\u0430\u043a\u0438\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043d\u0430\u043c \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u0430 WASM. \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u044f\u0432\u043d\u043e \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0438\u043c \u0437\u0430\u0434\u0430\u0447\u0443<\/p>\n<details class=\"spoiler\">\n<summary>\u0412\u0430\u0436\u043d\u043e\u0435 \u0437\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u0435<\/summary>\n<div class=\"spoiler__content\">\n<p>\u041f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0443 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044f \u0435\u0441\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043e\u0431 \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u0435 WASM &#8212; WASI, WIT, Component Model, guest \u0438 host, \u043b\u0438\u043d\u0435\u0439\u043d\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c, proposals \u0438 \u0442.\u0434. &#8212; \u043c\u043d\u043e\u0433\u0438\u0435 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u044b \u0432 \u0443\u0433\u043e\u0434\u0443 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u044b \u0438 \u0447\u0438\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 :). \u041f\u0438\u0448\u0438\u0442\u0435 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445, \u0447\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e.<\/p>\n<\/div>\n<\/details>\n<h2>\u0417\u0430\u0447\u0435\u043c \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u0430 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0441\u0442\u044c<\/h2>\n<p>\u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043c \u0441\u0435\u0440\u0432\u0435\u0440 \u0441 \u0431\u0438\u0437\u043d\u0435\u0441-\u043b\u043e\u0433\u0438\u043a\u043e\u0439, \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u044e\u0449\u0438\u0439 \u0438 \u043f\u043e\u0440\u043e\u0436\u0434\u0430\u044e\u0449\u0438\u0439 HTTP-\u0442\u0440\u0430\u0444\u0438\u043a. \u041f\u0440\u0438  \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u0438 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u043c\u0430\u0441\u0442\u0435\u0440 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u043e\u0433\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u043c\u0438. \u0414\u0430\u043d\u043d\u044b\u0435 \u0437\u0430\u0447\u0430\u0441\u0442\u0443\u044e \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b, \u0438\u043b\u0438 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442 &#8212; \u0438\u043c\u0435\u044e\u0442 \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u0441\u0432\u044f\u0437\u0438, \u043d\u043e \u0432 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u043e\u0445\u043e\u0434\u043e\u0432 \u0432\u043e \u0432\u043d\u0435\u0448\u043d\u0438\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043c\u043d\u043e\u0433\u043e, \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438 \u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0432\u043e\u0440\u043a\u0435\u0440\u043e\u0432 \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u044c \u043a \u0434\u0435\u0433\u0440\u0430\u0434\u0430\u0446\u0438\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b.<\/p>\n<p>WASM-\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0438\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d \u0438 \u0441\u0430\u043c \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u0442 \u0441\u0435\u0442\u0435\u0432\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432.\u00a0HTTP,\u00a0\u0434\u0438\u0441\u043a,\u00a0\u0442\u0430\u0439\u043c\u0435\u0440\u044b\u00a0&#8212;\u00a0\u0432\u0441\u0435 \u044d\u0442\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u00a0\u0445\u043e\u0441\u0442\u00a0(Wasmtime).\u00a0\u041d\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u0442\u0441\u044e\u0434\u0430 \u0438 \u0432\u044b\u0440\u0430\u0441\u0442\u0430\u0435\u0442 \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u044c \u0432 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0441\u0442\u0438.<\/p>\n<details class=\"spoiler\">\n<summary>\u041f\u043e\u0447\u0435\u043c\u0443 Wasmtime<\/summary>\n<div class=\"spoiler__content\">\n<p>WASM &#8212; \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043a\u0442\u043e-\u0442\u043e \u0434\u043e\u043b\u0436\u0435\u043d \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0442\u044c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438 \u0432\u044b\u0431\u043e\u0440\u0435 WASM \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0435\u0449\u0435 \u0438 \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u0440\u0430\u043d\u0442\u0430\u0439\u043c \u0434\u043b\u044f \u043d\u0435\u0433\u043e. \u042f \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0441\u044f \u043d\u0430 Wasmtime \u043f\u043e \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c:<\/p>\n<ul>\n<li>\n<p>\u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0437\u0440\u0435\u043b\u044b\u0439 \u0440\u0430\u043d\u0442\u0430\u0439\u043c \u0441 \u043f\u043e\u043b\u043d\u043e\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 WASI<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u0442\u044c \u0431\u0438\u043d\u0434\u0438\u043d\u0433\u0438 \u0435\u0441\u0442\u044c \u0434\u043b\u044f \u043c\u043d\u043e\u0433\u0438\u0445 \u044f\u0437\u044b\u043a\u043e\u0432 (<code>wasmtime-go<\/code>, <code>wasmtime-py<\/code>)<\/p>\n<\/li>\n<\/ul>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e, \u044d\u0442\u043e\u0442 \u0432\u043e\u043f\u0440\u043e\u0441 \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u0441\u0443\u0436\u0434\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e, \u043d\u043e \u044d\u0442\u043e \u043d\u0435 \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u0442\u0435\u043c\u044b \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438.<\/p>\n<\/div>\n<\/details>\n<p>\u041a\u043e\u0433\u0434\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0438\u043c\u043f\u043e\u0440\u0442\u00a0<code>wasi:http\/outgoing-handler<\/code>,\u00a0\u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u00a0\u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0445\u043e\u0441\u0442\u0443,\u00a0\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u0443\u0435\u0442 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439 HTTP-\u0437\u0430\u043f\u0440\u043e\u0441,\u00a0\u0430 \u043e\u0442\u0432\u0435\u0442 \u043f\u0440\u0438\u0434\u0435\u0442 \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f.\u00a0\u0412\u0441\u0451 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u0443\u044e \u0440\u0430\u0431\u043e\u0442\u0443\u00a0(\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440,\u00a0\u0432\u0442\u043e\u0440\u043e\u0439\u00a0HTTP-\u0432\u044b\u0437\u043e\u0432,\u00a0\u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0439 \u043e\u0442 \u043f\u0435\u0440\u0432\u043e\u0433\u043e).<\/p>\n<p>\u0412 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u00a0\u0437\u0430\u0441\u0442\u044b\u0432\u0430\u0435\u0442\u00a0\u043d\u0430 \u0438\u043c\u043f\u043e\u0440\u0442\u0435,\u00a0\u043f\u043e\u043a\u0430 \u0445\u043e\u0441\u0442 \u043d\u0435 \u0432\u0435\u0440\u043d\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u00a0(\u0441\u043b\u043e\u0432\u043e &#171;\u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442\u0441\u044f&#187; \u043d\u0435 \u0443\u043f\u043e\u0442\u0440\u0435\u0431\u043b\u044f\u044e \u0441\u043e\u0437\u043d\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0442.\u043a. \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442 \u0438\u043c\u0435\u043d\u043d\u043e \u0437\u0430\u0441\u0442\u044b\u0432\u0430\u043d\u0438\u0435 <a href=\"https:\/\/github.com\/WebAssembly\/component-model\/blob\/main\/design\/mvp\/CanonicalABI.md\" rel=\"noopener noreferrer nofollow\">\u043d\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u0435 ABI<\/a>, \u0430 \u043d\u0435 \u0431\u043b\u043e\u043a \u043f\u043e\u0442\u043e\u043a\u0430).\u00a0\u041e\u0434\u0438\u043d\u00a0\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u00a0=\u00a0\u043e\u0434\u043d\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u0432 \u043e\u0434\u0438\u043d\u00a0\u043c\u043e\u043c\u0435\u043d\u0442\u00a0(<a href=\"https:\/\/github.com\/WebAssembly\/component-model\/blob\/main\/design\/mvp\/Explainer.md#component-invariants\" rel=\"noopener noreferrer nofollow\">\u0438\u043d\u0432\u0430\u0440\u0438\u0430\u043d\u0442 2<\/a>).\u00a0\u0427\u0442\u043e\u0431\u044b \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c 10 000 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 HTTP-\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439 \u043d\u0430\u00a0\u0441\u0435\u0440\u0432\u0435\u0440\u0435,\u00a0\u0445\u043e\u0441\u0442\u0443 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c 10 000 \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u043e\u0432 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430.\u00a0\u042d\u0442\u043e \u0443\u0431\u0438\u0432\u0430\u0435\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0439 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439.<\/p>\n<p>\u0410\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u0430 \u043f\u043e\u0442\u043e\u043c\u0443,\u00a0\u0447\u0442\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0436\u0434\u0451\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 I\/O \u043e\u0442 \u0445\u043e\u0441\u0442\u0430,\u00a0\u0438 \u044d\u0442\u043e \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c\u00a0\u043a\u043e\u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u043c,\u00a0\u0430 \u043d\u0435 \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0449\u0438\u043c.<\/p>\n<hr\/>\n<h2>WASI 0.2: \u0438\u043c\u0438\u0442\u0430\u0446\u0438\u044f async<\/h2>\n<p>\u0414\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0441\u0442\u0438 \u0432 WASI 0.2 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438:\u00a0pollable,\u00a0input-stream,\u00a0output-stream.\u00a0\u0422\u0438\u043f\u0438\u0447\u043d\u044b\u0435 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438:<\/p>\n<ul>\n<li>\n<p><code>resource pollable<\/code><\/p>\n<\/li>\n<li>\n<p><code>resource input-stream<\/code><\/p>\n<\/li>\n<li>\n<p><code>resource output-stream<\/code><\/p>\n<\/li>\n<li>\n<p><code>poll(list&lt;pollable&gt;)<\/code><\/p>\n<\/li>\n<li>\n<p><code>subscribe()<\/code>\u00a0\u043d\u0430\u00a0<code>resource<\/code><\/p>\n<\/li>\n<li>\n<p>\u0438 \u0442.\u0434.<\/p>\n<\/li>\n<\/ul>\n<p>\u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e \u0438\u0437 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0439\u00a0&#8212;\u00a0\u0432\u0441\u0435 \u0441\u0442\u0440\u043e\u0438\u0442\u0441\u044f \u0432\u043e\u043a\u0440\u0443\u0433 pollable-\u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0438 \u0440\u0443\u0447\u043d\u043e\u0433\u043e \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f.<\/p>\n<p>\u0412 0.2 \u044d\u043a\u0441\u043f\u043e\u0440\u0442 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439 \u043f\u043e \u043f\u0440\u0438\u0440\u043e\u0434\u0435:\u00a0\u0432\u044b\u0437\u0432\u0430\u0432\u00a0<code>handle(request_1)<\/code>,\u00a0\u0445\u043e\u0441\u0442 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442\u00a0\u0432\u043e\u0439\u0442\u0438 \u0432 \u044d\u0442\u043e\u0442 \u0436\u0435 \u0438\u043d\u0441\u0442\u0430\u043d\u0441 \u0441\u00a0<code>handle(request_2)<\/code>,\u00a0\u043f\u043e\u043a\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u044b\u0437\u043e\u0432 \u043d\u0435 \u0432\u0435\u0440\u043d\u0435\u0442\u0441\u044f.\u00a0\u041a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u044c \u0432\u043d\u0443\u0442\u0440\u0438\u00a0\u043e\u0434\u043d\u043e\u0433\u043e \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u0430 \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0435\u0440\u0435\u0437\u00a0<code>poll()<\/code>\u00a0\u0432\u043d\u0443\u0442\u0440\u0438 \u0433\u043e\u0441\u0442\u0435\u0432\u043e\u0433\u043e \u043a\u043e\u0434\u0430\u00a0+\u00a0\u0440\u0443\u0447\u043d\u043e\u0439 event loop \u0432 \u0433\u043e\u0441\u0442\u0435.<\/p>\n<p>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432 \u0442\u043e\u043c,\u00a0\u0447\u0442\u043e \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0445 \u044f\u0437\u044b\u043a\u043e\u0432\u00a0(backend,\u00a0\u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f WASM-\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442)\u00a0\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0440\u0430\u0437\u043d\u044b\u0435 \u043c\u043e\u0434\u0435\u043b\u044f\u043c\u0438 concurrency\u00a0(OS Threads,\u00a0stackful coroutines,\u00a0stackless coroutines),\u00a0\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u0438 \u0438\u0434\u0435\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438 \u0438 \u0432 \u043f\u043b\u0430\u043d\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438.\u00a0\u0418\u0437\u00a0\u044d\u0442\u043e\u0433\u043e \u0441\u043b\u0435\u0434\u0443\u0435\u0442,\u00a0\u0447\u0442\u043e host-\u0441\u0442\u043e\u0440\u043e\u043d\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0437\u043d\u0430\u0442\u044c \u0438 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c concurrency-\u043c\u043e\u0434\u0435\u043b\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430\u00a0WASM-\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u00a0(\u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f runtime-specific \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u044b).\u00a0\u0418\u043d\u044b\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438,\u00a0\u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0432\u044b\u0440\u0430\u0437\u0438\u0442\u044c\u00a0\u0432 ABI:\u00a0<code>async fn foo() -&gt; T<\/code>\u00a0\u043c\u0435\u0436\u0434\u0443 Rust-\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u043c,\u00a0Go-\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u043c,\u00a0Java-\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u043c \u0438 \u0442.\u0434.\u00a0&#8212;\u00a0\u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u043d\u0442\u0430\u0439\u043c \u0438\u0437\u043e\u0431\u0440\u0435\u0442\u0430\u0435\u0442 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f.<\/p>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u0440\u043e\u0442\u043a\u043e \u043e \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0445 \u043e\u0442\u043b\u0438\u0447\u0438\u044f\u0445<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0434\u0432\u0435 \u043f\u0430\u0440\u0430\u0434\u0438\u0433\u043c\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u043e\u0440\u0443\u0442\u0438\u043d\u00a0&#8212;\u00a0stackful coroutines\u00a0(fiber,\u00a0green thread,\u00a0virtual\u00a0thread,\u00a0user-mode thread,\u00a0goroutine)\u00a0\u0438 stackless coroutines\u00a0(state machine,\u00a0coroutine).<\/p>\n<p>\u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u043e stackful coroutine \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0439 \u0441\u0442\u0435\u043a\u00a0\u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0438 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430,\u00a0\u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c\u044b\u0435 \u043f\u0440\u0438 \u043f\u0440\u0438\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435.\u00a0\u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u00a0\u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432 user space,\u00a0\u0431\u0435\u0437 \u0443\u0447\u0430\u0441\u0442\u0438\u044f \u044f\u0434\u0440\u0430 \u041e\u0421,\u00a0\u043a\u043e\u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e,\u00a0\u0442.\u0435.\u00a0\u043f\u0440\u0438\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441\u0430\u043c\u0438\u043c\u00a0\u043a\u043e\u0434\u043e\u043c,\u00a0\u0430 \u043d\u0435 \u0442\u0430\u0439\u043c\u0435\u0440\u043e\u043c \u044f\u0434\u0440\u0430.<\/p>\n<p>\u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u043e stackless coroutines \u0443 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043d\u0435\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0442\u0435\u043a\u0430.\u00a0\u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u00a0\u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u0442\u0435\u043b\u043e async-\u0444\u0443\u043d\u043a\u0446\u0438\u0438,\u00a0\u0432\u044b\u0434\u0435\u043b\u044f\u0435\u0442 \u0432\u0441\u0435\u00a0live-\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435\u00a0\u0447\u0435\u0440\u0435\u0437 \u043a\u0430\u0436\u0434\u0443\u044e suspend \u0442\u043e\u0447\u043a\u0443 \u0438\u00a0\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u00a0(state machine).\u00a0\u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u043b\u043b\u0431\u044d\u043a\u0438.<\/p>\n<p>\u0417\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u043d\u0430 \u044d\u0442\u0443 \u0442\u0435\u043c\u0443:<\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/850970\/\" rel=\"noopener noreferrer nofollow\">https:\/\/habr.com\/ru\/articles\/850970\/<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/companies\/oleg-bunin\/articles\/958566\/\" rel=\"noopener noreferrer nofollow\">https:\/\/habr.com\/ru\/companies\/oleg-bunin\/articles\/958566\/<\/a><\/p>\n<\/li>\n<\/ul>\n<\/div>\n<\/details>\n<p>\u0415\u0441\u043b\u0438 \u0436\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0441\u043e\u0431\u0440\u0430\u043d \u0438\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0445,\u00a0\u043a\u0430\u0436\u0434\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0434\u043e\u043b\u0436\u0435\u043d \u0438\u043c\u0435\u0442\u044c \u0441\u0432\u043e\u0439 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439\u00a0event loop,\u00a0\u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442,\u00a0\u0447\u0442\u043e \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0446\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c\u0438 \u0431\u0443\u0434\u0435\u0442 \u0433\u043e\u043b\u043e\u0432\u043d\u043e\u0439 \u0431\u043e\u043b\u044c\u044e.<\/p>\n<p>\u0415\u0449\u0435 \u043e\u0434\u043d\u043e\u0439 \u0437\u0430\u0433\u0432\u043e\u0437\u0434\u043a\u043e\u0439 WASI 0.2 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e,\u00a0\u0447\u0442\u043e \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0432\u0441\u043f\u043b\u044b\u0432\u0430\u044e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0432\u044b\u0437\u043e\u0432\u0435\u00a0<code>read<\/code> \u0443\u00a0<code>stream<\/code>.\u00a0\u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442,\u00a0\u0447\u0442\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0430\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u0430 \u0443\u0437\u043d\u0430\u0435\u0442 \u043e\u0431 \u0438\u0441\u0445\u043e\u0434\u0435,\u00a0\u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442 \u0447\u0438\u0442\u0430\u0442\u044c.\u00a0\u0415\u0441\u043b\u0438\u00a0\u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044c \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0440\u0430\u043d\u044c\u0448\u0435,\u00a0\u043e\u043d \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043e\u0442\u043b\u0438\u0447\u0438\u0442\u044c \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u0435\u00a0<code>stream\u00a0<\/code>\u043e\u0442 \u043e\u0448\u0438\u0431\u043a\u0438.\u00a0\u042d\u0442\u043e\u00a0readiness-\u043c\u043e\u0434\u0435\u043b\u044c,\u00a0\u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0433\u043e\u0442\u043e\u0432\u043d\u043e\u0441\u0442\u044c,\u00a0\u0430 \u043d\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435.\u00a0<code>pollable<\/code>\u00a0\u0441\u0438\u0433\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u00a0&#171;\u043c\u043e\u0436\u043d\u043e\u00a0\u0447\u0438\u0442\u0430\u0442\u044c&#187;,\u00a0\u0430 \u043d\u0435\u00a0&#171;\u0432\u043e\u0442 \u0442\u0435\u0431\u0435 \u0434\u0430\u043d\u043d\u044b\u0435&#187;.<\/p>\n<hr\/>\n<h2>WASI 0.3<\/h2>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0438\u0434\u0435\u044f Async <a href=\"https:\/\/component-model.bytecodealliance.org\/\" rel=\"noopener noreferrer nofollow\">Component Model<\/a>:\u00a0\u0434\u043e \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u044f native async \u0432 Component Model \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0441\u0442\u044c \u0431\u044b\u043b\u0430\u00a0\u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430 \u0438\u043b\u0438 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e runtime.\u00a0\u041a\u0430\u0436\u0434\u0430\u044f \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0440\u0435\u0448\u0430\u043b\u0430 \u0437\u0430\u0434\u0430\u0447\u0443 \u043f\u043e-\u0441\u0432\u043e\u0435\u043c\u0443.\u00a0WASI\u00a00.3 \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u0442 async \u043d\u0430 \u0443\u0440\u043e\u0432\u0435\u043d\u044c Component Model.\u00a0\u0422\u0435\u043f\u0435\u0440\u044c WIT \u043c\u043e\u0436\u0435\u0442 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u00a0\u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e:\u00a0<code>foo: async func(s: string) -&gt; string<\/code>\u00a0\u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043b\u044e\u0431\u043e\u0439 runtime \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442,\u00a0\u0447\u0442\u043e \u0432\u044b\u0437\u043e\u0432\u00a0<code>foo()<\/code>\u00a0\u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c\u0441\u044f \u043f\u043e\u0437\u0436\u0435 \u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430.\u00a0\u042d\u0442\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e\u00a0\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u044c\u044e ABI,\u00a0\u0430 \u043d\u0435 \u0447\u0430\u0441\u0442\u044c\u044e \u044f\u0437\u044b\u043a\u0430.<\/p>\n<p>\u0420\u0430\u0431\u043e\u0442\u0430,\u00a0\u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0432 WASI 0.2 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b\u0438 pollables,\u00a0input-streams \u0438 output-streams,\u00a0\u0442\u0435\u043f\u0435\u0440\u044c\u00a0\u0432\u0445\u043e\u0434\u0438\u0442 \u0432 canonical ABI,\u00a0\u0433\u0434\u0435 Component Model \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u044d\u0442\u0438 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u044b \u043d\u0430\u0442\u0438\u0432\u043d\u043e.\u00a0\u041d\u043e\u0432\u044b\u0435\u00a0async-\u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u044b \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u044c\u044e canonical ABI Component Model,\u00a0\u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430\u043c bindings\u00a0\u0432\u044b\u0434\u0430\u0432\u0430\u0442\u044c \u0438\u0434\u0438\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u044b\u0435 async-bindings \u0434\u043b\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u044f\u0437\u044b\u043a\u0430.<\/p>\n<p>\u0412 WASI 0.2 \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0443 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u0441\u044f \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 event loop.\u00a0\u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u043b\u043e,\u00a0\u0447\u0442\u043e\u00a0\u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043d\u0430 host,\u00a0\u043d\u043e \u044d\u0442\u0438 event loops \u043d\u0435 \u0438\u043c\u0435\u043b\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u00a0\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439.\u00a0\u0415\u0441\u043b\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b streaming \u0438\u043b\u0438 async API,\u00a0\u0435\u0433\u043e \u043d\u0435\u043b\u044c\u0437\u044f \u0431\u044b\u043b\u043e\u00a0\u0441\u043a\u043e\u043c\u043f\u043e\u043d\u043e\u0432\u0430\u0442\u044c \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c\u0438.<\/p>\n<p>WASI 0.3 \u0443\u0441\u0442\u0440\u043e\u0435\u043d \u0442\u0430\u043a,\u00a0\u0447\u0442\u043e \u0442\u0435\u043f\u0435\u0440\u044c host \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c event loop,\u00a0\u043e\u0431\u0449\u0438\u043c \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432.\u00a0\u042d\u0442\u043e \u0441\u0442\u0430\u043b\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u043c \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044e\u00a0<code>stream&lt;T&gt;<\/code>,\u00a0<code>future&lt;T&gt;<\/code>\u00a0\u0438\u00a0<code>async<\/code>\u00a0\u043a\u0430\u043a first-class\u00a0\u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 canonical ABI.<\/p>\n<p>\u0412 WASI 0.2 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u0438\u0441\u0435\u0434\u0430\u043d\u0438\u044f,\u00a0\u0447\u0442\u043e\u0431\u044b \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c async \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c,\u00a0\u043d\u043e \u0442\u0435\u043f\u0435\u0440\u044c async \u043d\u0430\u0442\u0438\u0432\u0435\u043d \u0434\u043b\u044f component model,\u00a0\u0430 \u0437\u043d\u0430\u0447\u0438\u0442 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0440\u0430\u0436\u0430\u0442\u044c \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u044d\u0440\u0433\u043e\u043d\u043e\u043c\u0438\u0447\u043d\u0435\u0435.\u00a0\u041e\u0431\u0437\u043e\u0440\u00a0\u043f\u0430\u0442\u0442\u0435\u0440\u043d\u043e\u0432 \u0432 WASI 0.2 \u0438 \u0442\u043e\u0433\u043e,\u00a0\u043a\u0430\u043a \u044d\u0442\u0438 \u0436\u0435 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u044b \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u0432 0.3 \u0441 Component Model async:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"left\">WASI 0.2<\/p>\n<\/td>\n<td>\n<p align=\"left\">WASI 0.3<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>resource pollable<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>future&lt;T&gt;<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>resource input-stream<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>stream&lt;u8&gt;<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>resource output-stream<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>stream&lt;u8&gt;<\/code>\u00a0(\u0438 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0437\u0430\u043f\u0438\u0441\u0438)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>poll(list&lt;pollable&gt;)<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>await<\/code>\u00a0\u043d\u0430\u00a0<code>future\u00a0<\/code>(\u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f runtime \u044f\u0437\u044b\u043a\u0430, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d WASM)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>subscribe()<\/code>\u00a0\u043d\u0430 resource<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0432\u043e\u0437\u0432\u0440\u0430\u0442\u00a0<code>future&lt;&gt;<\/code>\u00a0\u0438\u0437 \u0432\u044b\u0437\u043e\u0432\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>start-foo<\/code>\u00a0\/\u00a0<code>finish-foo<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>foo: async func()<\/code><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439 WASI 0.2 \u0431\u044b\u043b\u043e \u0442\u043e,\u00a0\u0447\u0442\u043e \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0432\u0441\u043f\u043b\u044b\u0432\u0430\u043b\u0438 \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0432\u044b\u0437\u043e\u0432\u0435\u00a0<code>read<\/code>\u00a0\u0443\u00a0<code>stream<\/code>.\u00a0\u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u043b\u043e,\u00a0\u0447\u0442\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0430\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u0430 \u0443\u0437\u043d\u0430\u0432\u0430\u043b\u0430 \u043e\u0431 \u0438\u0441\u0445\u043e\u0434\u0435,\u00a0\u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u043b\u0430 \u0447\u0438\u0442\u0430\u0442\u044c.\u00a0\u0415\u0441\u043b\u0438\u00a0\u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044c \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u043b\u0441\u044f \u0440\u0430\u043d\u044c\u0448\u0435,\u00a0\u043e\u043d \u043d\u0435 \u043c\u043e\u0433 \u043e\u0442\u043b\u0438\u0447\u0438\u0442\u044c \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u0435\u00a0<code>stream<\/code>\u00a0\u043e\u0442 \u043e\u0448\u0438\u0431\u043a\u0438.\u00a0\u0412 WASI 0.3 streams\u00a0\u0442\u0435\u043f\u0435\u0440\u044c \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439\u00a0<code>future<\/code>,\u00a0\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0435\u0437\u043e\u043b\u0432\u0438\u0442\u0441\u044f \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u043e\u0442 \u0442\u043e\u0433\u043e,\u00a0\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u044b\u043b\u043e\u00a0\u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u043e \u0438\u0437\u00a0<code>stream<\/code>,\u00a0\u0440\u0435\u0448\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0441\u0442\u0430\u0442\u0443\u0441\u0430\u00a0<code>stream<\/code>\u00a0\u0438\u0437 WASI 0.2:<\/p>\n<pre><code>\/\/ WASI 0.2read-via-stream: func() -&gt; result&lt;input-stream, error-code&gt;;\/\/ WASI 0.3read-via-stream: func() -&gt; tuple&lt;stream&lt;u8&gt;, future&lt;result&lt;_, error-code&gt;&gt;&gt;;<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:87px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041a\u0438\u043b\u043b\u0435\u0440-\u0444\u0438\u0447\u0430 component model \u0432 \u0442\u043e\u043c,\u00a0\u0447\u0442\u043e \u043e\u043d \u0434\u0435\u043b\u0430\u0435\u0442 \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u044b\u043c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 bindings \u043a\u00a0\u0434\u0440\u0443\u0433\u0438\u043c \u044f\u0437\u044b\u043a\u0430\u043c \u0438 \u0438\u0437 \u043d\u0438\u0445.\u00a0\u0421 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c first-class\u00a0<code>async<\/code>\u00a0\u044d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442,\u00a0\u0447\u0442\u043e \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u044b\u00a0guest-bindings \u043c\u043e\u0433\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f async-bindings,\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u043d\u0430\u0442\u0438\u0432\u043d\u043e \u0432\u00a0\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u043c \u044f\u0437\u044b\u043a\u0435.<\/p>\n<p>\u0420\u0430\u0437\u043d\u044b\u0435 \u044f\u0437\u044b\u043a\u0438 \u043e\u043f\u0438\u0440\u0430\u044e\u0442\u0441\u044f \u043d\u0430 stackless \u0438\u043b\u0438 stackful coroutines.\u00a0Async ABI\u00a0Component Model \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0441\u044f \u0442\u0430\u043a,\u00a0\u0447\u0442\u043e\u0431\u044b \u0441\u043e\u0432\u043c\u0435\u0449\u0430\u0442\u044c \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043e\u0431\u0430 \u043f\u043e\u0434\u0445\u043e\u0434\u0430.<\/p>\n<h3>\u041c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u044b \u043f\u0440\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 WASI 0.3<\/h3>\n<ul>\n<li>\n<p><strong>Fiber-like stack switching \u0431\u0435\u0437 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 core wasm proposal<\/strong>: Async ABI \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 fiber (stackful coroutine). \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u0445\u00a0<a href=\"https:\/\/github.com\/WebAssembly\/stack-switching\/tree\/main\/proposals\/stack-switching\" rel=\"noopener noreferrer nofollow\">core wasm stack-switching proposal<\/a>, \u043d\u043e \u043d\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0432 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0435. \u0422\u043e \u0435\u0441\u0442\u044c Wasmtime \u043d\u0435 \u043d\u0443\u0436\u0435\u043d core wasm typed continuations, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0430\u0442\u044c async, \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0447\u0435\u0440\u0435\u0437 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u0441\u0442\u0435\u043a\u0438 (Wasmtime \u0442\u0430\u043a \u0438 \u0434\u0435\u043b\u0430\u0435\u0442, \u0447\u0443\u0442\u044c \u043d\u0438\u0436\u0435 \u043e\u0431 \u044d\u0442\u043e\u043c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435).<\/p>\n<\/li>\n<li>\n<p><strong>\u041d\u0438\u043a\u0430\u043a\u043e\u0439 \u0440\u0430\u0441\u043a\u0440\u0430\u0441\u043a\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0439<\/strong>:\u00a0<code>async<\/code>\u00a0\u0432 JavaScript\/Python\/Kotlin \u0437\u0430\u0440\u0430\u0436\u0430\u0435\u0442 \u0432\u0441\u044e \u0446\u0435\u043f\u043e\u0447\u043a\u0443 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439. Component Model \u043e\u0442\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b: \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0446\u0432\u0435\u0442\u0430, sync- \u0438 async-\u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0443\u044e\u0442\u0441\u044f \u0432 \u043b\u044e\u0431\u043e\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438.<\/p>\n<\/li>\n<li>\n<p><strong>\u0412\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0435 backpressure \u0438 cancellation<\/strong>: backpressure \u043d\u0443\u0436\u043d\u0430, \u0447\u0442\u043e\u0431\u044b caller \u043d\u0435 \u0437\u0430\u0432\u0430\u043b\u0438\u043b \u0441\u0438\u0441\u0442\u0435\u043c\u0443, cancellation &#8212; \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0431\u0440\u043e\u0441\u0438\u0442\u044c \u043d\u0435\u043d\u0443\u0436\u043d\u0443\u044e \u0440\u0430\u0431\u043e\u0442\u0443.<\/p>\n<\/li>\n<\/ul>\n<h3>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f<\/h3>\n<h4>async<\/h4>\n<p><code>async<\/code>\u00a0effect type\u00a0&#8212;\u00a0\u044d\u0442\u043e \u0430\u0442\u0440\u0438\u0431\u0443\u0442 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 WIT,\u00a0\u043f\u043e\u043c\u0435\u0447\u0430\u044e\u0449\u0438\u0439\u00a0&#171;\u044d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f \u043f\u0435\u0440\u0435\u0434\u00a0\u0432\u043e\u0437\u0432\u0440\u0430\u0442\u043e\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f&#187;.  <\/p>\n<pre><code>interface processor {  process: async func(in: inputs) -&gt; outputs;  \/* \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f *\/  ready: func() -&gt; bool;                       \/* \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f *\/}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<details class=\"spoiler\">\n<summary>Effect type<\/summary>\n<div class=\"spoiler__content\">\n<p>\u042d\u0442\u043e \u043f\u043e\u043d\u044f\u0442\u0438\u0435 \u0438\u0437 \u0441\u0438\u0441\u0442\u0435\u043c \u0442\u0438\u043f\u043e\u0432,\u00a0\u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e,\u00a0\u0447\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u00a0\u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442,\u00a0\u043d\u043e \u0438 \u043a\u0430\u043a\u0438\u0435 \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c\u044b\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043e\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u043e\u044f\u0432\u043b\u044f\u0442\u044c \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f:\u00a0\u0431\u0440\u043e\u0441\u0438\u0442\u044c\u00a0\u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435,\u00a0\u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f,\u00a0\u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c I\/O,\u00a0\u043f\u0440\u0438\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f,\u00a0\u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u0440\u0435\u0441\u0443\u0440\u0441 \u0438 \u0442.\u043f.  <\/p>\n<\/div>\n<\/details>\n<p>\u0421\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0430\u00a0<code>async<\/code>\u00a0\u0432 WIT\u00a0&#8212;\u00a0\u044d\u0442\u043e \u043d\u0435\u00a0&#171;\u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e&#187;,\u00a0\u0430\u00a0&#171;\u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f&#187;.\u00a0\u042d\u0442\u043e\u00a0\u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435,\u00a0\u0430 \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u043d\u043d\u043e\u0441\u0442\u044c.\u00a0\u0415\u0441\u043b\u0438 \u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043d\u0435\u0442\u00a0<code>async<\/code>,\u00a0\u0438 \u043e\u043d\u0430 \u043f\u0440\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u043f\u043e\u043f\u044b\u0442\u0430\u043b\u0430\u0441\u044c\u00a0\u043f\u0440\u0438\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f,\u00a0\u0431\u0443\u0434\u0435\u0442\u00a0<code>trap<\/code>.<\/p>\n<p>\u041d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 ABI \u0432 Component Model \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441 \u0442\u0438\u043f\u043e\u043c\u00a0<code>async<\/code>\u00a0\u043d\u0435\u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0449\u0443\u044e core-\u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0443,\u00a0\u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432\u043c\u0435\u0441\u0442\u043e \u0438\u043b\u0438 \u043d\u0430\u0440\u044f\u0434\u0443 \u0441 \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439\u00a0\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0439 core-\u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u043e\u0439\u00a0(\u0438\u0437 WASI 0.2).\u00a0\u0418\u0434\u0435\u044f \u0432 \u0442\u043e\u043c,\u00a0\u0447\u0442\u043e \u044d\u0442\u0438 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u044b \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u044b \u043d\u0435 \u0434\u043b\u044f\u00a0\u0440\u0443\u0447\u043d\u043e\u0433\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f:\u00a0\u0438\u0445 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442 \u0438\u043b\u0438\u00a0<strong>\u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0442 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 bindings<\/strong>,\u00a0\u0430 \u0442\u0435 \u0443\u0436\u0435 \u043c\u0430\u043f\u044f\u0442\u00a0\u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0439 core async-\u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u043d\u0430 \u0432\u044b\u0441\u043e\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0435 \u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0442\u043d\u044b\u0435 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430.<\/p>\n<p>\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c,\u00a0\u043a\u0430\u043a \u044d\u0442\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e.<\/p>\n<h4>Async Import ABI<\/h4>\n<p><code>async import<\/code>\u00a0\u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u0442,\u00a0\u0447\u0442\u043e \u0445\u043e\u0447\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u043e\u0442 \u0445\u043e\u0441\u0442\u0430\u00a0(\u0438\u043b\u0438 \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430)\u00a0\u0444\u0443\u043d\u043a\u0446\u0438\u044e,\u00a0\u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043c\u043e\u0436\u0435\u0442 \u043d\u0435 \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0441\u0440\u0430\u0437\u0443,\u00a0\u0438 \u043f\u043e\u043a\u0430 \u043e\u043d\u0430\u00a0&#171;\u0434\u0443\u043c\u0430\u0435\u0442&#187;,\u00a0\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0433\u043e\u0442\u043e\u0432 \u043e\u0442\u0434\u0430\u0442\u044c\u00a0\u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0438 \u0437\u0430\u043d\u044f\u0442\u044c\u0441\u044f \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0437\u0430\u0434\u0430\u0447\u0430\u043c\u0438.\u00a0\u042d\u0442\u043e \u0442\u043e\u0447\u043a\u0430,\u00a0\u0433\u0434\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0436\u0434\u0435\u0442 I\/O \u043e\u0442 \u0445\u043e\u0441\u0442\u0430,\u00a0\u043d\u0435 \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044f \u043d\u0438\u00a0\u043f\u043e\u0442\u043e\u043a \u0445\u043e\u0441\u0442\u0430,\u00a0\u043d\u0438 \u0441\u0430\u043c \u0438\u043d\u0441\u0442\u0430\u043d\u0441.  <\/p>\n<pre><code>import bar: async func(s: string) -&gt; string;<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0421\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u0430\u044f \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430: <\/p>\n<pre><code>(func $bar (param $s-ptr i32) (param $s-len i32) (param $out-ptr i32))<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0410\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u0430\u044f \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430:  <\/p>\n<pre><code>(func $bar (param $s-ptr i32) (param $s-len i32) (param $out-ptr i32) (result i32))<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e,\u00a0\u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0441\u044f\u00a0<code>i32\u00a0<\/code>\u0441\u0442\u0430\u0442\u0443\u0441-\u043a\u043e\u0434,\u00a0\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438.\u00a0\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u044b\u0439\u00a0<code>i32<\/code>\u00a0\u043d\u0435\u0441\u0435\u0442 \u0434\u0432\u0435 \u0432\u0435\u0449\u0438 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e,\u00a0\u0443\u043f\u0430\u043a\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0431\u0438\u0442\u0430\u043c\u0438:<\/p>\n<ul>\n<li>\n<p>\u041d\u0438\u0437\u043a\u0438\u0435 4 \u0431\u0438\u0442\u0430 &#8212; \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0432\u044b\u0437\u043e\u0432\u0430:<\/p>\n<ul>\n<li>\n<p><code>0<\/code>\u00a0&#8212; \u0432\u044b\u0437\u043e\u0432 \u043d\u0435 \u043d\u0430\u0447\u0430\u043b\u0441\u044f,\u00a0<code>$out-ptr<\/code>\u00a0\u043d\u0435 \u0437\u0430\u043f\u0438\u0441\u0430\u043d<\/p>\n<\/li>\n<li>\n<p><code>1<\/code>\u00a0&#8212; \u0432\u044b\u0437\u043e\u0432 \u043d\u0430\u0447\u0430\u043b\u0441\u044f, \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u043f\u0440\u0438\u043d\u044f\u0442\u044b, \u043d\u043e\u00a0<code>$out-ptr<\/code>\u00a0\u0435\u0449\u0435 \u043d\u0435 \u0437\u0430\u043f\u0438\u0441\u0430\u043d<\/p>\n<\/li>\n<li>\n<p><code>2<\/code>\u00a0&#8212; \u0432\u044b\u0437\u043e\u0432 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043b\u0441\u044f,\u00a0<code>$out-ptr<\/code>\u00a0\u0437\u0430\u043f\u0438\u0441\u0430\u043d<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>\u0412\u044b\u0441\u043e\u043a\u0438\u0435 28 \u0431\u0438\u0442: \u0438\u043d\u0434\u0435\u043a\u0441 \u043d\u043e\u0432\u043e\u0439 async-\u043f\u043e\u0434\u0437\u0430\u0434\u0430\u0447\u0438 \u0432 waitable-\u0442\u0430\u0431\u043b\u0438\u0446\u0435 (\u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043d\u0443\u0436\u043d\u043e \u043e\u0436\u0438\u0434\u0430\u0442\u044c) \u0438\u043b\u0438\u00a0<code>0<\/code>.<\/p>\n<\/li>\n<\/ul>\n<details class=\"spoiler\">\n<summary>Waitable table<\/summary>\n<div class=\"spoiler__content\">\n<p>\u041e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0435 \u043e\u0442 resources (\u043d\u043e \u043f\u043e\u0445\u043e\u0436\u0435\u0435 \u043f\u043e \u0441\u0443\u0442\u0438) \u0438\u043d\u0434\u0435\u043a\u0441\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u0430,\u00a0\u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0435 Canonical ABI\u00a0\u043f\u043e\u043c\u0435\u0449\u0430\u0435\u0442 \u0432\u0441\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b,\u00a0\u043d\u0430 \u0433\u043e\u0442\u043e\u0432\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0433\u043e\u0441\u0442\u0435\u0432\u043e\u0439 \u043a\u043e\u0434 \u043c\u043e\u0436\u0435\u0442 \u043e\u0436\u0438\u0434\u0430\u0442\u044c.\u00a0\u041a \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u00a0\u043e\u0442\u043d\u043e\u0441\u044f\u0442\u0441\u044f:\u00a0\u043f\u043e\u0434\u0437\u0430\u0434\u0430\u0447\u0438\u00a0(subtasks),\u00a0\u043f\u043e\u0440\u043e\u0436\u0434\u0451\u043d\u043d\u044b\u0435 async-\u0432\u044b\u0437\u043e\u0432\u0430\u043c\u0438 \u0438\u043c\u043f\u043e\u0440\u0442\u043e\u0432,\u00a0\u043a\u043e\u043d\u0446\u044b \u0441\u0442\u0440\u0438\u043c\u043e\u0432\u00a0(<code>stream.readable<\/code>\/<code>stream.writable<\/code>),\u00a0\u043a\u043e\u043d\u0446\u044b future\u00a0(<code>future.readable<\/code>\/<code>future.writable<\/code>).\u00a0\u041a\u0430\u0436\u0434\u043e\u043c\u0443\u00a0\u0442\u0430\u043a\u043e\u043c\u0443 \u043e\u0431\u044a\u0435\u043a\u0442\u0443 \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0432\u044b\u0434\u0430\u0435\u0442\u0441\u044f\u00a0<code>i32<\/code>-\u0438\u043d\u0434\u0435\u043a\u0441 \u0432 \u044d\u0442\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435.  <\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u0420\u0435\u0441\u0443\u0440\u0441\u044b<\/summary>\n<div class=\"spoiler__content\">\n<p><a href=\"https:\/\/component-model.bytecodealliance.org\/design\/wit.html#resources\" rel=\"noopener noreferrer nofollow\">\u041c\u0435\u0445\u0430\u043d\u0438\u0437\u043c<\/a> \u0434\u043b\u044f \u0438\u043d\u043a\u0430\u043f\u0441\u0443\u043b\u044f\u0446\u0438\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438\u043c.\u00a0\u042d\u0442\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f\u00a0\u0441 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u0432\u044b\u0437\u043e\u0432\u0430\u00a0(\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440,\u00a0\u0432 Rust-\u043a\u043e\u0434\u0435)\u00a0\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0441\u00a0\u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b\u00a0(\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440,\u00a0\u0432 WebAssembly-\u043a\u043e\u0434\u0435).  \u0420\u0435\u0441\u0443\u0440\u0441 &#8212; \u044d\u0442\u043e \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438, \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u0432\u043d\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 WASM.<\/p>\n<\/div>\n<\/details>\n<p>\u041a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435 \u0434\u043b\u044f caller:\u00a0\u043f\u043e\u043a\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u043f\u043e\u043c\u0435\u0447\u0435\u043d \u043a\u0430\u043a\u00a0\u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0439\/\u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439,\u00a0caller \u043e\u0431\u044f\u0437\u0430\u043d \u0443\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u043b\u0438\u043d\u0435\u0439\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0436\u0438\u0432\u043e\u0439.\u00a0\u041d\u0435\u043b\u044c\u0437\u044f \u0435\u0451 \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0430\u0442\u044c,\u00a0\u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0442\u044c.\u00a0\u0410\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u043e\u0434\u043e\u043b\u0436\u0435\u043d\u043d\u044b\u043c\u0438 callee,\u00a0\u0430\u00a0\u0431\u0443\u0444\u0435\u0440 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u0437\u0430\u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u043f\u043e\u0434 \u0431\u0443\u0434\u0443\u0449\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c.  <\/p>\n<h4>Async Export ABI<\/h4>\n<p><code>export async<\/code>\u00a0\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0434\u043b\u044f \u0442\u043e\u0433\u043e,\u00a0\u0447\u0442\u043e\u0431\u044b \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442-callee \u043c\u043e\u0433 \u0441\u043e\u043e\u0431\u0449\u0438\u0442\u044c \u0445\u043e\u0441\u0442\u0443\u00a0(\u0438\u043b\u0438 \u0434\u0440\u0443\u0433\u043e\u043c\u0443\u00a0\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0443-caller): &#171;\u043c\u043e\u0439 \u043e\u0442\u0432\u0435\u0442 \u0435\u0449\u0435 \u043d\u0435 \u0433\u043e\u0442\u043e\u0432,\u00a0\u043c\u043e\u0436\u0435\u0448\u044c \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0434\u0435\u043b\u0430\u043c\u0438&#187;.\u00a0\u0418\u043d\u0430\u0447\u0435 \u0433\u043e\u0432\u043e\u0440\u044f,\u00a0<code>async\u00a0<\/code>\u043d\u0430 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435\u00a0&#8212;\u00a0\u044d\u0442\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0435\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u0434\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u044b. <\/p>\n<pre><code>export foo: async func(s: string) -&gt; string;<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0421\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u0430\u044f \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430:  <\/p>\n<pre><code>(func (param $s-ptr i32) (param $s-len i32) (result $retp i32))<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><code>$retp<\/code>\u00a0\u044d\u0442\u043e \u0432\u044b\u0440\u043e\u0432\u043d\u0435\u043d\u043d\u044b\u0439 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0432 \u043b\u0438\u043d\u0435\u0439\u043d\u0443\u044e \u043f\u0430\u043c\u044f\u0442\u044c,\u00a0\u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 caller \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442 \u043f\u0430\u0440\u0443\u00a0<code>(pointer, length)<\/code>\u00a0\u0441\u0442\u0440\u043e\u043a\u0438-\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430.<\/p>\n<p>\u0414\u043b\u044f \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0445 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u043e\u0432 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u044b \u0434\u0432\u0430 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440:\u00a0stackful \u0438 stackless.\u00a0\u042d\u0442\u043e\u00a0\u0441\u043e\u0437\u043d\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 Component Model:\u00a0\u044f\u0437\u044b\u043a \u0441\u043e stackful-\u043a\u043e\u0440\u0443\u0442\u0438\u043d\u0430\u043c\u0438\u00a0(Go \u0438\u043b\u0438 Java Loom)\u00a0\u0438\u00a0\u044f\u0437\u044b\u043a \u0441\u043e stackless-\u043a\u043e\u0440\u0443\u0442\u0438\u043d\u0430\u043c\u0438\u00a0(Rust \u0438\u043b\u0438 Kotlin)\u00a0\u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442\u00a0<strong>\u043a\u0430\u0436\u0434\u044b\u0439 \u0441\u0432\u043e\u044e<\/strong>\u00a0ABI-\u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0443.<\/p>\n<p>\u0421\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430 stackful async-\u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430:<\/p>\n<pre><code>;; async, no callback(func (param $s-ptr i32) (param $s-len i32))<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0423 core-\u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043d\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430.\u00a0\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043d\u0435 \u0447\u0435\u0440\u0435\u0437\u00a0<code>return<\/code>,\u00a0\u0430 \u0432\u044b\u0437\u043e\u0432\u043e\u043c\u00a0\u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438\u00a0<code>task.return<\/code>:  <\/p>\n<pre><code>(func (param $ret-ptr i32) (param $ret-len i32))<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b\u00a0<code>task.return<\/code>\u00a0\u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0442\u0430\u043a,\u00a0\u0447\u0442\u043e WIT-\u0442\u0438\u043f \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f WIT-\u0442\u0438\u043f\u043e\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u00a0\u043e\u0431\u044b\u0447\u043d\u043e\u0439 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438.\u00a0\u0422\u043e \u0435\u0441\u0442\u044c \u0434\u043b\u044f \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u043e\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u00a0&#8212;\u00a0\u044d\u0442\u043e \u043f\u0430\u0440\u0430\u00a0<code>(ret-ptr, ret-len)<\/code>.<\/p>\n<p>\u0412 Stackful-\u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0435 (Go \u0438\u043b\u0438 Java Loom) callee\u00a0\u0432\u043b\u0430\u0434\u0435\u0435\u0442 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u043c wasm-\u0441\u0442\u0435\u043a\u043e\u043c,\u00a0\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u00a0\u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0438 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u043f\u0440\u0438 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0435\/\u0432\u043e\u0437\u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 \u0437\u0430\u0434\u0430\u0447\u0438.<\/p>\n<p>\u0421\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430 stackless async-\u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430:<\/p>\n<pre><code>;; async, callback(func (param $s-ptr i32) (param $s-len i32) (result i32))<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0441\u043d\u043e\u0432\u0430 \u043a\u0430\u043a \u0432 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435.\u00a0\u0412\u043e\u0437\u0432\u0440\u0430\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0447\u0435\u0440\u0435\u0437\u00a0<code>task.return<\/code>\u00a0(\u0442\u043e\u0447\u043d\u043e \u0442\u0430\u043a \u0436\u0435,\u00a0\u043a\u0430\u043a \u0432\u00a0stackful).\u00a0\u0410 \u0432\u043e\u0442\u00a0<code>(result i32)<\/code>\u00a0\u043d\u0435\u0441\u0435\u0442 \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438.\u00a0\u042d\u0442\u043e\u00a0\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0443,\u00a0\u0447\u0442\u043e\u00a0\u0434\u0435\u043b\u0430\u0442\u044c \u0434\u0430\u043b\u044c\u0448\u0435.\u00a0\u042d\u0442\u043e \u0438 \u0435\u0441\u0442\u044c \u0441\u0443\u0442\u044c stackless-\u0440\u0435\u0436\u0438\u043c\u0430:\u00a0\u0432\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438\u00a0(\u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044f \u0441\u0442\u0435\u043a),\u00a0\u0444\u0443\u043d\u043a\u0446\u0438\u044f \u044f\u0432\u043d\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 event loop \u0441 \u043f\u043e\u043c\u0435\u0442\u043a\u043e\u0439 \u043e \u0441\u0432\u043e\u0435\u043c \u0436\u0435\u043b\u0430\u043d\u0438\u0438 \u043f\u0440\u0438\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f,\u00a0\u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0430\u044f native-\u0441\u0442\u0435\u043a \u0445\u043e\u0441\u0442-\u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0430.\u00a0\u042d\u0442\u043e \u0438\u0434\u0438\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u00a0\u043a\u043e\u0440\u0443\u0442\u0438\u043d\u0430 \u043a\u0430\u043a state machine,\u00a0\u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u043d\u044b\u0439 \u0434\u043b\u044f \u044f\u0437\u044b\u043a\u043e\u0432 Rust \u0438 Kotlin.<\/p>\n<p>\u0421\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0433\u043e\u00a0<code>i32<\/code>\u00a0(\u0441\u043d\u043e\u0432\u0430:\u00a0\u043d\u0438\u0437\u043a\u0438\u0435 4 \u0431\u0438\u0442\u0430\u00a0+\u00a0\u0432\u044b\u0441\u043e\u043a\u0438\u0435 28 \u0431\u0438\u0442):<\/p>\n<ul>\n<li>\n<p>\u041d\u0438\u0437\u043a\u0438\u0435 4 \u0431\u0438\u0442\u0430 &#8212; \u0447\u0442\u043e \u0445\u043e\u0447\u0435\u0442 callee:<\/p>\n<ul>\n<li>\n<p><code>0<\/code>\u00a0&#8212; \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043b\u0441\u044f (\u0443\u0436\u0435 \u0432\u044b\u0437\u0432\u0430\u043b\u00a0<code>task.return<\/code>), \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0435 \u0431\u044b\u043b\u043e<\/p>\n<\/li>\n<li>\n<p><code>1<\/code>\u00a0&#8212; \u0445\u043e\u0447\u0435\u0442\u00a0<code>yield<\/code>\u00a0&#8212; \u043e\u0442\u0434\u0430\u0442\u044c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u0440\u0443\u0433\u043e\u043c\u0443 \u043a\u043e\u0434\u0443<\/p>\n<\/li>\n<li>\n<p><code>2<\/code>\u00a0&#8212; \u0445\u043e\u0447\u0435\u0442 \u0436\u0434\u0430\u0442\u044c \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0432 waitable-set<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>\u0412\u044b\u0441\u043e\u043a\u0438\u0435 28 \u0431\u0438\u0442: \u0438\u043d\u0434\u0435\u043a\u0441 waitable-set \u0438\u043b\u0438 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f.<\/p>\n<\/li>\n<\/ul>\n<p>\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u043e stackless-\u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430:\u00a0\u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0441\u0430\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0430\u00a0\u0444\u0443\u043d\u043a\u0446\u0438\u044f-callback \u0441 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u043e\u0439:<\/p>\n<pre><code>(func (param i32 i32 i32) (result i32))<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0417\u0434\u0435\u0441\u044c:<\/p>\n<ul>\n<li>\n<p><code>(result i32)<\/code>\u00a0\u0438\u043c\u0435\u0435\u0442 \u0442\u0443 \u0436\u0435 \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0443, \u0447\u0442\u043e \u0438 \u0443 \u0441\u0430\u043c\u043e\u0433\u043e \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043a\u043e\u043b\u043b\u0431\u044d\u043a\u0443 \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0443 &#171;\u044f \u0441\u043d\u043e\u0432\u0430 \u0445\u043e\u0447\u0443\u00a0<code>yield\"<\/code>\u00a0\u0438\u043b\u0438 &#171;\u0436\u0434\u0443 \u043d\u0430 \u044d\u0442\u043e\u043c waitable-set&#187;.<\/p>\n<\/li>\n<li>\n<p>\u0422\u0440\u0438\u00a0<code>i32<\/code>-\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u043a\u043e\u0434\u0438\u0440\u0443\u044e\u0442 \u0441\u043e\u0431\u044b\u0442\u0438\u0435, \u0438\u0437-\u0437\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e callback \u0431\u044b\u043b \u0432\u044b\u0437\u0432\u0430\u043d<\/p>\n<\/li>\n<li>\n<p>\u0420\u0430\u043d\u0442\u0430\u0439\u043c \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e \u0434\u0451\u0440\u0433\u0430\u0442\u044c callback \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u0442\u043e\u0442 \u043d\u0435 \u0432\u0435\u0440\u043d\u0435\u0442\u00a0<code>0<\/code>.<\/p>\n<\/li>\n<\/ul>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c stackless-\u044d\u043a\u0441\u043f\u043e\u0440\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435: <code>\u0444\u0443\u043d\u043a\u0446\u0438\u044f -&gt; \u0432\u043e\u0437\u0432\u0440\u0430\u0442 \u0432 event loop -&gt; callback -&gt; \u0432\u043e\u0437\u0432\u0440\u0430\u0442 \u0432 event loop -&gt; callback -&gt; ... -&gt; callback \u0432\u0435\u0440\u043d\u0443\u043b\u00a00<\/code>\u00a0<code>-&gt; \u0437\u0430\u0434\u0430\u0447\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0430<\/code>  <\/p>\n<p>\u041c\u0435\u0436\u0434\u0443 \u044d\u0442\u0438\u043c\u0438 \u0448\u0430\u0433\u0430\u043c\u0438 \u0445\u043e\u0441\u0442 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 \u0438\u043b\u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b,\u00a0native-\u0441\u0442\u0435\u043a \u0432\u0441\u0451 \u044d\u0442\u043e\u00a0\u0432\u0440\u0435\u043c\u044f \u0441\u0432\u043e\u0431\u043e\u0434\u0435\u043d. <\/p>\n<h4>future\u00a0\u0438\u00a0stream<\/h4>\n<p>\u0414\u0432\u0430 type \u0432 WIT,\u00a0\u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0445 concurrency \u0432 \u043e\u0431\u043e\u0438\u0445 ABI\u00a0(\u0438 sync,\u00a0\u0438 async).\u00a0\u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0431\u0438\u043d\u0434\u0438\u0442\u044c \u0438\u0445 \u043a\u00a0\u0438\u0434\u0438\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c \u0432\u0441\u0435\u0445 \u0446\u0435\u043b\u0435\u0432\u044b\u0445 \u044f\u0437\u044b\u043a\u043e\u0432:\u00a0Promises\u00a0(JS),\u00a0futures\u00a0(Rust),\u00a0streams\/channels\u00a0(Go),\u00a0\u0438 \u0442.\u0434.<\/p>\n<p>\u0421\u0435\u043c\u0430\u043d\u0442\u0438\u0447\u0435\u0441\u043a\u0438:<\/p>\n<ul>\n<li>\n<p><code>future&lt;T&gt;<\/code>\u00a0&#8212; \u043e\u0434\u043d\u043e\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u043a\u0430\u043d\u0430\u043b \u043d\u0430 \u0440\u043e\u0432\u043d\u043e 0 \u0438\u043b\u0438 1 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435.<\/p>\n<\/li>\n<li>\n<p><code>stream&lt;T&gt;<\/code>\u00a0&#8212; \u043e\u0434\u043d\u043e\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u043a\u0430\u043d\u0430\u043b \u043d\u0430 0..N \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439.<\/p>\n<\/li>\n<\/ul>\n<p>\u0423 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0442\u0430\u043a\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0435\u0441\u0442\u044c \u0434\u0432\u0430 \u043a\u043e\u043d\u0446\u0430:<\/p>\n<ul>\n<li>\n<p>readable end (\u0447\u0438\u0442\u0430\u044e\u0449\u0438\u0439) &#8212; \u043a\u0442\u043e-\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u0442\u044c \u0438\u0437 \u043d\u0435\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f,<\/p>\n<\/li>\n<li>\n<p>writable end (\u043f\u0438\u0448\u0443\u0449\u0438\u0439) &#8212; \u043a\u0442\u043e-\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0442\u0443\u0434\u0430 \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f.<\/p>\n<\/li>\n<\/ul>\n<p>Component Model \u0436\u0451\u0441\u0442\u043a\u043e \u0440\u0435\u0433\u0443\u043b\u0438\u0440\u0443\u0435\u0442 \u0432\u043b\u0430\u0434\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0446\u0430\u043c\u0438 \u043a\u0430\u043d\u0430\u043b\u0430.\u00a0\u0415\u0441\u0442\u044c \u0434\u0432\u0430 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f:\u00a0\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u00a0<code>stream<\/code>\/<code>future\u00a0<\/code>(\u043a\u0430\u043a \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043b\u0438\u0431\u043e \u043a\u0430\u043a \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u0439)\u00a0<strong>\u0438\u043b\u0438<\/strong>\u00a0\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u00a0\u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u00a0<code>stream<\/code>\/<code>future\u00a0<\/code>\u043d\u0430\u0440\u0443\u0436\u0443\u00a0(\u043a\u0430\u043a \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043b\u0438\u0431\u043e \u043a\u0430\u043a \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u00a0\u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u0439).\u00a0\u0427\u0435\u0440\u0435\u0437 \u0433\u0440\u0430\u043d\u0438\u0446\u0443 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u00a0(\u0432 WIT-\u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430\u0445)\u00a0\u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e readable end\u00a0&#8212;\u00a0\u043f\u0440\u043e\u0442\u0438\u0432\u043e\u043f\u043e\u043b\u043e\u0436\u043d\u0430\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u0432\u044b\u0437\u043e\u0432\u0430 \u0432\u0438\u0434\u0438\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0435\u0433\u043e.\u00a0Writable end\u00a0&#8212;\u00a0\u044d\u0442\u043e\u00a0\u043f\u0440\u0438\u0432\u0430\u0442\u043d\u0430\u044f\u00a0\u0440\u0443\u0447\u043a\u0430\u00a0\u0442\u043e\u0433\u043e,\u00a0\u043a\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u043b \u043f\u0430\u0440\u0443 \u0432\u044b\u0437\u043e\u0432\u043e\u043c\u00a0<code>{stream,future}.new<\/code>,\u00a0\u0438 \u043e\u043d \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0432\u00a0<code>waitable-table<\/code>\u00a0\u0435\u0433\u043e\u00a0\u0438\u043d\u0441\u0442\u0430\u043d\u0441\u0430.\u00a0<\/p>\n<p>\u0412 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0438 host\u00a0(Wasmtime)\u00a0-&gt;\u00a0WASM \u044d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442:\u00a0\u0435\u0441\u043b\u0438 host \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u044d\u043a\u0441\u043f\u043e\u0440\u0442 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0438\u00a0\u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u00a0<code>stream&lt;u8&gt;<\/code>,\u00a0host \u0441\u0430\u043c \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u043b \u043f\u0430\u0440\u0443 \u0443 \u0441\u0435\u0431\u044f,\u00a0\u043e\u0441\u0442\u0430\u0432\u0438\u043b writable \u0443 \u0441\u0435\u0431\u044f \u0438 \u043e\u0442\u0434\u0430\u043b\u00a0readable \u0432\u043d\u0443\u0442\u0440\u044c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430.\u00a0\u0415\u0441\u043b\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 host\u00a0<code>future&lt;T&gt;<\/code>\u00a0\u043a\u0430\u043a \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0438\u043c\u043f\u043e\u0440\u0442\u0430,\u00a0writable \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0443 host,\u00a0\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 readable.\u00a0\u0421\u0438\u043c\u043c\u0435\u0442\u0440\u0438\u0447\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0435\u00a0\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435:\u00a0writable \u0432\u0441\u0435\u0433\u0434\u0430 \u0443 \u0442\u043e\u0433\u043e,\u00a0\u043a\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0438\u0441\u0430\u0442\u044c,\u00a0readable\u00a0&#8212;\u00a0\u0443 \u0442\u043e\u0433\u043e,\u00a0\u043a\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0447\u0438\u0442\u0430\u0442\u044c,\u00a0\u0438 \u0447\u0435\u0440\u0435\u0437 ABI \u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u0435\u0442 \u0433\u0440\u0430\u043d\u0438\u0446\u0443 \u0442\u043e\u043b\u044c\u043a\u043e readable.<\/p>\n<p>\u041f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 runtime,\u00a0\u0430 \u043d\u0435 \u043a\u0430\u0436\u0434\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u043f\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438.\u00a0\u041a\u043e\u0433\u0434\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043e \u0432\u00a0<code>future<\/code>\u00a0\u0438\u043b\u0438 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0437\u0430\u043f\u0438\u0441\u0430\u043d \u0432\u00a0<code>stream<\/code>,\u00a0runtime \u0441\u0430\u043c \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u0442 \u0437\u0430\u0434\u0430\u0447\u0443,\u00a0\u043e\u0436\u0438\u0434\u0430\u044e\u0449\u0443\u044e \u044d\u0442\u043e\u0433\u043e\u00a0\u0441\u043e\u0431\u044b\u0442\u0438\u044f,\u00a0\u0438 \u0434\u0435\u043b\u0430\u0435\u0442 \u044d\u0442\u043e \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 readable end \u0443\u0441\u043f\u0435\u043b \u043f\u0440\u043e\u0439\u0442\u0438 \u0447\u0435\u0440\u0435\u0437 \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432.\u00a0\u0412 \u0447\u0438\u0441\u0442\u043e\u043c \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0438 host\u00a0-&gt;\u00a0WASM \u044d\u0442\u043e \u0441\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043a \u043f\u0440\u043e\u0441\u0442\u043e\u043c\u0443 \u0441\u043b\u0443\u0447\u0430\u044e:\u00a0writer\u00a0&#8212;\u00a0\u044d\u0442\u043e host\u00a0(Wasmtime),\u00a0\u043e\u043d \u0436\u0435 \u0432\u043b\u0430\u0434\u0435\u043b\u0435\u0446 writable end \u0438 \u043e\u043d \u0436\u0435 event loop.<\/p>\n<p>Writer \u0432 \u043e\u0431\u0449\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c host&#8217;\u043e\u043c,\u00a0\u0434\u0440\u0443\u0433\u0438\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u043c \u0438\u043b\u0438 \u0434\u0430\u0436\u0435 \u0442\u0435\u043c \u0436\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u043c,\u00a0\u043a\u043e\u0442\u043e\u0440\u044b\u0439\u00a0\u0434\u0435\u0440\u0436\u0438\u0442 readable end,\u00a0\u043d\u043e \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0446\u0438\u044f \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u044f\u0437\u0430\u043d\u043d\u043e\u0441\u0442\u044c\u044e \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e runtime-level event loop.<\/p>\n<p><code>future&lt;T&gt;<\/code>\u00a0\u0438\u00a0<code>stream&lt;T&gt;<\/code>\u00a0\u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0432 \u043b\u044e\u0431\u043e\u043c \u043c\u0435\u0441\u0442\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0438\u043b\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u043d\u0430 \u043b\u044e\u0431\u043e\u0439\u00a0\u0433\u043b\u0443\u0431\u0438\u043d\u0435 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0441\u0442\u0438.\u00a0\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440,\u00a0\u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0439 \u0442\u0438\u043f:<\/p>\n<pre><code>async func(s1: stream&lt;future&lt;string&gt;&gt;, s2: list&lt;stream&lt;string&gt;&gt;) -&gt; result&lt;stream&lt;string&gt;, stream&lt;error&gt;&gt;<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><strong>\u041a\u043b\u044e\u0447\u0435\u0432\u0430\u044f \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f<\/strong>:\u00a0\u0438 \u0432 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u043c,\u00a0\u0438 \u0432 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u043c ABI \u043a\u0430\u0436\u0434\u044b\u0439\u00a0<code>future<\/code>\u00a0\u0438\u043b\u0438\u00a0<code>stream<\/code>\u00a0\u0432 WIT-\u0442\u0438\u043f\u0435 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u0440\u043e\u0432\u043d\u043e \u043e\u0434\u0438\u043d\u00a0<code>i32<\/code>.\u00a0\u042d\u0442\u043e\u0442\u00a0<code>i32<\/code>\u00a0&#8212;\u00a0\u044d\u0442\u043e \u0438\u043d\u0434\u0435\u043a\u0441 \u0432 handle-\u0442\u0430\u0431\u043b\u0438\u0446\u0435\u00a0\u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430.<\/p>\n<p>\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440,\u00a0\u0434\u043b\u044f:<\/p>\n<pre><code>async func(f: future&lt;string&gt;) -&gt; future&lt;u32&gt;<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u0430\u044f \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430: <\/p>\n<pre><code>(func (param $f i32) (result i32))<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u0430\u044f:<\/p>\n<pre><code>(func (param $f i32) (param $out-ptr i32) (result i32))<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><strong>\u0420\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435<\/strong>\u00a0<code>async func(f: future&lt;string&gt;) -&gt; future&lt;u32&gt;<\/code>.<\/p>\n<p>\u041f\u0443\u0441\u0442\u044c \u0433\u043e\u0441\u0442\u044c \u0445\u043e\u0447\u0435\u0442 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438\u0437\u00a0<code>f: future&lt;string&gt;<\/code>.\u00a0\u0423 \u043d\u0435\u0433\u043e \u043d\u0430 \u0440\u0443\u043a\u0430\u0445 handle\u00a0<code>$f<\/code>\u00a0(i32-\u0438\u043d\u0434\u0435\u043a\u0441\u00a0\u0432 handle-table).\u00a0\u041e\u043d \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u0442 \u0432 \u043b\u0438\u043d\u0435\u0439\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u043c\u0435\u0441\u0442\u043e \u043f\u043e\u0434 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u00a0<code>future.read($f, $buf-ptr).<\/code><\/p>\n<p>\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f\u00a0<code>i32<\/code>-\u0441\u0442\u0430\u0442\u0443\u0441.\u00a0\u042d\u0442\u043e \u0443\u043f\u0430\u043a\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e:\u00a0\u043d\u0438\u0437\u043a\u0438\u0435 \u0431\u0438\u0442\u044b\u00a0&#8212;\u00a0\u043a\u043e\u0434 \u0438\u0441\u0445\u043e\u0434\u0430,\u00a0\u0432\u044b\u0441\u043e\u043a\u0438\u0435\u00a0&#8212;\u00a0\u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u00a0\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432\u00a0(\u0434\u043b\u044f\u00a0<code>future<\/code>\u00a0&#8212;\u00a00 \u0438\u043b\u0438 1,\u00a0\u0434\u043b\u044f\u00a0<code>stream<\/code>\u00a0&#8212;\u00a0\u0434\u043e\u00a0<code>len<\/code>).<\/p>\n<p>\u0415\u0441\u043b\u0438 Writer \u0443\u0436\u0435 \u0443\u0441\u043f\u0435\u043b \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432\u00a0<code>future\u00a0<\/code>\u0434\u043e \u0442\u043e\u0433\u043e,\u00a0\u043a\u0430\u043a \u0433\u043e\u0441\u0442\u044c \u043f\u0440\u0438\u0448\u0435\u043b \u0447\u0438\u0442\u0430\u0442\u044c\u00a0(\u043d\u0435\u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u0439\u00a0\u0443\u0441\u043f\u0435\u0445\u00a0(<code>COMPLETED<\/code>)),\u00a0\u0440\u0430\u043d\u0442\u0430\u0439\u043c \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e,\u00a0\u043f\u0440\u044f\u043c\u043e \u0432 \u0442\u0435\u043b\u0435\u00a0<code>future.read<\/code>\u00a0\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0443 \u0432 \u043b\u0438\u043d\u0435\u0439\u043d\u0443\u044e\u00a0\u043f\u0430\u043c\u044f\u0442\u044c \u0433\u043e\u0441\u0442\u044f \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u0442\u0430\u0442\u0443\u0441 \u0441 \u043a\u043e\u0434\u043e\u043c\u00a0<code>COMPLETED\u00a0<\/code>\u0438 \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u043e\u043c 1.\u00a0\u0421\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430 \u0433\u043e\u0441\u0442\u044c \u043c\u043e\u0436\u0435\u0442\u00a0\u0447\u0438\u0442\u0430\u0442\u044c\u00a0<code>(ptr, len)<\/code>\u00a0\u043f\u043e\u00a0<code>$buf-ptr<\/code>\u00a0&#8212;\u00a0\u0434\u0430\u043d\u043d\u044b\u0435 \u0443\u0436\u0435 \u0442\u0430\u043c.<\/p>\n<p>\u0415\u0441\u043b\u0438 Writer \u0435\u0449\u0435 \u043d\u0435 \u043f\u043e\u043b\u043e\u0436\u0438\u043b \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u00a0(\u043f\u0440\u0438\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e\u00a0(<code>BLOCKED<\/code>)).\u00a0\u0420\u0430\u043d\u0442\u0430\u0439\u043c \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442\u00a0<code>$buf-ptr<\/code>\u00a0\u043a\u0430\u043a\u00a0\u043c\u0435\u0441\u0442\u043e \u0431\u0443\u0434\u0443\u0449\u0435\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u0438 \u043f\u043e\u043c\u0435\u0447\u0430\u0435\u0442\u00a0<code>future\u00a0<\/code>\u043a\u0430\u043a \u0438\u043c\u0435\u044e\u0449\u0438\u0439 \u043e\u0436\u0438\u0434\u0430\u044e\u0449\u0435\u0433\u043e \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044f \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u0442\u0430\u0442\u0443\u0441\u00a0<code>BLOCKED\u00a0<\/code>\u0441\u043e \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u043e\u043c 0.\u00a0<code>$buf-ptr<\/code>\u00a0\u0442\u0435\u043f\u0435\u0440\u044c \u043e\u0434\u043e\u043b\u0436\u0435\u043d \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0443.\u00a0\u0413\u043e\u0441\u0442\u044c \u043e\u0431\u044f\u0437\u0430\u043d:<\/p>\n<ul>\n<li>\n<p>\u043d\u0435 \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0430\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u044c \u043f\u043e\u00a0<code>$buf-ptr<\/code>;<\/p>\n<\/li>\n<li>\n<p>\u043d\u0435 \u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u043d\u0435\u0435;<\/p>\n<\/li>\n<li>\n<p>\u043d\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0442\u044c;<\/p>\n<\/li>\n<li>\n<p>\u043d\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u00a0<code>future.read<\/code>\u00a0\u043d\u0430 \u0442\u043e\u043c \u0436\u0435 handle.<\/p>\n<\/li>\n<\/ul>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435 \u0433\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0434\u0440\u0443\u0433\u0443\u044e \u0440\u0430\u0431\u043e\u0442\u0443:\u00a0\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0432\u0442\u043e\u0440\u043e\u0439\u00a0<code>future.read<\/code>\u00a0\u0434\u043b\u044f \u0434\u0440\u0443\u0433\u043e\u0433\u043e handle,\u00a0\u0434\u0435\u043b\u0430\u0435\u0442\u00a0<code>task.yield<\/code>,\u00a0\u0438\u043b\u0438\u00a0(\u0432 stackless-\u0440\u0435\u0436\u0438\u043c\u0435)\u00a0\u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 event loop \u0441 \u043a\u043e\u0434\u043e\u043c\u00a0&#171;\u0436\u0434\u0443 \u043d\u0430\u00a0waitable-set,\u00a0\u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0435\u043c\u00a0<code>$f\"<\/code>.<\/p>\n<p>\u041a\u043e\u0433\u0434\u0430 host \u043d\u0430\u043a\u043e\u043d\u0435\u0446 \u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435,\u00a0\u0440\u0430\u043d\u0442\u0430\u0439\u043c \u0441\u0430\u043c \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0443 \u043f\u043e \u0440\u0430\u043d\u0435\u0435 \u0437\u0430\u043f\u043e\u043c\u043d\u0435\u043d\u043d\u043e\u043c\u0443\u00a0<code>$buf-ptr<\/code>\u00a0\u0438 \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u0442 \u0432 waitable-set \u0433\u043e\u0441\u0442\u044f \u0441\u043e\u0431\u044b\u0442\u0438\u0435 completion \u0434\u043b\u044f\u00a0<code>$f<\/code>\u00a0\u0441\u043e \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u043e\u043c 1.\u00a0\u0413\u043e\u0441\u0442\u044c\u00a0\u043f\u0440\u043e\u0431\u0443\u0436\u0434\u0430\u0435\u0442\u0441\u044f\u00a0(stackful\u00a0&#8212;\u00a0\u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442 \u0441 \u0442\u043e\u0447\u043a\u0438\u00a0<code>future.read<\/code>\u00a0, stackless\u00a0&#8212;\u00a0\u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0432\u044b\u0437\u043e\u0432 callback\u00a0\u0441 \u044d\u0442\u0438\u043c \u0441\u043e\u0431\u044b\u0442\u0438\u0435\u043c),\u00a0\u0447\u0438\u0442\u0430\u0435\u0442\u00a0<code>(ptr, len)<\/code>\u00a0\u043f\u043e\u00a0<code>$buf-ptr<\/code>,\u00a0handle \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f.<\/p>\n<p>\u0414\u043b\u044f\u00a0<code>stream&lt;T&gt;<\/code>\u00a0\u0442\u043e\u0442 \u0436\u0435 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b,\u00a0\u043d\u043e\u00a0<code>stream.read(handle, ptr, len)<\/code>\u00a0\u043e\u043f\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0431\u0443\u0444\u0435\u0440\u043e\u043c \u043d\u0430\u00a0<code>len<\/code>\u00a0\u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0438\u043d\u0441\u0442\u0430\u043d\u0441 \u0434\u0435\u0440\u0436\u0438\u0442 \u0447\u0438\u0442\u0430\u044e\u0449\u0438\u0439 \u0438\u043b\u0438 \u043f\u0438\u0448\u0443\u0449\u0438\u0439 \u043a\u043e\u043d\u0435\u0446 \u043f\u043e\u0442\u043e\u043a\u0430\u00a0(<code>stream<\/code>)\u00a0\u0438\u043b\u0438\u00a0<code>future<\/code>,\u00a0\u043f\u0440\u043e\u0442\u0438\u0432\u043e\u043f\u043e\u043b\u043e\u0436\u043d\u044b\u0439 \u043a\u043e\u043d\u0435\u0446\u00a0\u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0434\u0435\u0440\u0436\u0438\u0442 \u0445\u043e\u0441\u0442,\u00a0\u0442\u043e \u043e\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044f,\u00a0\u0447\u0442\u043e \u0445\u043e\u0441\u0442 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u0438\u043d\u0441\u0442\u0430\u043d\u0441 \u0436\u0438\u0432\u044b\u043c \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440,\u00a0\u043f\u043e\u043a\u0430 \u0432\u0441\u0435\u00a0<code>futures\u00a0<\/code>\u0438\u00a0<code>streams\u00a0<\/code>\u043d\u0435 \u043f\u0435\u0440\u0435\u0439\u0434\u0443\u0442 \u0432 \u0437\u0430\u043a\u0440\u044b\u0442\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435.<\/p>\n<p><code>future&lt;T&gt;<\/code>\u00a0\u0438\u00a0<code>stream&lt;T&gt;<\/code>\u00a0\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f ABI-\u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438 Component Model,\u00a0\u0430 \u043d\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e\u00a0\u044f\u0437\u044b\u043a\u0430.\u00a0Runtime \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0443 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0438 \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 readable end \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442\u00a0\u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043d\u044b\u0445 \u0433\u0440\u0430\u043d\u0438\u0446.\u00a0\u0418\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0439 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044e async-\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u0431\u0435\u0437\u00a0\u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438\u00a0<code>pollable<\/code>-\u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u043c\u0435\u0436\u0434\u0443 \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u0430\u043c\u0438.<\/p>\n<h4>\u041c\u043e\u0434\u0435\u043b\u044c \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0438 \u0441\u0432\u044f\u0437\u044c \u0441\u043e Stack Switching Proposal<\/h4>\n<p>Component Model \u0443\u043c\u0435\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0438\u0434\u0443\u0449\u0438\u043c\u0438 \u0432\u044b\u0437\u043e\u0432\u0430\u043c\u0438.\u00a0\u0432 Canonical ABI \u044d\u0442\u043e \u0432\u0441\u0435\u00a0\u0444\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u0442\u0440\u0438 \u0441\u043b\u043e\u044f,\u00a0\u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0441\u0442\u0440\u043e\u0438\u0442\u0441\u044f \u043f\u043e\u0432\u0435\u0440\u0445 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e:<\/p>\n<ol>\n<li>\n<p>Stack switching: \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u044b\u00a0<code>cont.new<\/code>,\u00a0<code>suspend<\/code>,\u00a0<code>resume<\/code>\u00a0\u0438\u0437\u00a0<a href=\"https:\/\/github.com\/WebAssembly\/stack-switching\/tree\/main\/proposals\/stack-switching\" rel=\"noopener noreferrer nofollow\">proposal stack-switching<\/a>\u00a0\u044f\u0434\u0440\u0430 WebAssembly.<\/p>\n<\/li>\n<li>\n<p><code>Thread<\/code>: \u043e\u0431\u044a\u0435\u043a\u0442, \u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0432\u043d\u0443\u0442\u0440\u0438 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f\u00a0<code>continuation<\/code>\u00a0(\u0441\u043d\u0438\u043c\u043e\u043a \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f). \u041a\u043e\u0433\u0434\u0430 \u043f\u043e\u0442\u043e\u043a \u043f\u0440\u0438\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d, \u0432 \u043d\u0435\u043c \u043b\u0435\u0436\u0438\u0442\u00a0<code>continuation<\/code>, \u043a\u043e\u0433\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f &#8212;\u00a0<code>continuation<\/code>\u00a0\u043f\u0443\u0441\u0442\u043e\u0439.<\/p>\n<\/li>\n<li>\n<p><code>Task<\/code>: \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043e\u0434\u043d\u043e\u043c\u0443 \u0432\u044b\u0437\u043e\u0432\u0443 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043d\u043e\u0433\u043e \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 \u0447\u0435\u0440\u0435\u0437 \u0433\u0440\u0430\u043d\u0438\u0446\u0443 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430. \u0421\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043e\u0442 1 \u0434\u043e N\u00a0<code>Thread<\/code>.<\/p>\n<\/li>\n<\/ol>\n<h4>Stack Switching<\/h4>\n<p>\u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u044f\u0437\u044b\u043a\u043e\u0432\u0430\u044f \u0444\u0438\u0447\u0430 \u0441\u0430\u043c\u043e\u0433\u043e\u00a0WebAssembly\u00a0&#8212;\u00a0<a href=\"https:\/\/github.com\/WebAssembly\/stack-switching\/tree\/main\/proposals\/stack-switching\" rel=\"noopener noreferrer nofollow\">proposal stack-switching<\/a>.\u00a0\u041e\u043d \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0432 wasm \u043d\u043e\u0432\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438\u00a0(<code>cont.new<\/code>,\u00a0<code>resume<\/code>,\u00a0<code>suspend<\/code>,\u00a0<code>switch<\/code>)\u00a0\u0438 \u0442\u0438\u043f\u00a0<code>continuation<\/code>,\u00a0\u0447\u0442\u043e\u0431\u044b wasm-\u0433\u043e\u0441\u0442\u044c \u0441\u0430\u043c \u043c\u043e\u0433 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u0442\u0435\u043a\u0438 \u0438 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u044c\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438\u00a0\u0431\u0435\u0437 \u0443\u0447\u0430\u0441\u0442\u0438\u044f \u0445\u043e\u0441\u0442\u0430.\u00a0\u042d\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u043e\u0440\u0443\u0442\u0438\u043d,\u00a0\u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432,\u00a0\u0433\u043e\u0440\u0443\u0442\u0438\u043d Go \u0438 \u0442.\u043f.\u00a0\u0432\u043d\u0443\u0442\u0440\u0438 \u043e\u0434\u043d\u043e\u0433\u043e wasm-\u0438\u043d\u0441\u0442\u0430\u043d\u0441\u0430.<\/p>\n<p>Component Model \u0441\u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d \u0442\u0430\u043a,\u00a0\u0447\u0442\u043e\u0431\u044b \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u043a\u0440\u0430\u0441\u0438\u0432\u043e \u0441\u043e\u0447\u0435\u0442\u0430\u0442\u044c\u0441\u044f \u0441 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u043c stack-switching \u0438\u0437\u00a0\u044f\u0434\u0440\u0430 WebAssembly\u00a0(\u043a\u043e\u0433\u0434\u0430 \u0442\u043e\u0442 \u0431\u0443\u0434\u0435\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0438\u0437\u043e\u0432\u0430\u043d).\u00a0\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0441\u0435 \u0444\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e \u0447\u0435\u0440\u0435\u0437 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438\u00a0<code>cont.new<\/code>\u00a0\/\u00a0<code>suspend<\/code>\u00a0\/\u00a0<code>resume<\/code>.<\/p>\n<p>\u0425\u043e\u0442\u044c Async ABI Component Model \u043a\u043e\u043d\u0446\u0435\u043f\u0442\u0443\u0430\u043b\u044c\u043d\u043e \u0438 \u0444\u043e\u0440\u043c\u0443\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437\u00a0<code>continuation<\/code>\u00a0\u0438 stack-switching\u00a0\u043c\u043e\u0434\u0435\u043b\u044c,\u00a0\u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f async ABI\u00a0<strong>\u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 stack-switching proposal<\/strong>\u00a0\u0432 \u044f\u0434\u0440\u0435 WebAssembly.\u00a0Runtime \u0432\u043f\u0440\u0430\u0432\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0438 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043b\u044e\u0431\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c.\u00a0\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440,\u00a0Wasmtime\u00a0\u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 async Component Model \u0431\u0435\u0437 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e stack-switching proposal (\u043e\u0431 \u044d\u0442\u043e\u043c \u043d\u0438\u0436\u0435 \u0432 \u043f\u0443\u043d\u043a\u0442\u0435 \u043f\u0440\u043e \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0441\u0442\u044c \u0432 Wasmtime).<\/p>\n<h4>Threads<\/h4>\n<p>\u0427\u0442\u043e\u00a0<code>Thread<\/code>\u00a0\u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u043e\u0432\u0435\u0440\u0445 stack-switching:<\/p>\n<ul>\n<li>\n<p>\u041e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e I\/O.<\/p>\n<\/li>\n<li>\n<p>Async call stack:\u00a0<code>Thread<\/code>\u00a0\u0437\u043d\u0430\u0435\u0442, \u043a \u043a\u0430\u043a\u043e\u043c\u0443\u00a0<code>Task<\/code>\u00a0\u043e\u043d \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442.<\/p>\n<\/li>\n<li>\n<p>Cancellation: \u0444\u043b\u0430\u0433\u00a0<code>cancellable<\/code><\/p>\n<\/li>\n<li>\n<p>Thread index: \u0438\u043d\u0434\u0435\u043a\u0441 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435\u00a0<code>ComponentInstance.threads<\/code>.<\/p>\n<\/li>\n<li>\n<p>Thread-local storage: \u043f\u0430\u0440\u0430\u00a0<code>(int, int)<\/code>, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430\u044f \u043a\u043e\u0434\u0443 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430.<\/p>\n<\/li>\n<\/ul>\n<h4>Tasks<\/h4>\n<p><code>Task<\/code>\u00a0\u044d\u0442\u043e \u043e\u0431\u0435\u0440\u0442\u043a\u0430 \u0432\u043e\u043a\u0440\u0443\u0433 \u043e\u0434\u043d\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430:<\/p>\n<ul>\n<li>\n<p>\u0437\u043d\u0430\u0435\u0442, \u043a\u0442\u043e caller \u0438 \u043a\u0442\u043e callee<\/p>\n<\/li>\n<li>\n<p>\u0445\u0440\u0430\u043d\u0438\u0442 \u043a\u043e\u043b\u043b\u0431\u044d\u043a\u0438<\/p>\n<\/li>\n<li>\n<p>\u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0435\u0442 \u0432\u0441\u0435\u00a0<code>Thread<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043d\u0430 \u043d\u0435\u0433\u043e<\/p>\n<\/li>\n<li>\n<p>\u0445\u0440\u0430\u043d\u0438\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043e\u0442\u043c\u0435\u043d\u044b<\/p>\n<\/li>\n<li>\n<p>\u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 backpressure<\/p>\n<\/li>\n<\/ul>\n<p>\u0412\u0441\u0435 \u043c\u0435\u0436\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043d\u044b\u0435 \u0432\u044b\u0437\u043e\u0432\u044b\u00a0(\u0445\u043e\u0441\u0442-\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442,\u00a0\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442-\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442-\u0445\u043e\u0441\u0442)\u00a0\u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0442\u00a0\u0447\u0435\u0440\u0435\u0437 \u043e\u0434\u043d\u0443 \u0438 \u0442\u0443 \u0436\u0435 \u0441\u043f\u0435\u043a-\u0444\u0443\u043d\u043a\u0446\u0438\u044e\u00a0<code>FuncInst<\/code>.\u00a0\u0415\u0441\u043b\u0438 callee \u043f\u0440\u0438\u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 wasm,\u00a0<code>FuncInst<\/code>\u00a0\u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f caller&#8217;\u0443 \u043d\u0435\u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e,\u00a0\u0430 callee \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c\u00a0<code>Thread<\/code>.\u00a0\u042d\u0442\u043e \u0438 \u0435\u0441\u0442\u044c\u00a0\u0444\u0443\u043d\u0434\u0430\u043c\u0435\u043d\u0442\u00a0<code>async<\/code>\u00a0\u043c\u0435\u0436\u0434\u0443 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c\u0438.<\/p>\n<p><code>Task<\/code>\u00a0&#8212;\u00a0\u044d\u0442\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u0432\u044b\u0437\u043e\u0432 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430.\u00a0\u0412 WASI 0.3 Canonical ABI \u0445\u043e\u0441\u0442 \u043c\u043e\u0436\u0435\u0442\u00a0\u0441\u043e\u0437\u0434\u0430\u0442\u044c N\u00a0<code>Task<\/code>\u00a0\u0432\u043d\u0443\u0442\u0440\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u0430 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e.<\/p>\n<p><code>Subtask<\/code>\u00a0&#8212;\u00a0\u044d\u0442\u043e \u0432\u0442\u043e\u0440\u0430\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u0430 \u0442\u043e\u0433\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430,\u00a0\u0447\u0442\u043e \u0438\u00a0<code>Task<\/code>.\u00a0\u041a\u043e\u0433\u0434\u0430 component A \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u00a0\u0438\u043c\u043f\u043e\u0440\u0442,\u00a0\u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u043c B,\u00a0Canonical ABI \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043f\u0430\u0440\u0443 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432:\u00a0<code>Task<\/code>\u00a0\u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 callee\u00a0(B)\u00a0\u0438\u00a0<code>Subtask<\/code>\u00a0\u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 caller\u00a0(A).\u00a0\u041e\u043d\u0438 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442 \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u0432\u044b\u0437\u043e\u0432 \u0441 \u0440\u0430\u0437\u043d\u044b\u0445 \u043a\u043e\u043d\u0446\u043e\u0432 \u0433\u0440\u0430\u043d\u0438\u0446\u044b:\u00a0<code>Task<\/code>\u00a0\u0441\u043b\u0435\u0434\u0438\u0442 \u0437\u0430 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435\u043c callee,\u00a0<code>Subtask<\/code>\u00a0&#8212;\u00a0\u0437\u0430 \u0442\u0435\u043c,\u00a0\u043a\u0430\u043a caller \u0436\u0434\u0451\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u0438 \u0443\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u00a0\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u043d\u044b\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b.<\/p>\n<p>\u041a\u0442\u043e \u0447\u0435\u043c \u0432\u043b\u0430\u0434\u0435\u0435\u0442:<\/p>\n<ul>\n<li>\n<p><code>Subtask<\/code>\u00a0\u0436\u0438\u0432\u0435\u0442 \u0432 \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u0435 caller&#8217;\u0430, \u0438\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 \u0435\u0433\u043e waitable-\u0442\u0430\u0431\u043b\u0438\u0446\u0435, \u043a\u0430\u043a \u0438\u00a0<code>future<\/code>\/\u00a0<code>stream<\/code>.<\/p>\n<\/li>\n<li>\n<p><code>Task<\/code>\u00a0\u0436\u0438\u0432\u0435\u0442 \u0432 \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u0435 callee.<\/p>\n<\/li>\n<\/ul>\n<p>\u0413\u0440\u0430\u043d\u0438\u0447\u043d\u044b\u0435 \u0441\u043b\u0443\u0447\u0430\u0438:<\/p>\n<ul>\n<li>\n<p>Host \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u044d\u043a\u0441\u043f\u043e\u0440\u0442 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430: \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e\u00a0<code>Task<\/code>\u00a0(\u0443 callee).\u00a0<code>Subtask<\/code>\u00a0\u043d\u0435\u0442, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0443 host \u043d\u0435\u0442 Canonical-ABI-\u043e\u0431\u044a\u0435\u043a\u0442\u0430.<\/p>\n<\/li>\n<li>\n<p>\u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0438\u043c\u043f\u043e\u0440\u0442, \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 host: \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e\u00a0<code>Subtask<\/code>\u00a0(\u0443 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430).\u00a0<code>Task<\/code>\u00a0\u043d\u0435\u0442, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e callee &#8212; \u044d\u0442\u043e host.<\/p>\n<\/li>\n<li>\n<p>\u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0438\u043c\u043f\u043e\u0440\u0442, \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0434\u0440\u0443\u0433\u0438\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u043c: \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u043f\u0430\u0440\u0430\u00a0<code>Subtask<\/code>\u00a0+\u00a0<code>Task<\/code>.<\/p>\n<\/li>\n<\/ul>\n<p>\u041a\u0430\u0436\u0434\u044b\u0439\u00a0<code>async<\/code>-\u0438\u043c\u043f\u043e\u0440\u0442\u00a0&#8212;\u00a0\u044d\u0442\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439\u00a0<code>subtask<\/code>\u00a0\u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u00a0<code>Task<\/code>\u00a0\u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430.\u00a0\u0421\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f\u00a0\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u044d\u0442\u043e \u0442\u0430\u043a:\u00a0<code>subtask<\/code>\u00a0\u0438 readable\/writable \u043a\u043e\u043d\u0446\u044b\u00a0<code>streams<\/code>\/<code>futures<\/code>\u00a0\u0441\u043e\u0431\u0438\u0440\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f\u00a0<code>waitables<\/code>\u00a0\u0438 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u043c\u0435\u0449\u0435\u043d\u044b \u0432\u00a0<code>waitable sets<\/code>,\u00a0\u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u0440\u0435\u0434 \u043e\u0436\u0438\u0434\u0430\u0435\u0442 \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441\u0430.\u00a0<strong>\u041d\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442<\/strong>\u00a0\u0441\u00a0<code>waitable set<\/code>\u00a0\u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u044b \u0431\u0438\u043d\u0434\u0438\u043d\u0433\u043e\u0432 \u043f\u0440\u044f\u0447\u0443\u0442 \u044d\u0442\u043e \u0437\u0430 \u043e\u0431\u044b\u0447\u043d\u044b\u043c\u00a0<code>Future<\/code>\u00a0\u0438 \u0435\u0433\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0430\u043c\u0438.<\/p>\n<h4>Backpressure<\/h4>\n<p>Backpressure \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0444\u0443\u043d\u0434\u0430\u043c\u0435\u043d\u0442\u043e\u043c \u0434\u043b\u044f inter-ABI \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f:<\/p>\n<ol>\n<li>\n<p>Async caller -&gt; sync callee: callee \u043f\u0435\u0440\u0432\u044b\u043c \u0434\u0435\u043b\u043e\u043c \u0437\u0430\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u00a0<code>exclusive lock<\/code>\u00a0\u043d\u0430 \u0441\u0432\u043e\u0439 component instance. \u0415\u0441\u043b\u0438 \u043f\u043e\u0442\u043e\u043c callee \u043f\u0440\u0438\u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 suspend point, \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0440\u0430\u0437\u0443 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f caller.\u00a0<code>Lock<\/code>\u00a0\u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0437\u0430\u0445\u0432\u0430\u0447\u0435\u043d\u043d\u044b\u043c.<\/p>\n<\/li>\n<li>\n<p>\u0412\u0442\u043e\u0440\u043e\u0439 async \u0432\u044b\u0437\u043e\u0432 \u0432 \u0442\u043e\u0442 \u0436\u0435 instance: \u043f\u0440\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u0432\u043e\u0439\u0442\u0438 \u0432 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439 \u044d\u043a\u0441\u043f\u043e\u0440\u0442 \u043e\u043d \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430 \u0437\u0430\u0445\u0432\u0430\u0442\u0435\u00a0<code>exclusive lock<\/code>\u00a0\u0438 \u0436\u0434\u0435\u0442, \u043f\u043e\u043a\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 sync-\u0432\u044b\u0437\u043e\u0432 \u043e\u0442\u043f\u0443\u0441\u0442\u0438\u0442.<\/p>\n<\/li>\n<\/ol>\n<p>\u042d\u0442\u043e \u0434\u0430\u0435\u0442 sync-\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u044e:\u00a0\u0432 \u043e\u0434\u0438\u043d \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432\u043d\u0443\u0442\u0440\u0438 \u043d\u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0440\u043e\u0432\u043d\u043e \u043e\u0434\u0438\u043d\u00a0sync-\u0432\u044b\u0437\u043e\u0432,\u00a0\u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0441\u043d\u0430\u0440\u0443\u0436\u0438 \u0431\u043e\u043c\u0431\u0430\u0440\u0434\u0438\u0440\u0443\u044e\u0442 async-\u0432\u044b\u0437\u043e\u0432\u0430\u043c\u0438.<\/p>\n<p>\u0427\u0442\u043e \u0431\u0443\u0434\u0435\u0442,\u00a0\u0435\u0441\u043b\u0438 callee \u0442\u043e\u0436\u0435\u00a0<code>async<\/code><\/p>\n<ol>\n<li>\n<p>\u041f\u0440\u0438 \u0432\u0445\u043e\u0434\u0435 \u0432 async callee \u043d\u0435 \u0437\u0430\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f\u00a0<code>exclusive lock<\/code>\u00a0\u043d\u0430 \u0438\u043d\u0441\u0442\u0430\u043d\u0441. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0442\u043e\u0440\u043e\u0439 (\u0438 \u0442\u0440\u0435\u0442\u0438\u0439, \u0438 N-\u0439) async-\u0432\u044b\u0437\u043e\u0432 \u0442\u043e\u0433\u043e \u0436\u0435 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 \u0432 \u0442\u043e\u0442 \u0436\u0435 \u0438\u043d\u0441\u0442\u0430\u043d\u0441 \u043c\u043e\u0436\u0435\u0442 \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e.<\/p>\n<\/li>\n<li>\n<p>\u041a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u044d\u0442\u0438\u0445\u00a0<code>Task<\/code>\u00a0\u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e: \u043f\u043e\u043a\u0430 \u043e\u0434\u0438\u043d \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043b\u0441\u044f, \u0434\u0440\u0443\u0433\u043e\u0439 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u043e\u0434\u0432\u0438\u0433\u0430\u0442\u044c\u0441\u044f.<\/p>\n<\/li>\n<li>\n<p>Backpressure \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 callee \u044f\u0432\u043d\u043e \u0435\u0433\u043e \u0432\u043a\u043b\u044e\u0447\u0438\u043b \u0447\u0435\u0440\u0435\u0437\u00a0<code>backpressure.set<\/code><\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e\u00a0<code>Task<\/code>\u00a0\u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f (\u0438\u043b\u0438 \u043e\u0442\u043c\u0435\u043d\u044b) \u0432\u0441\u0435\u0445 \u0435\u0433\u043e\u00a0<code>Subtask<\/code><\/p>\n<\/li>\n<\/ol>\n<h4>Reentrancy<\/h4>\n<p>Reentrancy \u044d\u0442\u043e \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f,\u00a0\u043a\u043e\u0433\u0434\u0430 \u0432 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u043f\u044b\u0442\u0430\u044e\u0442\u0441\u044f \u0432\u043e\u0439\u0442\u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e \u0434\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e\u00a0\u0432\u044b\u0437\u043e\u0432\u0430.\u00a0\u0414\u043b\u044f \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0442\u0430\u043a\u043e\u0439 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u0435\u043d.\u00a0\u041f\u0440\u0438 \u0432\u0445\u043e\u0434\u0435 \u0432 sync-export\u00a0\u0438\u043d\u0441\u0442\u0430\u043d\u0441 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u00a0<code>exclusive lock<\/code>.\u00a0\u041f\u043e\u043a\u0430 \u0432\u044b\u0437\u043e\u0432 \u043d\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u0441\u044f,\u00a0\u043b\u044e\u0431\u043e\u0439 \u0432\u0442\u043e\u0440\u043e\u0439 \u0432\u0445\u043e\u0434 \u0432 \u0442\u043e\u0442 \u0436\u0435 \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u00a0\u0431\u0443\u0434\u0435\u0442 \u0436\u0434\u0430\u0442\u044c \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0435\u043d\u0438\u044f\u00a0<code>lock<\/code>.\u00a0\u0418\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 WASI 0.2 \u0432\u043d\u0443\u0442\u0440\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u0430 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u00a0\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043b\u00a0<strong>\u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0432\u044b\u0437\u043e\u0432<\/strong>.<\/p>\n<p>\u0421 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u0435\u043c native\u00a0<code>async<\/code>\u00a0\u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f.\u00a0\u0415\u0441\u043b\u0438 \u044d\u043a\u0441\u043f\u043e\u0440\u0442 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d \u043a\u0430\u043a\u00a0<code>async<\/code>,\u00a0\u0432\u044b\u0437\u043e\u0432 \u043c\u043e\u0436\u0435\u0442\u00a0\u0434\u043e\u0441\u0442\u0438\u0447\u044c\u00a0suspend-point \u0438 \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 runtime \u0434\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u044b.\u00a0\u0412 \u044d\u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u0438\u043d\u0441\u0442\u0430\u043d\u0441 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435\u00a0\u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0437\u0430\u043d\u044f\u0442\u044b\u043c \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u043c \u0432\u044b\u0437\u043e\u0432\u043e\u043c,\u00a0\u0438 runtime \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 \u0432\u043d\u0443\u0442\u0440\u0438\u00a0\u0442\u043e\u0433\u043e \u0436\u0435 \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u0430.<\/p>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c,\u00a0\u0434\u043b\u044f async-\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u0441\u0445\u043e\u0434\u0438\u0442\u044c \u0438\u0437 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f,\u00a0\u0447\u0442\u043e \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043c\u043e\u0433\u0443\u0442\u00a0\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445\u00a0<code>Task<\/code>\u00a0\u0432\u043d\u0443\u0442\u0440\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u0430.\u00a0\u041a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u044c \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u043c\u00a0\u0440\u0435\u0436\u0438\u043c\u043e\u043c \u0440\u0430\u0431\u043e\u0442\u044b,\u00a0\u0430 \u043d\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c.<\/p>\n<h4>Completion-based \u043c\u043e\u0434\u0435\u043b\u044c<\/h4>\n<p>\u0412 WASI 0.2 \u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u043b\u0430 readiness-\u043c\u043e\u0434\u0435\u043b\u044c:\u00a0<code>pollable<\/code>\u00a0\u0441\u0438\u0433\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043b\u00a0&#171;\u043c\u043e\u0436\u043d\u043e \u0447\u0438\u0442\u0430\u0442\u044c&#187;,\u00a0\u0430 \u0441\u0430\u043c \u0444\u0430\u043a\u0442\u00a0\u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u043e\u0448\u0438\u0431\u043a\u0438 caller \u0443\u0437\u043d\u0430\u0432\u0430\u043b \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u00a0<code>read<\/code>.\u00a0\u0415\u0441\u043b\u0438 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044c \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u043b\u0441\u044f\u00a0\u0440\u0430\u043d\u044c\u0448\u0435,\u00a0\u043e\u0442\u043b\u0438\u0447\u0438\u0442\u044c \u0448\u0442\u0430\u0442\u043d\u043e\u0435 \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u0435\u00a0<code>stream<\/code>\u00a0\u043e\u0442 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u043e\u0448\u0438\u0431\u043a\u0438 \u0431\u044b\u043b\u043e \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e.<\/p>\n<p>\u0412 WASI 0.3 \u043c\u043e\u0434\u0435\u043b\u044c \u0441\u043c\u0435\u043d\u0438\u043b\u0430\u0441\u044c \u043d\u0430 completion-based:\u00a0runtime \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442 \u043d\u0435\u00a0&#171;\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0433\u043e\u0442\u043e\u0432&#187;,\u00a0\u0430\u00a0&#171;\u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f\u00a0\u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043b\u0430\u0441\u044c,\u00a0\u0432\u043e\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442&#187;.\u00a0\u041d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 ABI \u044d\u0442\u043e \u0432\u044b\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u0442\u0430\u043a:<\/p>\n<ul>\n<li>\n<p><code>future&lt;T&gt;<\/code>\u00a0\u0440\u0435\u0437\u043e\u043b\u0432\u0438\u0442\u0441\u044f \u0440\u043e\u0432\u043d\u043e \u043e\u0434\u043d\u0438\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c &#8212; \u0443\u0441\u043f\u0435\u0445\u043e\u043c \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0438\u043b\u0438 \u043e\u0448\u0438\u0431\u043a\u043e\u0439. \u041f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u043e\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f &#171;\u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0441\u043d\u043e\u0432\u0430&#187; \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442.<\/p>\n<\/li>\n<li>\n<p><code>stream&lt;T&gt;<\/code>\u00a0\u0432 WIT 0.3 \u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u043e\u043f\u0440\u043e\u0432\u043e\u0436\u0434\u0430\u0435\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c\u00a0<code>future&lt;result&lt;_, error-code&gt;&gt;<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0435\u0437\u043e\u043b\u0432\u0438\u0442\u0441\u044f \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u0438 \u0444\u0438\u043a\u0441\u0438\u0440\u0443\u0435\u0442 \u0438\u0442\u043e\u0433 \u0441\u0442\u0440\u0438\u043c\u0430 (\u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0435 \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u0435 \u0438\u043b\u0438 \u043e\u0448\u0438\u0431\u043a\u0430) \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u043e\u0442 \u0442\u043e\u0433\u043e, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u044b\u043b\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u043e:<\/p>\n<\/li>\n<\/ul>\n<pre><code>\/\/ WASI 0.2read-via-stream: func() -&gt; result&lt;input-stream, error-code&gt;; \/\/ WASI 0.3read-via-stream: func() -&gt; tuple&lt;stream&lt;u8&gt;, future&lt;result&lt;_, error-code&gt;&gt;&gt;;<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<h4>Structured Concurrency<\/h4>\n<p>Component Model \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u00a0structured concurrency:\u00a0\u043a\u0430\u0436\u0434\u0430\u044f \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u0430\u044f\u00a0\u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u043c\u0443\u00a0<code>Task<\/code>,\u00a0\u043e\u0431\u0440\u0430\u0437\u0443\u044f \u0434\u0435\u0440\u0435\u0432\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f.\u00a0\u0413\u043b\u0430\u0432\u043d\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e:\u00a0\u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439\u00a0<code>Task<\/code>\u00a0\u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c\u0441\u044f,\u00a0\u043f\u043e\u043a\u0430 \u043d\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043b\u0438\u0441\u044c \u0432\u0441\u0435 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0449\u0438\u0435 \u0435\u043c\u0443\u00a0<code>Subtask<\/code>.<\/p>\n<p>\u042d\u0442\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u0434\u0430\u0435\u0442 \u0442\u0440\u0438 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0438:<\/p>\n<ul>\n<li>\n<p>\u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 &#171;\u043f\u043e\u0442\u0435\u0440\u044f\u043d\u043d\u044b\u0435&#187; \u0444\u043e\u043d\u043e\u0432\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u0438;<\/p>\n<\/li>\n<li>\n<p>\u043e\u0442\u043c\u0435\u043d\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0432\u043d\u0438\u0437 \u043f\u043e \u0434\u0435\u0440\u0435\u0432\u0443 \u0432\u044b\u0437\u043e\u0432\u043e\u0432;<\/p>\n<\/li>\n<li>\n<p>\u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0435\u043d\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e.<\/p>\n<\/li>\n<\/ul>\n<p>\u0415\u0441\u043b\u0438 caller \u043e\u0442\u043c\u0435\u043d\u044f\u0435\u0442\u00a0<code>handle(request)<\/code>,\u00a0runtime \u043e\u0431\u044f\u0437\u0430\u043d \u043e\u0442\u043c\u0435\u043d\u0438\u0442\u044c \u0432\u0441\u0435 \u043d\u0435\u0437\u0430\u0432\u0435\u0440\u0448\u0451\u043d\u043d\u044b\u0435 \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0435\u00a0<code>Subtask<\/code>\u00a0\u043f\u0435\u0440\u0435\u0434 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043e\u043c \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e\u00a0<code>Task<\/code>\u00a0\u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435.\u00a0\u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e,\u00a0\u0435\u0441\u043b\u0438 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043b\u0441\u044f\u00a0\u043e\u0448\u0438\u0431\u043a\u043e\u0439,\u00a0\u0432\u0441\u0435 \u0435\u0449\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0435 \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u044b \u0438\u043b\u0438 \u043e\u0442\u043c\u0435\u043d\u0435\u043d\u044b.<\/p>\n<h4>Cancellation<\/h4>\n<p><code>Cancellation<\/code>\u00a0\u0432 Component Model \u043a\u043e\u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u0430\u044f \u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u0430\u044f.\u00a0\u041f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u0435\u0440\u0432\u0430\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435\u00a0wasm-\u043a\u043e\u0434\u0430 \u043d\u0435\u043b\u044c\u0437\u044f:\u00a0runtime \u043b\u0438\u0448\u044c \u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0437\u0430\u0434\u0430\u0447\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u00a0&#171;\u043e\u0442\u043c\u0435\u043d\u0435\u043d\u043e&#187;,\u00a0\u0430 callee \u043e\u0431\u044f\u0437\u0430\u043d \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0435\u0433\u043e\u00a0\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c.<\/p>\n<p>\u041a\u0442\u043e \u043a\u043e\u0433\u043e \u043e\u0442\u043c\u0435\u043d\u044f\u0435\u0442:<\/p>\n<ul>\n<li>\n<p><code>subtask.cancel<\/code>\u00a0&#8212; caller \u043e\u0442\u043c\u0435\u043d\u044f\u0435\u0442 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 async-import, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u043d \u0440\u0430\u043d\u0435\u0435 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b. \u042d\u0442\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0443\u0442\u044c: caller \u0432\u043b\u0430\u0434\u0435\u0435\u0442\u00a0<code>Subtask<\/code>\u00a0\u0432 \u0441\u0432\u043e\u0435\u0439 waitable-\u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0438 \u0440\u0435\u0448\u0430\u0435\u0442, \u0447\u0442\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043d\u0443\u0436\u0435\u043d.<\/p>\n<\/li>\n<li>\n<p><code>task.cancel<\/code>\u00a0&#8212; callee \u0434\u043e\u0431\u0440\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442 \u0441\u0432\u043e\u0439 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439\u00a0<code>Task<\/code>\u00a0\u043e\u0442\u043c\u0435\u043d\u043e\u0439 \u0432\u043c\u0435\u0441\u0442\u043e\u00a0<code>task.return<\/code>. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 callee \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u0441\u0438\u0433\u043d\u0430\u043b \u043e\u0442\u043c\u0435\u043d\u044b \u0441\u0432\u0435\u0440\u0445\u0443 \u0438 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 (\u0438\u043b\u0438 \u043d\u0435 \u0445\u043e\u0447\u0435\u0442) \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c \u0448\u0442\u0430\u0442\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442.<\/p>\n<\/li>\n<\/ul>\n<p><code>Cancellation<\/code>\u00a0\u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0432\u043d\u0438\u0437 \u043f\u043e async call stack:\u00a0\u043e\u0442\u043c\u0435\u043d\u0430 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e\u00a0<code>Task<\/code>\u00a0\u043e\u0431\u044f\u0437\u044b\u0432\u0430\u0435\u0442\u00a0\u043e\u0442\u043c\u0435\u043d\u0438\u0442\u044c \u0432\u0441\u0435 \u0435\u0433\u043e \u043d\u0435\u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u044b\u0435\u00a0<code>Subtask<\/code>.\u00a0\u0417\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044f \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e,\u00a0\u043f\u043e\u043a\u0430 \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0435 \u043d\u0435 \u043f\u0435\u0440\u0435\u0448\u043b\u0438\u00a0\u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u00a0(resolved\/cancelled).\u00a0<code>Cancellation<\/code>\u00a0\u043d\u0435 \u043f\u0440\u043e\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u0432\u0435\u0440\u0445 \u043a\u0430\u043a \u043e\u0448\u0438\u0431\u043a\u0430.\u00a0\u0414\u043b\u044f\u00a0caller \u043e\u0442\u043c\u0435\u043d\u0435\u043d\u043d\u044b\u0439\u00a0<code>subtask<\/code>\u00a0\u044d\u0442\u043e \u043b\u0435\u0433\u0438\u0442\u0438\u043c\u043d\u044b\u0439 \u0438\u0441\u0445\u043e\u0434,\u00a0\u0430 \u043d\u0435\u00a0<code>trap<\/code>.<\/p>\n<h4>\u0413\u0434\u0435 WASM \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f<\/h4>\n<p>\u041e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0437 \u0432\u044b\u0448\u0435 \u043c\u044b \u043e\u043f\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0442\u0435\u0440\u043c\u0438\u043d\u043e\u043c &#171;\u043f\u0440\u0438\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438&#187; (suspend). \u0427\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442\u00a0&#171;\u043f\u0440\u0438\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f&#187;?\u00a0\u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442 \u0434\u043e\u0441\u0442\u0438\u0447\u044c suspend-point \u0432 \u0433\u043e\u0441\u0442\u0435\u0432\u043e\u043c \u043a\u043e\u0434\u0435 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 Canonical\u00a0ABI:<\/p>\n<ul>\n<li>\n<p>\u042f\u0432\u043d\u044b\u0435 built-ins (<code>Task<\/code>\u00a0\u0441\u0430\u043c \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u0443\u0435\u0442 suspend):<\/p>\n<ul>\n<li>\n<p><code>task.wait<\/code>\u00a0&#8212; \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 \u0433\u043e\u0442\u043e\u0432\u043d\u043e\u0441\u0442\u0438 \u043b\u044e\u0431\u043e\u0433\u043e\u00a0<code>waitable<\/code>\u00a0\u0438\u0437 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e\u00a0<code>waitable set<\/code>. (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0435\u00a0<code>async<\/code>\u00a0\u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u0438\u043b\u0438\u00a0<code>future<\/code>, \u043a\u0430\u043a \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0438 \u0432\u044b\u0448\u0435)<\/p>\n<\/li>\n<li>\n<p><code>waitable-set.wait<\/code>\u00a0&#8212; \u0442\u043e \u0436\u0435, \u043d\u043e \u0441 \u044f\u0432\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435\u0439 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e\u00a0<code>set<\/code>.<\/p>\n<\/li>\n<li>\n<p><code>task.yield<\/code>\u00a0&#8212; \u0434\u043e\u0431\u0440\u043e\u0432\u043e\u043b\u044c\u043d\u0430\u044f \u043e\u0442\u0434\u0430\u0447\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0431\u0435\u0437 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e\u00a0<code>waitable<\/code>.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>\u041d\u0435\u044f\u0432\u043d\u044b\u0435 suspend points (\u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f Canonical ABI \u0432\u043e\u043a\u0440\u0443\u0433 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439):<\/p>\n<ul>\n<li>\n<p>\u0412\u0445\u043e\u0434 \u0432 sync-lifted \u044d\u043a\u0441\u043f\u043e\u0440\u0442 \u043f\u0440\u0438 \u0443\u0434\u0435\u0440\u0436\u0430\u043d\u043d\u043e\u043c \u0447\u0443\u0436\u043e\u043c\u00a0<code>lock<\/code>\u00a0\u043d\u0430 \u0438\u043d\u0441\u0442\u0430\u043d\u0441 (<code>Task<\/code>\u00a0\u0432\u0441\u0442\u0430\u0435\u0442 \u0432\u00a0<code>STARTING<\/code>\u00a0\u043f\u043e\u0434\u00a0<code>backpressure<\/code>).<\/p>\n<\/li>\n<li>\n<p>\u0412\u0445\u043e\u0434 \u0432 \u044d\u043a\u0441\u043f\u043e\u0440\u0442 \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u0430, \u0433\u0434\u0435 \u044f\u0432\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u00a0<code>backpressure.set(true)<\/code><\/p>\n<\/li>\n<li>\n<p>\u0412\u043e\u0437\u0432\u0440\u0430\u0442 \u0438\u0437 \u0432\u044b\u0437\u043e\u0432\u0430, \u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0435\u0449\u0451 \u043e\u0441\u0442\u0430\u043b\u0438\u0441\u044c \u0436\u0438\u0432\u044b\u0435\u00a0<code>subtask<\/code>\u00a0&#8212; structure concurrency \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0434\u043e\u0436\u0434\u0430\u0442\u044c\u0441\u044f \u0438\u0445 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f, \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439\u00a0<code>Task<\/code>\u00a0\u043f\u0440\u0438\u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f\/\u043e\u0442\u043c\u0435\u043d\u044b \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e\u00a0<code>subtask<\/code>.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>\u041f\u0440\u0438 \u043f\u0440\u0438\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0435\u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0435\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u0441 \u043c\u0430\u0440\u043a\u0435\u0440\u043e\u043c\u00a0&#171;pending&#187;,\u00a0\u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0442\u043d\u043e.\u00a0\u0425\u043e\u0441\u0442 thread \u0441\u0432\u043e\u0431\u043e\u0434\u0435\u043d.<\/p>\n<h4>\u0420\u0430\u0441\u043a\u0440\u0430\u0441\u043a\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0439<\/h4>\n<p>\u0412 \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u044b\u0445 async-\u043c\u043e\u0434\u0435\u043b\u044f\u0445 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u0440\u0438\u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e\u043c \u0441\u0430\u043c\u043e\u0439\u00a0\u0444\u0443\u043d\u043a\u0446\u0438\u0438,\u00a0\u043f\u043e\u044d\u0442\u043e\u043c\u0443 suspend \u0432 \u0433\u043b\u0443\u0431\u0438\u043d\u0435 \u0441\u0442\u0435\u043a\u0430 \u0432\u044b\u043d\u0443\u0436\u0434\u0430\u0435\u0442 \u0434\u0435\u043b\u0430\u0442\u044c\u00a0<code>async<\/code>\u00a0\u0432\u0441\u044e \u0446\u0435\u043f\u043e\u0447\u043a\u0443 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0434\u043e \u0442\u043e\u0447\u043a\u0438\u00a0\u0432\u0445\u043e\u0434\u0430 (\u043a\u0430\u043a \u0432 Kotlin, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440).\u00a0\u0412 Component Model \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u0438\u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442 \u043d\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u044f\u0437\u044b\u043a\u0430,\u00a0\u0430\u00a0<code>Task<\/code>\u00a0Canonical ABI.\u00a0suspend \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 Task \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 runtime \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u043e\u0442 \u0442\u043e\u0433\u043e,\u00a0\u0441\u043a\u043e\u043b\u044c\u043a\u043e sync-\u00a0\u0438 async-\u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432\u044b\u0448\u0435 \u0438\u043b\u0438 \u043d\u0438\u0436\u0435 \u043f\u043e \u0441\u0442\u0435\u043a\u0443.\u00a0\u041f\u043e\u044d\u0442\u043e\u043c\u0443 sync-\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u043c\u043e\u0436\u0435\u0442\u00a0\u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c async-\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442,\u00a0async-\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c sync-\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442,\u00a0\u0430 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044f \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u00a0\u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u044f async \u0447\u0435\u0440\u0435\u0437 \u0432\u0441\u044e \u0446\u0435\u043f\u043e\u0447\u043a\u0443 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432.\u00a0Runtime \u0431\u0435\u0440\u0435\u0442 \u043d\u0430 \u0441\u0435\u0431\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441\u0430,\u00a0\u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0432\u043e\u0437\u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f.<\/p>\n<p>Component Model \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u0442 \u0432\u0441\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 async.\u00a0\u041e\u043d \u0434\u0435\u043b\u0430\u0435\u0442 \u043f\u0440\u0438\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443\u00a0\u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e\u043c ABI,\u00a0\u0430 \u043d\u0435\u00a0\u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e\u043c \u0441\u0442\u0435\u043a\u0430 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u044f\u0437\u044b\u043a\u0430.\u00a0\u0418\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438\u0441\u0447\u0435\u0437\u0430\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c\u00a0\u0440\u0430\u0441\u043a\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c\u00a0\u0432\u0441\u044e \u0446\u0435\u043f\u043e\u0447\u043a\u0443\u00a0\u0432\u044b\u0437\u043e\u0432\u043e\u0432.<\/p>\n<p>\u0412 Component Model suspend \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043d\u0435 \u043a \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u044f\u0437\u044b\u043a\u0430,\u00a0\u0430 \u043a\u00a0<code>Task<\/code>\u00a0Canonical ABI.<\/p>\n<p>\u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043c wit:<\/p>\n<pre><code>process: func(req: request) -&gt; responsehttp-call: async func() -&gt; http-response<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0418 \u0432\u043d\u0443\u0442\u0440\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 Rust: <\/p>\n<pre><code>fn process(req: Request) -&gt; Response {    let r = http_call(req);    ...}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0427\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435\u00a0<code>async-import<\/code>?\u00a0<code>http_call()<\/code>\u00a0\u043c\u043e\u0436\u0435\u0442 \u0441\u0442\u0430\u0442\u044c suspend,\u00a0\u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f\u00a0<code>Subtask<\/code>,\u00a0\u0442\u0435\u043a\u0443\u0449\u0438\u0439\u00a0<code>Task<\/code>\u00a0\u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442 \u0432 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0435.\u00a0\u041a\u043e\u0433\u0434\u0430 HTTP \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442\u0441\u044f,\u00a0<code>Task<\/code>\u00a0\u0432\u043e\u0437\u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442\u00a0\u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435.\u00a0\u0412 \u043c\u043e\u043c\u0435\u043d\u0442 suspend \u0440\u0430\u043d\u0442\u0430\u0439\u043c \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442,\u00a0\u0447\u0442\u043e\u0431\u044b \u0432\u0435\u0441\u044c \u043f\u0443\u0442\u044c \u0434\u043e \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u0431\u044b\u043b\u00a0<code>async<\/code>.\u00a0\u041e\u043d \u043f\u0440\u043e\u0441\u0442\u043e\u00a0\u0444\u0438\u043a\u0441\u0438\u0440\u0443\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e\u00a0<code>Task<\/code>\u00a0\u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 event loop.\u00a0\u041a\u043e\u0433\u0434\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442,\u00a0\u0442\u043e\u0442\u00a0\u0436\u0435\u00a0<code>Task<\/code>\u00a0\u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442\u0441\u044f \u0434\u0430\u043b\u044c\u0448\u0435.<\/p>\n<p>\u0422\u043e \u0435\u0441\u0442\u044c suspend \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 Component Model,\u00a0\u0430 \u043d\u0435 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u044f\u0437\u044b\u043a\u0430.<\/p>\n<p>\u0420\u0430\u0437\u043d\u0438\u0446\u0430 \u043b\u0438\u0448\u044c \u0432 \u0442\u043e\u043c,\u00a0\u0447\u0442\u043e \u0432 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0438\u00a0<code>sync export -&gt; async import<\/code>\u00a0\u0445\u043e\u0441\u0442\u043e\u0432\u043e\u0439 \u043f\u043e\u0442\u043e\u043a \u043d\u0435 \u0431\u0443\u0434\u0435\u0442\u00a0\u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0435\u043d \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440,\u00a0\u043f\u043e\u043a\u0430\u00a0<code>Task<\/code>\u00a0\u043d\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u0441\u044f,\u00a0\u0432 \u0430 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0438\u00a0<code>async export -&gt; async import<\/code>\u00a0\u044d\u043a\u0441\u043f\u043e\u0440\u0442 \u0442\u043e\u0436\u0435 suspend \u0438 \u0445\u043e\u0441\u0442\u043e\u0432\u043e\u0439 \u043f\u043e\u0442\u043e\u043a \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d.<\/p>\n<p>\u0421 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f Component Model \u044d\u0442\u043e \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043b\u0435\u0433\u0430\u043b\u044c\u043d\u043e.<\/p>\n<h4>\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043f\u0440\u043e \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u044b<\/h4>\n<p>\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0442\u0440\u0438 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0439:<\/p>\n<pre><code>foo: async func(s: string) -&gt; stringfoo: async func(s: string) -&gt; future&lt;string&gt;foo: func(s: string) -&gt; future&lt;string&gt;<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<ul>\n<li>\n<p><code>future&lt;T&gt;<\/code>\u00a0\u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441: \u043a\u043e\u0433\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435?<\/p>\n<\/li>\n<li>\n<p><code>async<\/code>\u00a0\u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441: \u043c\u043e\u0436\u0435\u0442 \u043b\u0438 \u0441\u0430\u043c \u0432\u044b\u0437\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u0440\u0438\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f?<\/p>\n<\/li>\n<\/ul>\n<pre><code>foo: async func(s: string) -&gt; string<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0421\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0430:\u00a0\u0432\u044b\u0437\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441\u0430\u043c \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f.\u00a0\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:\u00a0<code>string\u00a0<\/code>\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u044d\u0442\u043e\u0433\u043e\u00a0\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043d\u044f\u0442\u044c \u0432\u0440\u0435\u043c\u044f.  <\/p>\n<pre><code>foo: func(s: string) -&gt; future&lt;string&gt;<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0421\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0430:\u00a0\u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043e\u0431\u044a\u0435\u043a\u0442:\u00a0<code>future<\/code>\u00a0\u0438 \u0441\u0440\u0430\u0437\u0443 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0435\u0433\u043e\u00a0(Caller \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u00a0<code>handle<\/code>\u00a0\u043d\u0430\u00a0<code>future<\/code>,\u00a0\u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u0441\u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438\u00a0<code>future<\/code>).\u00a0\u0417\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c\u00a0<code>future<\/code>\u00a0\u043c\u043e\u0436\u0435\u0442 \u0445\u043e\u0441\u0442 \u0438\u043b\u0438 \u0434\u0440\u0443\u0433\u043e\u0439\u00a0\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u00a0(\u0432\u043b\u0430\u0434\u0435\u043b\u0435\u0446\u00a0writable end\u00a0\u044d\u0442\u043e\u0433\u043e\u00a0<code>future<\/code>) <\/p>\n<pre><code>foo: async func(s: string) -&gt; future&lt;string&gt;<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0421\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0430:\u00a0\u0441\u0430\u043c \u0432\u044b\u0437\u043e\u0432\u00a0<code>foo()<\/code>\u00a0\u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f,\u00a0\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0432\u044b\u0437\u043e\u0432\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f\u00a0<code>future<\/code> <\/p>\n<h4>\u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0432\u044b\u0432\u043e\u0434\u044b<\/h4>\n<p>\u041f\u043e \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 Component Model\u00a0<code>async<\/code>\u00a0\u0432 WIT\u00a0&#8212;\u00a0\u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0445\u0438\u043d\u0442 \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0431\u0438\u043d\u0434\u0438\u043d\u0433\u0430,\u00a0\u043a\u043e\u0442\u043e\u0440\u044b\u0439\u00a0\u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u00a0<code>export<\/code>\u00a0\u0432 \u0438\u0434\u0438\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u043e\u043c \u0434\u043b\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u044f\u0437\u044b\u043a\u043e\u0432 \u0441\u0442\u0438\u043b\u0435\u00a0(stackless \u0438\u043b\u0438 stackful).\u00a0\u0422\u0430\u043a\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u00a0\u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f,\u00a0\u043f\u0440\u0438 \u043f\u0440\u0438\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0435\u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f\u00a0\u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0435\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u0441 \u043c\u0430\u0440\u043a\u0435\u0440\u043e\u043c\u00a0pending.\u00a0<strong>\u0425\u043e\u0441\u0442 thread \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0441\u0432\u043e\u0431\u043e\u0434\u0435\u043d<\/strong>\u00a0(\u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 sync \u0440\u0435\u0436\u0438\u043c\u0430).\u00a0\u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e,\u00a0\u0445\u043e\u0441\u0442 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0437\u0432\u0430\u0442\u044c handle\u00a0<strong>\u0442\u044b\u0441\u044f\u0447\u0443 \u0440\u0430\u0437 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u0435<\/strong>\u00a0\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u00a0(\u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435\u00a0\u043e\u0442 sync \u0440\u0435\u0436\u0438\u043c\u0430).<\/p>\n<p>\u0417\u0430\u0447\u0435\u043c \u043d\u0443\u0436\u0435\u043d\u00a0<code>async export<\/code>,\u00a0\u0435\u0441\u043b\u0438 \u043f\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443 WASM-\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u00a0&#8212;\u00a0\u044d\u0442\u043e \u043f\u0435\u0441\u043e\u0447\u043d\u0438\u0446\u0430,\u00a0\u043d\u0435 \u0438\u043c\u0435\u044e\u0449\u0430\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a\u00a0I\/O?\u00a0\u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c,\u00a0\u0447\u0442\u043e \u0432 I\/O \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0438 \u043d\u0430\u043c \u043d\u0443\u0436\u0435\u043d \u0438\u043c\u043f\u043e\u0440\u0442 \u043e\u0442 \u0445\u043e\u0441\u0442\u0430,\u00a0\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442 \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0437\u0430\u043f\u0440\u043e\u0441.\u00a0\u0418\u00a0\u0435\u0441\u043b\u0438 \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0445 HTTP-\u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430,\u00a0\u0438\u043c\u043f\u043e\u0440\u0442 \u0442\u043e\u0436\u0435 \u0434\u043e\u043b\u0436\u0435\u043d\u00a0\u0431\u044b\u0442\u044c \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u043c.\u00a0\u0412 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435,\u00a0\u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f\u00a0<code>async import<\/code>,\u00a0\u0438\u00a0&#171;\u043f\u0440\u0438\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430&#187;\u00a0\u043d\u0430 \u0438\u043c\u043f\u043e\u0440\u0442\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0442\u0440\u0430\u043d\u0441\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430\u0440\u0443\u0436\u0443 \u0447\u0435\u0440\u0435\u0437 \u044d\u043a\u0441\u043f\u043e\u0440\u0442,\u00a0\u0438\u043d\u0430\u0447\u0435 \u0445\u043e\u0441\u0442 \u0431\u0443\u0434\u0435\u0442 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0432\u044b\u0437\u043e\u0432\u0435\u00a0\u043d\u0430\u0448\u0435\u0433\u043e \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430,\u00a0\u0438 \u043c\u044b \u043f\u043e\u0442\u0435\u0440\u044f\u0435\u043c \u0447\u0430\u0441\u0442\u044c \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u043d\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u0438.<\/p>\n<p>\u041f\u0440\u0438\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438\u00a0(\u043a\u043e\u0433\u0434\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0435\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u0435)\u00a0\u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f\u00a0suspend points \u0438 \u043e\u043d\u0438,\u00a0\u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e,\u00a0<strong>\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u043c \u0431\u0438\u043d\u0434\u0438\u043d\u0433\u043e\u0432<\/strong>.\u00a0\u0412 Rust c wit-bindgen,\u00a0\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440,\u00a0\u0432\u0441\u0435 suspend points \u0441\u043f\u0440\u044f\u0442\u0430\u043d\u044b \u0437\u0430\u00a0<code>.await<\/code>.\u00a0\u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 Rust \u0440\u0430\u0437\u0440\u0435\u0437\u0430\u0435\u0442 async-\u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043d\u0430\u00a0\u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0438\u043c\u0435\u043d\u043d\u043e \u043d\u0430 \u0442\u043e\u0447\u043a\u0430\u0445\u00a0<code>.await<\/code>,\u00a0\u0430 wit-bindgen \u0432 \u044d\u0442\u0438\u0445 \u0442\u043e\u0447\u043a\u0430\u0445 \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u00a0<code>task.wait<\/code>\u00a0\/\u00a0<code>waitable-set.wait<\/code>.\u00a0\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u043a\u043e\u0434\u0435 \u0434\u043b\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0445 HTTP-\u0432\u044b\u0437\u043e\u0432\u043e\u0432:<\/p>\n<pre><code class=\"rust\">let (a, b, c) = futures::try_join!(    http_handle(req_a),    http_handle(req_b),    http_handle(req_c),)?;<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0415\u0441\u0442\u044c \u043e\u0434\u0438\u043d suspend point\u00a0&#8212;\u00a0\u044d\u0442\u043e\u00a0<code>.await<\/code>\u00a0\u0432\u043d\u0443\u0442\u0440\u0438\u00a0<code>try_join!<\/code>.\u00a0\u0421\u0430\u043c\u0438 \u0432\u044b\u0437\u043e\u0432\u044b\u00a0<code>http_handle()<\/code>\u00a0\u0434\u043e\u00a0<code>.await<\/code>\u00a0\u043b\u0438\u0448\u044c \u0441\u043e\u0437\u0434\u0430\u044e\u0442 \u0442\u0440\u0438\u00a0<code>subtask<\/code>\u00a0\u0438 \u043d\u0435 \u043f\u0440\u0438\u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u044e\u0442\u00a0<code>Task<\/code>.\u00a0<\/p>\n<p>\u0412 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0432\u044b\u0448\u0435 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u00a0\u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:\u00a0host \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u00a0<code>handle()<\/code>,\u00a0\u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f\u00a0<code>Task<\/code>\u00a0\u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430,\u00a0\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0432\u044b\u0437\u043e\u0432 HTTP\u00a0\u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439\u00a0<code>async import<\/code>.\u00a0\u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e\u00a0<code>async import<\/code>\u00a0\u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439\u00a0<code>Subtask<\/code>,\u00a0\u0438 \u0432\u0441\u0435\u00a0\u0442\u0440\u0438\u00a0<code>Subtask<\/code>\u00a0\u043f\u043e\u043c\u0435\u0449\u0430\u044e\u0442\u0441\u044f \u0432\u00a0<code>waitable-set<\/code>\u00a0\u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e\u00a0<code>Task<\/code>.\u00a0\u041a\u043e\u0433\u0434\u0430\u00a0<code>Task<\/code>\u00a0\u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0435\u0442 suspend-point\u00a0\u0432\u043d\u0443\u0442\u0440\u0438\u00a0<code>try_join!<\/code>,\u00a0\u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f host runtime,\u00a0Wasmtime \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435\u00a0\u0437\u0430\u0434\u0430\u0447\u0438 \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u044b.\u00a0\u041f\u043e \u043c\u0435\u0440\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f HTTP-\u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435\u00a0<code>Subtask<\/code>\u00a0\u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044f\u0442 \u0432\u00a0<code>completed<\/code>,\u00a0\u0438 \u043a\u043e\u0433\u0434\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u044b\u0439\u00a0<code>Subtask<\/code>,\u00a0runtime \u0432\u043e\u0437\u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439\u00a0<code>Task<\/code>.\u00a0\u041f\u043e \u0438\u0442\u043e\u0433\u0443 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f\u00a0<code>task.return<\/code>.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0434\u0440\u0443\u0433 \u0432\u043d\u0435\u0448\u043d\u0438\u0439 caller\u00a0(\u0445\u043e\u0441\u0442)\u00a0\u043e\u0442\u043c\u0435\u043d\u044f\u0435\u0442 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u00a0<code>handle(request)<\/code>,\u00a0runtime \u043e\u0442\u043c\u0435\u043d\u0438\u0442 \u0438 \u0432\u0441\u0435 N\u00a0\u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0445\u00a0<code>subtask<\/code>.\u00a0\u041a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u044d\u0442\u0438\u0445\u00a0<code>subtask<\/code>\u00a0\u043f\u0435\u0440\u0435\u0439\u0434\u0435\u0442 \u0432 cancelled-\u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435,\u00a0\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435\u00a0<code>future&lt;incoming-response&gt;<\/code>\u00a0\u043e\u0442\u0440\u0435\u0437\u043e\u043b\u0432\u044f\u0442\u0441\u044f \u043a\u0430\u043a cancelled,\u00a0\u0431\u0443\u0444\u0435\u0440\u044b \u043f\u043e\u0434 \u043e\u0442\u0432\u0435\u0442\u044b \u043e\u0441\u0432\u043e\u0431\u043e\u0434\u044f\u0442\u0441\u044f.\u00a0\u041a\u043e\u0434 \u0432\u00a0\u0438\u0434\u0438\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u043c async \u0440\u0435\u0436\u0438\u043c\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442 \u044d\u0442\u043e \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u0443\u044e \u043e\u0442\u043c\u0435\u043d\u0443\u00a0<code>future<\/code>,\u00a0<strong>\u0431\u043e\u0439\u043b\u0435\u0440\u043f\u043b\u0435\u0439\u0442 \u043f\u0440\u044f\u0447\u0443\u0442\u00a0\u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0431\u0438\u043d\u0434\u0438\u043d\u0433\u0438 \u043a \u044f\u0437\u044b\u043a\u0430\u043c.<\/strong><\/p>\n<p>\u0412\u0430\u0436\u043d\u044b\u0439 \u043d\u044e\u0430\u043d\u0441:\u00a0Async \u0432 Component Model \u043d\u0435 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0440\u0430\u0441\u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u0438\u0432\u0430\u043d\u0438\u0435 \u043f\u043e CPU.\u00a0Async\u00a0\u0440\u0435\u0448\u0430\u0435\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u0439\u00a0(HTTP,\u00a0\u0441\u043e\u043a\u0435\u0442\u044b,\u00a0\u0444\u0430\u0439\u043b\u044b,\u00a0\u0442\u0430\u0439\u043c\u0435\u0440\u044b).\u00a0\u041f\u043e\u043a\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u043e\u0436\u0438\u0434\u0430\u0435\u0442 I\/O,\u00a0runtime \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0434\u0440\u0443\u0433\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u0443.\u00a0\u0415\u0441\u043b\u0438 \u043a\u043e\u0434 \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0442\u044f\u0436\u0435\u043b\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0431\u0435\u0437\u00a0suspend-point,\u00a0\u0442\u043e \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u0434 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442 \u0443\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u043e\u0442 \u0442\u043e\u0433\u043e,\u00a0\u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u00a0\u043a\u0430\u043a async \u0438\u043b\u0438 \u043d\u0435\u0442.<\/p>\n<hr\/>\n<h2>Wasmtime<\/h2>\n<p>\u0421\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b\u00a0<a href=\"https:\/\/docs.wasmtime.dev\/api\/wasmtime\/component\/index.html\" rel=\"noopener noreferrer nofollow\">\u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 Component Model<\/a>\u00a0\u0432 Wasmtime \u0442\u043e\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b.\u00a0\u041d\u043e \u043f\u0440\u0435\u0434\u043f\u043e\u0441\u044b\u043b\u043a\u0438 \u043a \u0438\u0445 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u044e \u0438 \u0441\u043a\u043e\u0443\u043f\u00a0\u0440\u0435\u0448\u0430\u0435\u043c\u044b\u0445 \u0437\u0430\u0434\u0430\u0447 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 WASI.  <\/p>\n<h3>\u0416\u0438\u0437\u043d\u044c \u0434\u043e WASI 0.3<\/h3>\n<p>\u0412\u043e\u0437\u044c\u043c\u0435\u043c \u043d\u0430\u0448 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u0434\u0430 WASM-\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430:  <\/p>\n<pre><code class=\"rust\">let (a, b, c) = futures::try_join!(    http_handle(req_a),    http_handle(req_b),    http_handle(req_c),)?;<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0425\u043e\u0441\u0442 \u0441 Wasmtime \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u00a0<code>func.call()<\/code>,\u00a0\u0432 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043c\u043e\u043c\u0435\u043d\u0442 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0434\u0435\u043b\u0430\u0435\u0442\u00a0<code>import<\/code>\u00a0\u0434\u043b\u044f \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e HTTP-\u0432\u044b\u0437\u043e\u0432\u0430.\u00a0\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430:\u00a0\u043f\u043e\u043c\u0438\u043c\u043e \u0442\u043e\u0433\u043e,\u00a0\u0447\u0442\u043e WASM-\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0441\u0430\u043c \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d (\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b \u0441\u0432\u043e\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043d\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u0435 ABI) \u043d\u0430 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0438\u00a0\u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0438\u043c\u043f\u043e\u0440\u0442\u0430\u00a0(\u0432\u0435\u0434\u044c WASI 0.3 \u0435\u0449\u0435 \u043d\u0435 \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f),\u00a0\u043d\u043e \u0438 \u0441\u0430\u043c Wasmtime \u0432\u044b\u043d\u0443\u0436\u0434\u0435\u043d \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f (\u0432\u043e\u0442 \u0437\u0434\u0435\u0441\u044c \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0430 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0430\u044f, \u0438\u043c\u0435\u043d\u043d\u043e host thread) \u043d\u0430\u00a0\u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 HTTP-\u0432\u044b\u0437\u043e\u0432\u0430.\u00a0\u0425\u043e\u0441\u0442 thread \u0437\u0430\u043d\u044f\u0442,\u00a0\u0445\u043e\u0442\u044f \u043c\u043e\u0433 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u0443\u044e \u0440\u0430\u0431\u043e\u0442\u0443.<\/p>\n<p><strong>\u0420\u0435\u0448\u0435\u043d\u0438\u0435\u043c\u00a0<\/strong>\u0441\u0442\u0430\u043b\u043e \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0430\u0431\u043e\u0440\u0430\u00a0<code>*_async()<\/code>\u00a0\u0444\u0443\u043d\u043a\u0446\u0438\u0439.\u00a0\u0424\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u00a0&#8212;\u00a0\u044d\u0442\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435\u00a0Wasmtime,\u00a0\u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0432\u044f\u0437\u043a\u0430\u00a0<strong>async host\u00a0+\u00a0sync guest<\/strong>.<\/p>\n<p>\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440,\u00a0\u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0437\u0430\u0434\u0430\u0447\u0438 \u0432\u044b\u0448\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u00a0<code>call_async()<\/code>.<\/p>\n<p>\u041f\u0440\u0438 \u0435\u0435 \u0432\u044b\u0437\u043e\u0432\u0435 Wasmtime \u0430\u043b\u043b\u043e\u0446\u0438\u0440\u0443\u0435\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0441\u0442\u0435\u043a\u00a0(fiber stack)\u00a0\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u043d\u0430 \u043d\u0451\u043c wasm-\u043a\u043e\u0434.\u00a0\u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e,\u00a0\u043e\u043d \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u0437\u043d\u0430\u0435\u0442,\u00a0\u0447\u0442\u043e \u0436\u0438\u0432\u0451\u0442 \u043d\u0430 fiber\u00a0(stackful coroutine).\u00a0\u041a\u043e\u0433\u0434\u0430\u00a0\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0437\u043e\u0432\u0451\u0442 host-\u0444\u0443\u043d\u043a\u0446\u0438\u044e,\u00a0\u0434\u0435\u043b\u0430\u044e\u0449\u0443\u044e I\/O,\u00a0\u0438 \u044d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u00a0<code>Poll::Pending<\/code>,\u00a0Wasmtime\u00a0\u0434\u0435\u043b\u0430\u0435\u0442\u00a0<code>stack_switch<\/code>\u00a0\u043e\u0431\u0440\u0430\u0442\u043d\u043e \u043d\u0430 \u0441\u0442\u0435\u043a \u0445\u043e\u0441\u0442\u0430.\u00a0\u0425\u043e\u0441\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0432 Tokio\u00a0<code>Pending<\/code>.\u00a0Tokio \u043c\u043e\u0436\u0435\u0442\u00a0\u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0437\u0430\u0434\u0430\u0447\u0430\u043c\u0438.\u00a0\u041a\u043e\u0433\u0434\u0430 I\/O \u0433\u043e\u0442\u043e\u0432\u043e,\u00a0Tokio \u0441\u043d\u043e\u0432\u0430 \u043f\u043e\u043b\u043b\u0438\u0442\u00a0<code>future<\/code>,\u00a0\u0430 Wasmtime \u0434\u0435\u043b\u0430\u0435\u0442\u00a0<code>stack_switch<\/code>\u00a0\u043d\u0430\u0437\u0430\u0434 \u043d\u0430 fiber,\u00a0\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442 \u0441 \u0442\u043e\u0439 \u0436\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438,\u00a0\u0433\u0434\u0435 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0441\u044f.<\/p>\n<p>\u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u044d\u0442\u043e \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043a\u0440\u0435\u0439\u0442\u0443\u00a0<code>wasmtime-fiber<\/code>\u00a0<a href=\"https:\/\/github.com\/bytecodealliance\/wasmtime\/tree\/main\/crates\/fiber\" rel=\"noopener noreferrer nofollow\">\u0432\u043d\u0443\u0442\u0440\u0438<\/a>\u00a0Wasmtime.\u00a0\u041f\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044e \u0432\u0438\u0434\u043d\u043e,\u00a0\u0447\u0442\u043e \u0431\u044b\u043b \u0432\u044b\u0431\u0440\u0430\u043d stackful \u043f\u043e\u0434\u0445\u043e\u0434 \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u043e\u0440\u0443\u0442\u0438\u043d,\u00a0\u0445\u043e\u0442\u044f\u00a0<strong>\u0448\u0442\u0430\u0442\u043d\u0430\u044f\u00a0<\/strong>\u044f\u0437\u044b\u043a\u043e\u0432\u0430\u044f \u0444\u0438\u0447\u0430 Rust \u0432 \u0432\u0438\u0434\u0435\u00a0<code>async<\/code>\/<code>await<\/code>\u00a0&#8212;\u00a0\u044d\u0442\u043e stackless.<\/p>\n<p>\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 Wasmtime \u0441\u043e\u0437\u043d\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435 \u0441\u0442\u0430\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c stackless-\u043f\u043e\u0434\u0445\u043e\u0434 Rust \u0434\u043b\u044f\u00a0\u043f\u0440\u0438\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 wasm-\u043a\u043e\u0434\u0430.\u00a0\u041f\u0440\u0438\u0447\u0438\u043d\u0430\u00a0&#8212;\u00a0\u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0439,\u00a0\u0443\u0436\u0435 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439\u00a0wasm-\u0431\u0430\u0439\u0442\u043a\u043e\u0434 \u0432 Rust state machine\u00a0(\u0430\u00a0\u0432\u0441\u0435 stackless \u043a\u043e\u0440\u0443\u0442\u0438\u043d\u044b \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0432 state machine):\u00a0\u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0432 state machine \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430,\u00a0\u0430 \u0443 Wasmtime \u043d\u0430 \u0432\u0445\u043e\u0434\u0435 \u043d\u0435\u00a0Rust-\u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a,\u00a0\u0430 \u0433\u043e\u0442\u043e\u0432\u044b\u0439 wasm.\u00a0\u041f\u043e\u044d\u0442\u043e\u043c\u0443 Wasmtime \u0430\u043b\u043b\u043e\u0446\u0438\u0440\u0443\u0435\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0441\u0442\u0435\u043a,\u00a0\u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u0442 wasm\u00a0\u043d\u0430 \u043d\u0451\u043c \u0438 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0441\u0442\u0435\u043a\u0438 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u043e\u0439.<\/p>\n<p>\u041f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u044f\u0437\u044b\u043a\u043e\u0432\u0430\u044f \u0444\u0438\u0447\u0430 \u0441\u0430\u043c\u043e\u0433\u043e WebAssembly\u00a0&#8212;\u00a0proposal stack-switching.\u00a0\u041e\u043d\u00a0\u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0432 wasm \u043d\u043e\u0432\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438\u00a0(<code>cont.new<\/code>,\u00a0<code>resume<\/code>,\u00a0<code>suspend<\/code>,\u00a0<code>switch<\/code>)\u00a0\u0438 \u0442\u0438\u043f\u00a0<code>continuation<\/code>,\u00a0\u0447\u0442\u043e\u0431\u044b wasm-\u0433\u043e\u0441\u0442\u044c \u0441\u0430\u043c \u043c\u043e\u0433 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u0442\u0435\u043a\u0438\u00a0(\u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438)\u00a0\u0438 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u044c\u0441\u044f \u043c\u0435\u0436\u0434\u0443\u00a0\u043d\u0438\u043c\u0438 \u0431\u0435\u0437 \u0443\u0447\u0430\u0441\u0442\u0438\u044f \u0445\u043e\u0441\u0442\u0430.\u00a0\u042d\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u043e\u0440\u0443\u0442\u0438\u043d,\u00a0\u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432,\u00a0\u0433\u043e\u0440\u0443\u0442\u0438\u043d Go \u0438 \u0442.\u043f.\u00a0\u0432\u043d\u0443\u0442\u0440\u0438 \u043e\u0434\u043d\u043e\u0433\u043e wasm-\u0438\u043d\u0441\u0442\u0430\u043d\u0441\u0430\u00a0(\u044d\u0442\u043e \u043c\u044b \u043e\u0431\u0441\u0443\u0434\u0438\u043b\u0438 \u0432\u044b\u0448\u0435).<\/p>\n<details class=\"spoiler\">\n<summary>\u0418\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0441\u043f\u0440\u0430\u0432\u043a\u0430<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0418\u043c\u0435\u043d\u043d\u043e \u0438\u0434\u0435\u044f\u043c\u0438\u00a0wasmtime-fiber\u00a0(\u0438 stack switching proposal)\u00a0\u0432\u0434\u043e\u0445\u043d\u043e\u0432\u043b\u0435\u043d WASI 0.3  <\/p>\n<\/div>\n<\/details>\n<p>\u041d\u0430\u0431\u043e\u0440\u00a0<code>*_async()<\/code>\u00a0\u0444\u0443\u043d\u043a\u0446\u0438\u0439:<\/p>\n<ul>\n<li>\n<p><code>call_async()<\/code>\u00a0&#8212; \u0432\u044b\u0437\u0432\u0430\u0442\u044c wasm-\u0444\u0443\u043d\u043a\u0446\u0438\u044e<\/p>\n<\/li>\n<li>\n<p><code>instantiate_async()<\/code>\u00a0&#8212; \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0438\u043d\u0441\u0442\u0430\u043d\u0441<\/p>\n<\/li>\n<li>\n<p><code>new_async()<\/code>\u00a0&#8212; \u0441\u043e\u0437\u0434\u0430\u0442\u044c async host \u0444\u0443\u043d\u043a\u0446\u0438\u044e<\/p>\n<\/li>\n<li>\n<p><code>wrap_async()<\/code>\u00a0&#8212; \u0442\u0438\u043f\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u043e\u0431\u0435\u0440\u0442\u043a\u0430 \u043d\u0430\u0434\u00a0<code>new_async()<\/code><\/p>\n<\/li>\n<li>\n<p><code>func_wrap_async()<\/code>\u00a0&#8212; \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f async host \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432\u00a0<code>Linker<\/code>\u00a0(\u0447\u0442\u043e\u0431\u044b Wasmtime \u0441\u043c\u043e\u0433 \u043d\u0430\u0439\u0442\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e, \u043a\u043e\u0433\u0434\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0432\u044b\u0437\u043e\u0432\u0435\u0442 \u044d\u0442\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e)<\/p>\n<\/li>\n<\/ul>\n<p>\u0412\u0430\u0436\u043d\u043e \u0443\u0447\u0435\u0441\u0442\u044c,\u00a0\u0447\u0442\u043e Wasmtime \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u00a0<code>*_async<\/code>\u00a0API \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438\u00a0<code>Config::async_support(true)<\/code>\u00a0\u0438\u00a0<code>Store<\/code>\u00a0\u0441\u043e\u0437\u0434\u0430\u043d \u043a\u0430\u043a async-store.\u00a0\u0422\u043e\u0433\u0434\u0430 \u0432\u0435\u0441\u044c \u043f\u0443\u0442\u044c \u043e\u0431\u044f\u0437\u0430\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c async-\u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b API.<\/p>\n<h3>\u0416\u0438\u0437\u043d\u044c \u043f\u043e\u0441\u043b\u0435 WASI 0.3<\/h3>\n<p>\u0421 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u0435\u043c WASI 0.3 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0441\u0442\u044c \u0441\u0442\u0430\u043b\u0430 \u0447\u0430\u0441\u0442\u044c\u044e \u0441\u0430\u043c\u043e\u0433\u043e Component Model.\u00a0\u0415\u0441\u043b\u0438 \u0440\u0430\u043d\u044c\u0448\u0435\u00a0<code>async<\/code>\u00a0\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043b \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u0430\u043a \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u044f\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0445\u043e\u0441\u0442\u0430\u00a0(<code>call_async()<\/code>,\u00a0fibers,\u00a0stack switching \u0432\u043d\u0443\u0442\u0440\u0438\u00a0Wasmtime),\u00a0\u0442\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u043e\u043d \u0432\u0445\u043e\u0434\u0438\u0442 \u0432 ABI \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432.\u00a0\u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u043c\u043e\u0436\u0435\u0442 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u00a0\u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e.<\/p>\n<p>\u0412 Wasmtime \u0435\u0441\u0442\u044c \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u0430\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 Async ABI.\u00a0\u0412\u0441\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b,\u00a0enum,\u00a0\u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438 \u0442.\u0434.,\u00a0\u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 WASI 0.3 \u043f\u043e\u043c\u0435\u0447\u0435\u043d\u044b \u043b\u0435\u0439\u0431\u043b\u043e\u043c\u00a0<code>component-model-async<\/code>\u00a0\u0432\u00a0<a href=\"https:\/\/docs.wasmtime.dev\/api\/wasmtime\/component\/index.html\" rel=\"noopener noreferrer nofollow\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438<\/a>,\u00a0\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440,\u00a0<a href=\"https:\/\/docs.wasmtime.dev\/api\/wasmtime\/component\/struct.Func.html#method.call_concurrent\" rel=\"noopener noreferrer nofollow\">\u0444\u0443\u043d\u043a\u0446\u0438\u044f<\/a>\u00a0<code>call_concurrent()<\/code><\/p>\n<p>\u0412\u043e\u0437\u044c\u043c\u0435\u043c \u0442\u043e\u0442 \u0436\u0435 \u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<pre><code class=\"rust\">let (a, b, c) = futures::try_join!(    http_handle(req_a),    http_handle(req_b),    http_handle(req_c),)?;<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c\u00a0<code>http_handle()<\/code>\u00a0\u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u043c async-\u0438\u043c\u043f\u043e\u0440\u0442\u043e\u043c \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 Component Model.\u00a0\u041f\u0440\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438\u00a0<code>await<\/code>\u00a0\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0443 \u0447\u0435\u0440\u0435\u0437 Async ABI.\u00a0Wasmtime \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u043d\u00a0\u0443\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 fiber \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c stack switching \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043e\u0436\u0438\u0434\u0430\u044e\u0449\u0435\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430.\u00a0\u0412\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e\u00a0\u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043e \u044f\u0432\u043d\u043e \u0432 ABI \u0447\u0435\u0440\u0435\u0437 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 async-\u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u044b Component\u00a0Model.<\/p>\n<p>\u0413\u043b\u0430\u0432\u043d\u043e\u0435 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 WASI 0.2 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u0442\u043e\u043c,\u00a0\u0447\u0442\u043e \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0441\u0442\u044c \u0441\u0442\u0430\u043b\u0430 \u043f\u043e\u043d\u044f\u0442\u043d\u0430 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0445\u043e\u0441\u0442\u0443,\u00a0\u043d\u043e \u0438\u00a0\u0441\u0430\u043c\u0438\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c.\u00a0\u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u043c\u043e\u0433\u0443\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0430 \u0447\u0435\u0440\u0435\u0437 async-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b \u0431\u0435\u0437 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0445\u00a0<code>pollable<\/code>,\u00a0\u0440\u0443\u0447\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0431\u0440\u043e\u0441\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0433\u043e\u0442\u043e\u0432\u043d\u043e\u0441\u0442\u0438 \u0438 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0445 event loop \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430.\u00a0\u0420\u0430\u043d\u0442\u0430\u0439\u043c \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 \u0441\u0440\u0430\u0437\u0443 \u043c\u0435\u0436\u0434\u0443 \u0432\u0441\u0435\u043c\u0438 \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u0430\u043c\u0438 \u0446\u0435\u043f\u043e\u0447\u043a\u0438\u00a0\u0432\u044b\u0437\u043e\u0432\u043e\u0432.<\/p>\n<p><code>async<\/code>\u00a0\u0441\u0442\u0430\u043b \u0447\u0430\u0441\u0442\u044c\u044e ABI Component Model,\u00a0\u0430 \u043d\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439\u00a0<code>_async<\/code>\u00a0\u043d\u0430\u0434\u0441\u0442\u0440\u043e\u0439\u043a\u043e\u0439 Wasmtime.\u00a0\u041f\u043e\u044d\u0442\u043e\u043c\u0443\u00a0\u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u043e\u0432\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438,\u00a0\u0430 \u0446\u0435\u043b\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u043d\u043e\u0432\u044b\u0445 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439:\u00a0<code>task<\/code>,\u00a0<code>future<\/code>,\u00a0<code>stream<\/code>,<em>\u00a0<\/em><code>_concurrent()<\/code>\u00a0\u0438 \u0442.\u0434.<\/p>\n<p>\u041d\u0430\u0431\u043e\u0440 API \u0434\u043b\u044f Async ABI\u00a0(component-model-async):<\/p>\n<ul>\n<li>\n<p><code>call_concurrent()<\/code>\u00a0&#8212; \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u044d\u043a\u0441\u043f\u043e\u0440\u0442 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u043a\u0430\u043a \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e guest\u00a0<code>Task<\/code>. \u041c\u043e\u0436\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0442\u043d\u043e \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0432\u044b\u0437\u043e\u0432\u0430\u043c\u0438 \u0442\u043e\u0433\u043e \u0436\u0435 instance, \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442\u00a0<code>call<\/code>\u00a0\u0438\u00a0<code>call_async<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u044d\u043a\u0441\u043a\u043b\u044e\u0437\u0438\u0432\u043d\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a store \u0434\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0432\u044b\u0437\u043e\u0432\u0430.\u00a0<code>call_async()<\/code>\u00a0\u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u0435\u0442 guest\u00a0<code>Task<\/code>\u00a0\u0432\u043d\u0443\u0442\u0440\u0438 component instance.<\/p>\n<\/li>\n<li>\n<p><code>start_call_concurrent()<\/code>\u00a0&#8212; \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c guest\u00a0<code>Task<\/code>\u00a0\u0431\u0435\u0437 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430<\/p>\n<\/li>\n<li>\n<p><code>finish_call_concurrent()<\/code>\u00a0&#8212; \u0434\u043e\u0436\u0434\u0430\u0442\u044c\u0441\u044f \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0440\u0430\u043d\u0435\u0435 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u043e\u0439 guest\u00a0<code>Task<\/code><\/p>\n<\/li>\n<li>\n<p><code>func_wrap_concurrent()<\/code>\u00a0&#8212; \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c async host-\u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043f\u043e \u043c\u043e\u0434\u0435\u043b\u0438 WASI 0.3<\/p>\n<\/li>\n<li>\n<p><code>run_concurrent()<\/code>\u00a0&#8212; \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f, \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 guest\u00a0<code>Task<\/code>\u00a0\u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c<\/p>\n<\/li>\n<li>\n<p><code>spawn()<\/code>\u00a0&#8212; \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e host\u00a0<code>Task<\/code>, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u0443\u044e \u0441 \u0442\u0435\u043a\u0443\u0449\u0438\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u043c (\u043d\u0435 Canonical ABI\u00a0<code>Task<\/code>, \u0430\u00a0<code>Task<\/code>\u00a0Wasmtime\u00a0<code>scheduler<\/code>.)<\/p>\n<\/li>\n<\/ul>\n<p><code>call_async()<\/code>\u00a0\u0438 Async ABI \u043d\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432\u0437\u0430\u0438\u043c\u043e\u0438\u0441\u043a\u043b\u044e\u0447\u0430\u044e\u0449\u0438\u043c\u0438 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430\u043c\u0438.\u00a0\u041f\u0435\u0440\u0432\u044b\u0439 \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f,\u00a0\u0447\u0442\u043e\u0431\u044b \u0440\u0435\u0448\u0430\u0442\u044c\u00a0\u0437\u0430\u0434\u0430\u0447\u0443 \u043d\u0435\u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0449\u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0433\u043e wasm-\u043a\u043e\u0434\u0430 \u0432 Wasmtime.<\/p>\n<h3>Wasmtime C-API<\/h3>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0436\u0438\u0437\u043d\u0435\u043d\u043d\u044b\u043c \u0446\u0438\u043a\u043b\u043e\u043c Wasmtime \u0438\u0437 Java, \u0442\u043e \u0433\u043e\u0442\u043e\u0432\u044b\u0445 \u0431\u0438\u043d\u0434\u0438\u043d\u0433\u043e\u0432, \u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0435\u0442. \u041d\u043e \u0435\u0441\u0442\u044c \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u044b\u0439 \u0432\u044b\u0445\u043e\u0434 &#8212; \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <a href=\"https:\/\/docs.wasmtime.dev\/c-api\/index.html\" rel=\"noopener noreferrer nofollow\">Wasmtime C-API<\/a> \u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u0438\u043d\u0438\u0434\u0438\u043d\u0433\u0438 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Project Panama \ud83d\ude42<\/p>\n<p>\u041d\u043e \u0435\u0441\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430: <strong>Wasmtime-C-API \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043e\u0442\u0441\u0442\u0430\u0435\u0442 \u043e\u0442 Rust API \u0432 \u0447\u0430\u0441\u0442\u0438 Async Component Model.<\/strong>\u00a0\u00a0\u0412 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 C API \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0430\u0440\u044b\u0439 async-\u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u00a0\u043d\u0430 \u0431\u0430\u0437\u0435 fibers \u0438\u00a0<code>call_future<\/code>.<\/p>\n<p>\u042f \u0441\u043e\u0437\u0434\u0430\u043b Issue \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b\u00a0<a href=\"https:\/\/github.com\/bytecodealliance\/wasmtime\/issues\/13705\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/bytecodealliance\/wasmtime\/issues\/13705<\/a><\/p>\n<p>\u0421\u0435\u0439\u0447\u0430\u0441 \u0432 C API \u0435\u0441\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u043b\u044f \u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u0438 async \u0440\u0435\u0436\u0438\u043c\u0430:\u00a0<code>wasmtime_config_async_support_set(config, true)<\/code>. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0439 \u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u0438 \u0432\u043c\u0435\u0441\u0442\u043e\u00a0<code>wasmtime_func_call()<\/code>\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f\u00a0<code>wasmtime_func_call_async()<\/code>,\u00a0\u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u00a0<code>wasmtime_call_future_t*<\/code>,\u00a0\u0430 \u043d\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0441\u0440\u0430\u0437\u0443.\u00a0\u0414\u0430\u043b\u044c\u0448\u0435 \u0442\u044b \u0441\u0430\u043c \u043f\u043e\u043b\u043b\u0438\u0448\u044c future\u00a0<code>wasmtime_call_future_poll()<\/code>.\u00a0<\/p>\n<p>\u0421\u0430\u043c\u043e\u0435 \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u043e\u0435\u00a0&#8212;\u00a0\u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0433\u043e\u00a0<code>Store<\/code>\u00a0\u0440\u0430\u0437\u0440\u0435\u0448\u0451\u043d \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0436\u0438\u0432\u043e\u0439\u00a0<code>wasmtime_call_future_t<\/code>\u00a0\u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e.<\/p>\n<hr\/>\n<h2>\u0414\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u044f<\/h2>\n<p>\u042f \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043b Rust-\u043f\u0440\u043e\u0435\u043a\u0442, \u0433\u0434\u0435 \u044f\u0432\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u0440\u0430\u0437\u043d\u044b\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0439 \u0438 \u0442\u043e\u0439 \u0436\u0435 \u0437\u0430\u0434\u0430\u0447\u0438, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043c\u0438\u043d\u0438-\u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a, \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u0440\u0430\u0437\u043d\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043f\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u043d\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u044e \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u0432 \u043a \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u043c \u0432\u044b\u0437\u043e\u0432\u0430\u043c Wasmtime. \u042f\u0432\u043d\u044b\u0435 \u043f\u043b\u044e\u0441\u044b WASI 0.3, \u0437\u0430\u043c\u0435\u0442\u043d\u044b\u0435 \u043f\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f:<\/p>\n<ol>\n<li>\n<p>1 \u0438\u043d\u0441\u0442\u0430\u043d\u0441 == N \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 (\u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u0440\u0430\u0445 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430 \u0437\u0430\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f ~50-200 \u041a\u0411 \u043d\u0430 \u0437\u0430\u0434\u0430\u0447\u0443 \u0432 WASI 0.3 \u043f\u0440\u043e\u0442\u0438\u0432 ~2-8 \u041c\u0411 \u043d\u0430 \u043f\u043e\u043b\u043d\u044b\u0439 \u043a\u043b\u043e\u043d instance \u0432 WASI 0.2 &#8212; \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0432 10-40 \u0440\u0430\u0437)<\/p>\n<\/li>\n<li>\n<p>\u0412\u043d\u0443\u0442\u0440\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u0430 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c N \u0438\u043c\u043f\u043e\u0440\u0442\u043e\u0432 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e, \u0447\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0435\u0442 \u043d\u0430\u0448\u0443 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 production ready. \u041f\u0430\u043c\u044f\u0442\u044c \u043f\u0440\u0438 1000 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 HTTP-\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439 : \u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u0440\u0430\u0445 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430 \u0437\u0430\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f ~150-300 \u041c\u0411 \u0432 WASI 0.3 \u043f\u0440\u043e\u0442\u0438\u0432 2-8 \u0413\u0411 \u0432 WASI 0.2 &#8212; \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0432 10-25 \u0440\u0430\u0437 (\u043c\u043e\u0434\u0435\u043b\u044c shared instance \u0443\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043b\u0438\u043d\u0435\u0439\u043d\u0443\u044e \u043f\u0430\u043c\u044f\u0442\u044c \u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f)<\/p>\n<\/li>\n<li>\n<p>Language agnostic \u043f\u043e\u0434\u0445\u043e\u0434, \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u043b\u044e\u0431\u043e\u0439 \u044f\u0437\u044b\u043a \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 frontend \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438\u00a0<\/p>\n<\/li>\n<\/ol>\n<p>\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 GitHub (\u0434\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c!) <a href=\"https:\/\/github.com\/rudikone\/wasm-example\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/rudikone\/wasm-example<\/a><\/p>\n<h2>\u0421\u0441\u044b\u043b\u043a\u0438<\/h2>\n<ul>\n<li>\n<p><a href=\"https:\/\/bytecodealliance.org\/articles\/WASI-0.3\" rel=\"noopener noreferrer nofollow\">https:\/\/bytecodealliance.org\/articles\/WASI-0.3<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/github.com\/WebAssembly\/component-model\/tree\/main\/design\/mvp\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/WebAssembly\/component-model\/tree\/main\/design\/mvp<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/github.com\/WebAssembly\/stack-switching\/blob\/main\/proposals\/stack-switching\/Explainer.md\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/WebAssembly\/stack-switching\/blob\/main\/proposals\/stack-switching\/Explainer.md<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/blog.codercops.com\/blog\/wasi-0-3-native-async-io-webassembly-2026\" rel=\"noopener noreferrer nofollow\">https:\/\/blog.codercops.com\/blog\/wasi-0-3-native-async-io-webassembly-2026<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/docs.wasmtime.dev\/api\/wasmtime\/component\/index.html\" rel=\"noopener noreferrer nofollow\">https:\/\/docs.wasmtime.dev\/api\/wasmtime\/component\/index.html<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/github.com\/bytecodealliance\/wasmtime\/blob\/main\/tests\/all\/component_model\/async.rs#L517\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/bytecodealliance\/wasmtime\/blob\/main\/tests\/all\/component_model\/async.rs#L517<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/github.com\/bytecodealliance\/wasmtime\/blob\/main\/tests\/all\/component_model\/async.rs#L608\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/bytecodealliance\/wasmtime\/blob\/main\/tests\/all\/component_model\/async.rs#L608<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/github.com\/bytecodealliance\/wasmtime\/blob\/main\/tests\/all\/component_model\/async.rs#L834\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/bytecodealliance\/wasmtime\/blob\/main\/tests\/all\/component_model\/async.rs#L834<\/a><\/p>\n<\/li>\n<\/ul>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1055048\/\">https:\/\/habr.com\/ru\/articles\/1055048\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>WebAssembly (WASM) &#8212; \u044d\u0442\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442 \u0438 \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u044b\u0439 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u0431\u0430\u0439\u0442-\u043a\u043e\u0434\u0430, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u0434\u0430 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 \u0441 \u043e\u043a\u043e\u043b\u043e\u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e. \u041e\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432\u043d\u0443\u0442\u0440\u0438 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0439 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u044b \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u0441\u0435\u043c\u0438 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u043c\u0438 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430\u043c\u0438 (Chrome, Firefox, Safari, Edge).  WASM \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u044f\u0437\u044b\u043a\u043e\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u042d\u0442\u043e target \u0434\u043b\u044f C, C++, Rust, Go \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u044f\u0437\u044b\u043a\u043e\u0432.\u0425\u043e\u0442\u044c \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f \u0438 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b\u0430\u0441\u044c \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0432\u0435\u0431\u0430 \u0438 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043e\u0432, \u0441 \u0432\u044b\u0445\u043e\u0434\u043e\u043c WASI WASM \u0448\u0430\u0433\u043d\u0443\u043b \u0432 \u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u0439 \u0438 IoT-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438.WASI (WebAssembly System Interface)WASI (WebAssembly System Interface) &#8212; \u044d\u0442\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 (API), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u0438 WebAssembly \u0432\u043d\u0435 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430  \u041a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u043e\u0441\u0442\u044c, \u043e\u043a\u043e\u043b\u043e\u043d\u0430\u0442\u0438\u0432\u043d\u0430\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c, \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c \u0438 \u0438\u0437\u043e\u043b\u044f\u0446\u0438\u044f \u0441\u0438\u043b\u044c\u043d\u0435\u0435, \u0447\u0435\u043c \u0443 Docker-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u0434\u0435\u043b\u0430\u0435\u0442 \u044d\u0442\u0443 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438 \u043a\u0440\u0430\u0439\u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0439 \u0432 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 (\u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0434\u043b\u044f \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u043e\u0432).\u0422\u0438\u043f\u0438\u0447\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u0441 \u0431\u0438\u0437\u043d\u0435\u0441-\u043b\u043e\u0433\u0438\u043a\u043e\u0439 \u043d\u0435 \u043e\u0431\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e CPU-bound \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f\u043c\u0438, \u0435\u043c\u0443 \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u043d\u0443\u0436\u043d\u044b \u0434\u0430\u043d\u043d\u044b\u0435, \u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0445\u043e\u0434\u0438\u0442\u044c \u043f\u043e \u0441\u0435\u0442\u0438. \u041f\u0440\u0438 \u0432\u044b\u0431\u043e\u0440\u0435 WASM \u0438\u0437 \u0437\u0430 \u0435\u0433\u043e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0431\u044b\u043b\u043e \u0431\u044b \u0441\u0442\u0440\u0430\u043d\u043d\u043e \u043e\u0431\u043e\u0439\u0442\u0438 \u0441\u0442\u043e\u0440\u043e\u043d\u043e\u0439 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044e compute \u043d\u0430\u0448\u0435\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430: \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439 \u043d\u0435\u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0449\u0438\u0439 I\/O. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f, \u043a\u0430\u043a\u0438\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043d\u0430\u043c \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u0430 WASM. \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u044f\u0432\u043d\u043e \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0438\u043c \u0437\u0430\u0434\u0430\u0447\u0443\u0412\u0430\u0436\u043d\u043e\u0435 \u0437\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u0435\u041f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0443 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044f \u0435\u0441\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043e\u0431 \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u0435 WASM &#8212; WASI, WIT, Component Model, guest \u0438 host, \u043b\u0438\u043d\u0435\u0439\u043d\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c, proposals \u0438 \u0442.\u0434. &#8212; \u043c\u043d\u043e\u0433\u0438\u0435 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u044b \u0432 \u0443\u0433\u043e\u0434\u0443 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u044b \u0438 \u0447\u0438\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 :). \u041f\u0438\u0448\u0438\u0442\u0435 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445, \u0447\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e.\u0417\u0430\u0447\u0435\u043c \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u0430 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0441\u0442\u044c\u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043c \u0441\u0435\u0440\u0432\u0435\u0440 \u0441 \u0431\u0438\u0437\u043d\u0435\u0441-\u043b\u043e\u0433\u0438\u043a\u043e\u0439, \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u044e\u0449\u0438\u0439 \u0438 \u043f\u043e\u0440\u043e\u0436\u0434\u0430\u044e\u0449\u0438\u0439 HTTP-\u0442\u0440\u0430\u0444\u0438\u043a. \u041f\u0440\u0438  \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u0438 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u043c\u0430\u0441\u0442\u0435\u0440 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u043e\u0433\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u043c\u0438. \u0414\u0430\u043d\u043d\u044b\u0435 \u0437\u0430\u0447\u0430\u0441\u0442\u0443\u044e \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b, \u0438\u043b\u0438 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442 &#8212; \u0438\u043c\u0435\u044e\u0442 \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u0441\u0432\u044f\u0437\u0438, \u043d\u043e \u0432 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u043e\u0445\u043e\u0434\u043e\u0432 \u0432\u043e \u0432\u043d\u0435\u0448\u043d\u0438\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043c\u043d\u043e\u0433\u043e, \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438 \u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0432\u043e\u0440\u043a\u0435\u0440\u043e\u0432 \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u044c \u043a \u0434\u0435\u0433\u0440\u0430\u0434\u0430\u0446\u0438\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b.WASM-\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0438\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d \u0438 \u0441\u0430\u043c \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u0442 \u0441\u0435\u0442\u0435\u0432\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432.\u00a0HTTP,\u00a0\u0434\u0438\u0441\u043a,\u00a0\u0442\u0430\u0439\u043c\u0435\u0440\u044b\u00a0&#8212;\u00a0\u0432\u0441\u0435 \u044d\u0442\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u00a0\u0445\u043e\u0441\u0442\u00a0(Wasmtime).\u00a0\u041d\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u0442\u0441\u044e\u0434\u0430 \u0438 \u0432\u044b\u0440\u0430\u0441\u0442\u0430\u0435\u0442 \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u044c \u0432 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0441\u0442\u0438.\u041f\u043e\u0447\u0435\u043c\u0443 WasmtimeWASM &#8212; \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043a\u0442\u043e-\u0442\u043e \u0434\u043e\u043b\u0436\u0435\u043d \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0442\u044c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438 \u0432\u044b\u0431\u043e\u0440\u0435 WASM \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0435\u0449\u0435 \u0438 \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u0440\u0430\u043d\u0442\u0430\u0439\u043c \u0434\u043b\u044f \u043d\u0435\u0433\u043e. \u042f \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0441\u044f \u043d\u0430 Wasmtime \u043f\u043e \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c:\u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0437\u0440\u0435\u043b\u044b\u0439 \u0440\u0430\u043d\u0442\u0430\u0439\u043c \u0441 \u043f\u043e\u043b\u043d\u043e\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 WASI\u0415\u0441\u0442\u044c \u0431\u0438\u043d\u0434\u0438\u043d\u0433\u0438 \u0435\u0441\u0442\u044c \u0434\u043b\u044f \u043c\u043d\u043e\u0433\u0438\u0445 \u044f\u0437\u044b\u043a\u043e\u0432 (wasmtime-go, wasmtime-py)\u041e\u0434\u043d\u0430\u043a\u043e, \u044d\u0442\u043e\u0442 \u0432\u043e\u043f\u0440\u043e\u0441 \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u0441\u0443\u0436\u0434\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e, \u043d\u043e \u044d\u0442\u043e \u043d\u0435 \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u0442\u0435\u043c\u044b \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438.\u041a\u043e\u0433\u0434\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0438\u043c\u043f\u043e\u0440\u0442\u00a0wasi:http\/outgoing-handler,\u00a0\u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u00a0\u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0445\u043e\u0441\u0442\u0443,\u00a0\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u0443\u0435\u0442 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439 HTTP-\u0437\u0430\u043f\u0440\u043e\u0441,\u00a0\u0430 \u043e\u0442\u0432\u0435\u0442 \u043f\u0440\u0438\u0434\u0435\u0442 \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f.\u00a0\u0412\u0441\u0451 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u0443\u044e \u0440\u0430\u0431\u043e\u0442\u0443\u00a0(\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440,\u00a0\u0432\u0442\u043e\u0440\u043e\u0439\u00a0HTTP-\u0432\u044b\u0437\u043e\u0432,\u00a0\u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0439 \u043e\u0442 \u043f\u0435\u0440\u0432\u043e\u0433\u043e).\u0412 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u00a0\u0437\u0430\u0441\u0442\u044b\u0432\u0430\u0435\u0442\u00a0\u043d\u0430 \u0438\u043c\u043f\u043e\u0440\u0442\u0435,\u00a0\u043f\u043e\u043a\u0430 \u0445\u043e\u0441\u0442 \u043d\u0435 \u0432\u0435\u0440\u043d\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u00a0(\u0441\u043b\u043e\u0432\u043e &#171;\u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442\u0441\u044f&#187; \u043d\u0435 \u0443\u043f\u043e\u0442\u0440\u0435\u0431\u043b\u044f\u044e \u0441\u043e\u0437\u043d\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0442.\u043a. \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442 \u0438\u043c\u0435\u043d\u043d\u043e \u0437\u0430\u0441\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u043d\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u0435 ABI, \u0430 \u043d\u0435 \u0431\u043b\u043e\u043a \u043f\u043e\u0442\u043e\u043a\u0430).\u00a0\u041e\u0434\u0438\u043d\u00a0\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u00a0=\u00a0\u043e\u0434\u043d\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u0432 \u043e\u0434\u0438\u043d\u00a0\u043c\u043e\u043c\u0435\u043d\u0442\u00a0(\u0438\u043d\u0432\u0430\u0440\u0438\u0430\u043d\u0442 2).\u00a0\u0427\u0442\u043e\u0431\u044b \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c 10 000 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 HTTP-\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439 \u043d\u0430\u00a0\u0441\u0435\u0440\u0432\u0435\u0440\u0435,\u00a0\u0445\u043e\u0441\u0442\u0443 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c 10 000 \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u043e\u0432 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430.\u00a0\u042d\u0442\u043e \u0443\u0431\u0438\u0432\u0430\u0435\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0439 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439.\u0410\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u0430 \u043f\u043e\u0442\u043e\u043c\u0443,\u00a0\u0447\u0442\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0436\u0434\u0451\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 I\/O \u043e\u0442 \u0445\u043e\u0441\u0442\u0430,\u00a0\u0438 \u044d\u0442\u043e \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c\u00a0\u043a\u043e\u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u043c,\u00a0\u0430 \u043d\u0435 \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0449\u0438\u043c.WASI 0.2: \u0438\u043c\u0438\u0442\u0430\u0446\u0438\u044f async\u0414\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0441\u0442\u0438 \u0432 WASI 0.2 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438:\u00a0pollable,\u00a0input-stream,\u00a0output-stream.\u00a0\u0422\u0438\u043f\u0438\u0447\u043d\u044b\u0435 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438:resource pollableresource input-streamresource output-streampoll(list&lt;pollable&gt;)subscribe()\u00a0\u043d\u0430\u00a0resource\u0438 \u0442.\u0434.\u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e \u0438\u0437 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0439\u00a0&#8212;\u00a0\u0432\u0441\u0435 \u0441\u0442\u0440\u043e\u0438\u0442\u0441\u044f \u0432\u043e\u043a\u0440\u0443\u0433 pollable-\u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0438 \u0440\u0443\u0447\u043d\u043e\u0433\u043e \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f.\u0412 0.2 \u044d\u043a\u0441\u043f\u043e\u0440\u0442 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439 \u043f\u043e \u043f\u0440\u0438\u0440\u043e\u0434\u0435:\u00a0\u0432\u044b\u0437\u0432\u0430\u0432\u00a0handle(request_1),\u00a0\u0445\u043e\u0441\u0442 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442\u00a0\u0432\u043e\u0439\u0442\u0438 \u0432 \u044d\u0442\u043e\u0442 \u0436\u0435 \u0438\u043d\u0441\u0442\u0430\u043d\u0441 \u0441\u00a0handle(request_2),\u00a0\u043f\u043e\u043a\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u044b\u0437\u043e\u0432 \u043d\u0435 \u0432\u0435\u0440\u043d\u0435\u0442\u0441\u044f.\u00a0\u041a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u044c \u0432\u043d\u0443\u0442\u0440\u0438\u00a0\u043e\u0434\u043d\u043e\u0433\u043e \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u0430 \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0435\u0440\u0435\u0437\u00a0poll()\u00a0\u0432\u043d\u0443\u0442\u0440\u0438 \u0433\u043e\u0441\u0442\u0435\u0432\u043e\u0433\u043e \u043a\u043e\u0434\u0430\u00a0+\u00a0\u0440\u0443\u0447\u043d\u043e\u0439 event loop \u0432 \u0433\u043e\u0441\u0442\u0435.\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432 \u0442\u043e\u043c,\u00a0\u0447\u0442\u043e \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0445 \u044f\u0437\u044b\u043a\u043e\u0432\u00a0(backend,\u00a0\u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f WASM-\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442)\u00a0\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0440\u0430\u0437\u043d\u044b\u0435 \u043c\u043e\u0434\u0435\u043b\u044f\u043c\u0438 concurrency\u00a0(OS Threads,\u00a0stackful coroutines,\u00a0stackless coroutines),\u00a0\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u0438 \u0438\u0434\u0435\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438 \u0438 \u0432 \u043f\u043b\u0430\u043d\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438.\u00a0\u0418\u0437\u00a0\u044d\u0442\u043e\u0433\u043e \u0441\u043b\u0435\u0434\u0443\u0435\u0442,\u00a0\u0447\u0442\u043e host-\u0441\u0442\u043e\u0440\u043e\u043d\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0437\u043d\u0430\u0442\u044c \u0438 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c concurrency-\u043c\u043e\u0434\u0435\u043b\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430\u00a0WASM-\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u00a0(\u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f runtime-specific \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u044b).\u00a0\u0418\u043d\u044b\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438,\u00a0\u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0432\u044b\u0440\u0430\u0437\u0438\u0442\u044c\u00a0\u0432 ABI:\u00a0async fn foo() -&gt; T\u00a0\u043c\u0435\u0436\u0434\u0443 Rust-\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u043c,\u00a0Go-\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u043c,\u00a0Java-\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u043c \u0438 \u0442.\u0434.\u00a0&#8212;\u00a0\u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u043d\u0442\u0430\u0439\u043c \u0438\u0437\u043e\u0431\u0440\u0435\u0442\u0430\u0435\u0442 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f.\u041a\u043e\u0440\u043e\u0442\u043a\u043e \u043e \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0445 \u043e\u0442\u043b\u0438\u0447\u0438\u044f\u0445\u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0434\u0432\u0435 \u043f\u0430\u0440\u0430\u0434\u0438\u0433\u043c\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u043e\u0440\u0443\u0442\u0438\u043d\u00a0&#8212;\u00a0stackful coroutines\u00a0(fiber,\u00a0green thread,\u00a0virtual\u00a0thread,\u00a0user-mode thread,\u00a0goroutine)\u00a0\u0438 stackless coroutines\u00a0(state machine,\u00a0coroutine).\u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u043e stackful coroutine \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0439 \u0441\u0442\u0435\u043a\u00a0\u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0438 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430,\u00a0\u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c\u044b\u0435 \u043f\u0440\u0438 \u043f\u0440\u0438\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435.\u00a0\u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u00a0\u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432 user space,\u00a0\u0431\u0435\u0437 \u0443\u0447\u0430\u0441\u0442\u0438\u044f \u044f\u0434\u0440\u0430 \u041e\u0421,\u00a0\u043a\u043e\u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e,\u00a0\u0442.\u0435.\u00a0\u043f\u0440\u0438\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441\u0430\u043c\u0438\u043c\u00a0\u043a\u043e\u0434\u043e\u043c,\u00a0\u0430 \u043d\u0435 \u0442\u0430\u0439\u043c\u0435\u0440\u043e\u043c \u044f\u0434\u0440\u0430.\u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u043e stackless coroutines \u0443 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043d\u0435\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0442\u0435\u043a\u0430.\u00a0\u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u00a0\u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u0442\u0435\u043b\u043e async-\u0444\u0443\u043d\u043a\u0446\u0438\u0438,\u00a0\u0432\u044b\u0434\u0435\u043b\u044f\u0435\u0442 \u0432\u0441\u0435\u00a0live-\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435\u00a0\u0447\u0435\u0440\u0435\u0437 \u043a\u0430\u0436\u0434\u0443\u044e suspend \u0442\u043e\u0447\u043a\u0443 \u0438\u00a0\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u00a0(state machine).\u00a0\u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u043b\u043b\u0431\u044d\u043a\u0438.\u0417\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u043d\u0430 \u044d\u0442\u0443 \u0442\u0435\u043c\u0443:https:\/\/habr.com\/ru\/articles\/850970\/https:\/\/habr.com\/ru\/companies\/oleg-bunin\/articles\/958566\/\u0415\u0441\u043b\u0438 \u0436\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0441\u043e\u0431\u0440\u0430\u043d \u0438\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0445,\u00a0\u043a\u0430\u0436\u0434\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0434\u043e\u043b\u0436\u0435\u043d \u0438\u043c\u0435\u0442\u044c \u0441\u0432\u043e\u0439 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439\u00a0event loop,\u00a0\u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442,\u00a0\u0447\u0442\u043e \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0446\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c\u0438 \u0431\u0443\u0434\u0435\u0442 \u0433\u043e\u043b\u043e\u0432\u043d\u043e\u0439 \u0431\u043e\u043b\u044c\u044e.\u0415\u0449\u0435 \u043e\u0434\u043d\u043e\u0439 \u0437\u0430\u0433\u0432\u043e\u0437\u0434\u043a\u043e\u0439 WASI 0.2 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e,\u00a0\u0447\u0442\u043e \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0432\u0441\u043f\u043b\u044b\u0432\u0430\u044e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0432\u044b\u0437\u043e\u0432\u0435\u00a0read \u0443\u00a0stream.\u00a0\u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442,\u00a0\u0447\u0442\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0430\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u0430 \u0443\u0437\u043d\u0430\u0435\u0442 \u043e\u0431 \u0438\u0441\u0445\u043e\u0434\u0435,\u00a0\u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442 \u0447\u0438\u0442\u0430\u0442\u044c.\u00a0\u0415\u0441\u043b\u0438\u00a0\u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044c \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0440\u0430\u043d\u044c\u0448\u0435,\u00a0\u043e\u043d \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043e\u0442\u043b\u0438\u0447\u0438\u0442\u044c \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u0435\u00a0stream\u00a0\u043e\u0442 \u043e\u0448\u0438\u0431\u043a\u0438.\u00a0\u042d\u0442\u043e\u00a0readiness-\u043c\u043e\u0434\u0435\u043b\u044c,\u00a0\u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0433\u043e\u0442\u043e\u0432\u043d\u043e\u0441\u0442\u044c,\u00a0\u0430 \u043d\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435.\u00a0pollable\u00a0\u0441\u0438\u0433\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u00a0&#171;\u043c\u043e\u0436\u043d\u043e\u00a0\u0447\u0438\u0442\u0430\u0442\u044c&#187;,\u00a0\u0430 \u043d\u0435\u00a0&#171;\u0432\u043e\u0442 \u0442\u0435\u0431\u0435 \u0434\u0430\u043d\u043d\u044b\u0435&#187;.WASI 0.3\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0438\u0434\u0435\u044f Async Component Model:\u00a0\u0434\u043e \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u044f native async \u0432 Component Model \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0441\u0442\u044c \u0431\u044b\u043b\u0430\u00a0\u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430 \u0438\u043b\u0438 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e runtime.\u00a0\u041a\u0430\u0436\u0434\u0430\u044f \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0440\u0435\u0448\u0430\u043b\u0430 \u0437\u0430\u0434\u0430\u0447\u0443 \u043f\u043e-\u0441\u0432\u043e\u0435\u043c\u0443.\u00a0WASI\u00a00.3 \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u0442 async \u043d\u0430 \u0443\u0440\u043e\u0432\u0435\u043d\u044c Component Model.\u00a0\u0422\u0435\u043f\u0435\u0440\u044c WIT \u043c\u043e\u0436\u0435\u0442 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u00a0\u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e:\u00a0foo: async func(s: string) -&gt; string\u00a0\u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043b\u044e\u0431\u043e\u0439 runtime \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442,\u00a0\u0447\u0442\u043e \u0432\u044b\u0437\u043e\u0432\u00a0foo()\u00a0\u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c\u0441\u044f \u043f\u043e\u0437\u0436\u0435 \u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430.\u00a0\u042d\u0442\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e\u00a0\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u044c\u044e ABI,\u00a0\u0430 \u043d\u0435 \u0447\u0430\u0441\u0442\u044c\u044e \u044f\u0437\u044b\u043a\u0430.\u0420\u0430\u0431\u043e\u0442\u0430,\u00a0\u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0432 WASI 0.2 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b\u0438 pollables,\u00a0input-streams \u0438 output-streams,\u00a0\u0442\u0435\u043f\u0435\u0440\u044c\u00a0\u0432\u0445\u043e\u0434\u0438\u0442 \u0432 canonical ABI,\u00a0\u0433\u0434\u0435 Component Model \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u044d\u0442\u0438 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u044b \u043d\u0430\u0442\u0438\u0432\u043d\u043e.\u00a0\u041d\u043e\u0432\u044b\u0435\u00a0async-\u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u044b \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u044c\u044e canonical ABI Component Model,\u00a0\u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430\u043c bindings\u00a0\u0432\u044b\u0434\u0430\u0432\u0430\u0442\u044c \u0438\u0434\u0438\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u044b\u0435 async-bindings \u0434\u043b\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u044f\u0437\u044b\u043a\u0430.\u0412 WASI 0.2 \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0443 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u0441\u044f \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 event loop.\u00a0\u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u043b\u043e,\u00a0\u0447\u0442\u043e\u00a0\u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043d\u0430 host,\u00a0\u043d\u043e \u044d\u0442\u0438 event loops \u043d\u0435 \u0438\u043c\u0435\u043b\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u00a0\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439.\u00a0\u0415\u0441\u043b\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b streaming \u0438\u043b\u0438 async API,\u00a0\u0435\u0433\u043e \u043d\u0435\u043b\u044c\u0437\u044f \u0431\u044b\u043b\u043e\u00a0\u0441\u043a\u043e\u043c\u043f\u043e\u043d\u043e\u0432\u0430\u0442\u044c \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c\u0438.WASI 0.3 \u0443\u0441\u0442\u0440\u043e\u0435\u043d \u0442\u0430\u043a,\u00a0\u0447\u0442\u043e \u0442\u0435\u043f\u0435\u0440\u044c host \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c event loop,\u00a0\u043e\u0431\u0449\u0438\u043c \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432.\u00a0\u042d\u0442\u043e \u0441\u0442\u0430\u043b\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u043c \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044e\u00a0stream&lt;T&gt;,\u00a0future&lt;T&gt;\u00a0\u0438\u00a0async\u00a0\u043a\u0430\u043a first-class\u00a0\u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 canonical ABI.\u0412 WASI 0.2 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u0438\u0441\u0435\u0434\u0430\u043d\u0438\u044f,\u00a0\u0447\u0442\u043e\u0431\u044b \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c async \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c,\u00a0\u043d\u043e \u0442\u0435\u043f\u0435\u0440\u044c async \u043d\u0430\u0442\u0438\u0432\u0435\u043d \u0434\u043b\u044f component model,\u00a0\u0430 \u0437\u043d\u0430\u0447\u0438\u0442 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0440\u0430\u0436\u0430\u0442\u044c \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u044d\u0440\u0433\u043e\u043d\u043e\u043c\u0438\u0447\u043d\u0435\u0435.\u00a0\u041e\u0431\u0437\u043e\u0440\u00a0\u043f\u0430\u0442\u0442\u0435\u0440\u043d\u043e\u0432 \u0432 WASI 0.2 \u0438 \u0442\u043e\u0433\u043e,\u00a0\u043a\u0430\u043a \u044d\u0442\u0438 \u0436\u0435 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u044b \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u0432 0.3 \u0441 Component Model async:WASI 0.2WASI 0.3resource pollablefuture&lt;T&gt;resource input-streamstream&lt;u8&gt;resource output-streamstream&lt;u8&gt;\u00a0(\u0438 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0437\u0430\u043f\u0438\u0441\u0438)poll(list&lt;pollable&gt;)await\u00a0\u043d\u0430\u00a0future\u00a0(\u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f runtime \u044f\u0437\u044b\u043a\u0430, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d WASM)subscribe()\u00a0\u043d\u0430 resource\u0432\u043e\u0437\u0432\u0440\u0430\u0442\u00a0future&lt;&gt;\u00a0\u0438\u0437 \u0432\u044b\u0437\u043e\u0432\u0430start-foo\u00a0\/\u00a0finish-foofoo: async func()\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439 WASI 0.2 \u0431\u044b\u043b\u043e \u0442\u043e,\u00a0\u0447\u0442\u043e \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0432\u0441\u043f\u043b\u044b\u0432\u0430\u043b\u0438 \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0432\u044b\u0437\u043e\u0432\u0435\u00a0read\u00a0\u0443\u00a0stream.\u00a0\u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u043b\u043e,\u00a0\u0447\u0442\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0430\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u0430 \u0443\u0437\u043d\u0430\u0432\u0430\u043b\u0430 \u043e\u0431 \u0438\u0441\u0445\u043e\u0434\u0435,\u00a0\u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u043b\u0430 \u0447\u0438\u0442\u0430\u0442\u044c.\u00a0\u0415\u0441\u043b\u0438\u00a0\u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044c \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u043b\u0441\u044f \u0440\u0430\u043d\u044c\u0448\u0435,\u00a0\u043e\u043d \u043d\u0435 \u043c\u043e\u0433 \u043e\u0442\u043b\u0438\u0447\u0438\u0442\u044c \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u0435\u00a0stream\u00a0\u043e\u0442 \u043e\u0448\u0438\u0431\u043a\u0438.\u00a0\u0412 WASI 0.3 streams\u00a0\u0442\u0435\u043f\u0435\u0440\u044c \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439\u00a0future,\u00a0\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0435\u0437\u043e\u043b\u0432\u0438\u0442\u0441\u044f \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u043e\u0442 \u0442\u043e\u0433\u043e,\u00a0\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u044b\u043b\u043e\u00a0\u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u043e \u0438\u0437\u00a0stream,\u00a0\u0440\u0435\u0448\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0441\u0442\u0430\u0442\u0443\u0441\u0430\u00a0stream\u00a0\u0438\u0437 WASI 0.2:\/\/ WASI 0.2read-via-stream: func() -&gt; result&lt;input-stream, error-code&gt;;\/\/ WASI 0.3read-via-stream: func() -&gt; tuple&lt;stream&lt;u8&gt;, future&lt;result&lt;_, error-code&gt;&gt;&gt;;\u041a\u0438\u043b\u043b\u0435\u0440-\u0444\u0438\u0447\u0430 component model \u0432 \u0442\u043e\u043c,\u00a0\u0447\u0442\u043e \u043e\u043d \u0434\u0435\u043b\u0430\u0435\u0442 \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u044b\u043c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 bindings \u043a\u00a0\u0434\u0440\u0443\u0433\u0438\u043c \u044f\u0437\u044b\u043a\u0430\u043c \u0438 \u0438\u0437 \u043d\u0438\u0445.\u00a0\u0421 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c first-class\u00a0async\u00a0\u044d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442,\u00a0\u0447\u0442\u043e \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u044b\u00a0guest-bindings \u043c\u043e\u0433\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f async-bindings,\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u043d\u0430\u0442\u0438\u0432\u043d\u043e \u0432\u00a0\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u043c \u044f\u0437\u044b\u043a\u0435.\u0420\u0430\u0437\u043d\u044b\u0435 \u044f\u0437\u044b\u043a\u0438 \u043e\u043f\u0438\u0440\u0430\u044e\u0442\u0441\u044f \u043d\u0430 stackless \u0438\u043b\u0438 stackful coroutines.\u00a0Async ABI\u00a0Component Model \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0441\u044f \u0442\u0430\u043a,\u00a0\u0447\u0442\u043e\u0431\u044b \u0441\u043e\u0432\u043c\u0435\u0449\u0430\u0442\u044c \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043e\u0431\u0430 \u043f\u043e\u0434\u0445\u043e\u0434\u0430.\u041c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u044b \u043f\u0440\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 WASI 0.3Fiber-like stack switching \u0431\u0435\u0437 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 core wasm proposal: Async ABI \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 fiber (stackful coroutine). \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u0445\u00a0core wasm stack-switching proposal, \u043d\u043e \u043d\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0432 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0435. \u0422\u043e \u0435\u0441\u0442\u044c Wasmtime \u043d\u0435 \u043d\u0443\u0436\u0435\u043d core wasm typed continuations, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0430\u0442\u044c async, \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0447\u0435\u0440\u0435\u0437 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u0441\u0442\u0435\u043a\u0438 (Wasmtime \u0442\u0430\u043a \u0438 \u0434\u0435\u043b\u0430\u0435\u0442, \u0447\u0443\u0442\u044c \u043d\u0438\u0436\u0435 \u043e\u0431 \u044d\u0442\u043e\u043c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435).\u041d\u0438\u043a\u0430\u043a\u043e\u0439 \u0440\u0430\u0441\u043a\u0440\u0430\u0441\u043a\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0439:\u00a0async\u00a0\u0432 JavaScript\/Python\/Kotlin \u0437\u0430\u0440\u0430\u0436\u0430\u0435\u0442 \u0432\u0441\u044e \u0446\u0435\u043f\u043e\u0447\u043a\u0443 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439. Component Model \u043e\u0442\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b: \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0446\u0432\u0435\u0442\u0430, sync- \u0438 async-\u0444\u0443\u043d\u043a\u0446\u0438\u0438&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-485994","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/485994","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=485994"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/485994\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=485994"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=485994"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=485994"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}