اصل ماجرا

WASI 0.3 رسماً تصویب شد و async را به‌صورت بومی به مدل مؤلفه‌های WebAssembly افزود. اکنون زمان‌بندی توسط runtime میزبانی می‌شود و تمام مؤلفه‌ها یک حلقهٔ رویداد مشترک استفاده می‌کنند. این تغییرات باعث ساده‌سازی APIها و تسهیل ترکیب میکروسرویس‌ها در یک پردازش می‌شود.

متن کامل ترجمه‌شده

WASI 0.3 Launched WASI 0.3 رسمی است و async در حال حاضر به اجزای WebAssembly متولد شده است. WASI Subgroup رای داد تا WASI 0.3.0 را تصدیق کند، WASI را به اجزای async از مدل اجزای WebAssembly متصل کند. مشخصات 0.3.0 در حال حاضر ثابت است و پشتیبانی از زمان اجرا و زنجیره ابزار در حال فرود آمدن است. کار که wasi:io در WASI 0.2 برای انجام آن استفاده می کرد (پولدارها، جریان های input، جریان های output) در حال حاضر بخشی از ABI کانونیک است، جایی که مدل اجزای در حال حاضر این اجزای را متصل ارائه می کند. به عنوان یک تصور از این، اکثر تغییرات از WASI 0.2 به 0.3 به طور کامل میکانی هستند و به طور قابل توجهی امضایاتیاین بدان معنی است که قطعات انفرادی می توانند در یک میزبان اجرا شوند، اما هیچ راهی برای این قطعات اتفاقاتی برای هماهنگی با یکدیگر وجود ندارد. اگر یک قطعه از API های پخش یا غیر هماهنگی استفاده می کند، آن را نمی توان با هر قطعات دیگر ترکیب کرد. WASI 0.3 باعث می شود که میزبان در حال حاضر مسئول مدیریت یک قطعه اتفاقاتی است که توسط همه قطعات به اشتراک گذاشته می شود. این با اضافه کردن stream URL_0, future URL_1, و async به عنوان ساختار کلاس اول به ABI کانونیک: - stream URL_2\and- future URL_3 عملکرد مانند نوع منابع: هر یک یک یک دستوری مالکیت، عبور یک مرز از قطعات انتقال مالکیت از کالر به callee. بر خلاف انواع منابع، آنها نمی توانند قرض شده اند. - زمان اجرا، نه هر قطعه، هدایتنویسنده ای که این ارزش را ارائه می دهد ممکن است میزبان، بخشی دیگر، یا حتی همان بخشی که پایان خواندن را دارد. - مدل async بر اساس تکمیل است، نه بر اساس آماده بودن. این شبیه به Linux io_uringand Windows IOCP/IoRingAPIs بسیار موثر است. API Anepoll/kqueue-style آماده سازی می تواند بر روی این برای برنامه هایی که نیاز به سازگاری دارند، تجزیه شود. - اجزای صادرات و واردات به طور مستقیم کارهای async. Gone سه مرحله-start-foo/finish-foo/subscribed از WASI 0.2. تغییرات در رابط های WASI بیشتر تغییرات در رابط های 0.3 به طور کامل میکانی هستند. WASI 0.2 مجبور به انجام برخی از آکروباتیک برای انجام کار asyncc، اما در حال حاضر که به عنوان متولد شده به مدل2 این بود که در هر تماس خواندن در جریان اشتباهات پایانی را در خط قرار داد. این بدان معنی بود که خوانندگان تنها نتیجه را یاد می گرفتند اگر خواندن را ادامه می دادند. اگر خوانندگان زودتر متوقف شدند آنها نمی توانستند بین یک جریان بسته و یک خطا را جدا کنند. در WASI 0.3 جریان ها در حال حاضر یک آینده اضافی را بازمی گردانند که به طور مستقل از چه مقدار از جریان مصرف می شود حل می شود، حل مشکل وضعیت جریان WASI 0.2: // WASI 0.2 read-via-stream: func() -> نتیجه URL_0; // WASI 0.3 read-via-stream: func() -> tuple URL_1; آینده URL_2>>; تغییرات به ارتباطات زبان یکی از قدرت های فوق العاده مدل اجزای است که آن را برای ایجاد ارتباطات به و از زبان های دیگر ساده می سازد. با اضافه شدن از کلاس اول asاین رابط یک فعالیت را نشان می دهد، دستکاری، که با برچسب async است: دستکاری رابط { دستکاری: async func(پرسش: درخواست) -> result�URL_0;} برای اجرای یک سرور HTTP در Rust با این، ما می توانیم از کات wit-bindgen استفاده کنیم. این کارگردانی رابط را به یک ویژگی مهمان نشان می دهد و دستکاری را نشان می دهد: async func به یک دستکاری async fn: استفاده wasi::http::types::{ErrorCode, Request, Response}; impl Guest for Component { async fn handle(پرسش: درخواست) -> Result URL_1 � { // … } } پشتیبانی Async برای ژنراتورهای دستکاری مهمان نیز در حال پیشرفت برای بسیاری از زبان ها از جمله Python، JavaScript، C#، و C. همهبه جای نشان دادن عملکرد های آسیانک و غیر آسیانک، زمان اجرا Go می تواند تماس های آسیانک را به تماس های آسیانک تبدیل کند و از طریق سیم های مجازی به نام “goroutines” اجرا می کند. با استفاده از componentize-go ما می توانیم یک سرور HTTP را با صادر کردن یک Handle func اجرا کنیم. این امکان را می دهد که بدن ها را از طریق goroutines که تماس های بلاک را انجام می دهند پخش کند. زمان اجرا سپس goroutine را در مرز ABI پارک می کند و هنگامی که جریان آماده است، آن را ادامه می دهد، بدون اینکه باقی برنامه را بلاک کند: بسته export_wasi_http_handler واردات ( . “wit_component/wasi_http_types” . “go.bytecodealliance.org/pkg/wit/types” )FieldsFromList([]Tuple2[string, []byte]{ {F0: “content-type”, F1: []byte(“text/plain”)}, }).Ok(), Some(rx), // 5. Pass the receiver as the HTTP body trailersFuture(), ) send.Drop() return Ok*Response, ErrorCode // ← 6. Return the HTTP response } ) اکنون که WASI 0.3 با پشتیبانی از مدل اجزای async راه اندازی شده است، زنجیره های ابزار مهمان و runtimes میزبان را آزاد خواهد کرد تا شروع به ثابت کردن همه این ها. در ماه های آینده و شما می توانید انتظار پروژه های فردی برای اعلام پشتیبانی برای WASI 0.3 را شروع کنید.*/ } // هنگامی که توسط ژنراتورهای اتصال مهمان استفاده می شود، توانایی انجام تماس های HTTP از طریق واردات “مستخدم” را بدهید و // درخواست های HTTP وارد شده را از طریق صادرات “مستخدم” مدیریت کنید. خدمات جهان { مشتری واردات؛ پردازنده صادرات؛ } // دنیای Middleware یک سوپر مجموعه از جهان خدمات است. دنیای Middleware { شامل خدمات؛ // ← انجام هر کاری که “خدمت” می تواند انجام دهد. مدیریت واردات؛ // ← اما همچنین درخواست های وارد شده را به یک پردازنده دیگر انتقال می دهد. } دنیای Middleware جایگزین دنیای پروکسی 0.2-era است و برای تعریف پردازنده های HTTP استفاده می شود که می توانند درخواست ها را به سایر پردازنده ها انتقال دهند. چیزی که در WASI 0.3 جدید است این است که این اکنون می تواند زنجیره خدمات را انجام دهد: یکما خوشحالیم که WASI 0.3 منتشر شده است. این به این معنی است که: - Spec تایید شده: WASI 0.3 رای WASI Subgroup را تصویب کرده است. این یک نسخه ثابت است، که به این معنی است که برنامه هایی که امروز برای آن جمع آوری می کنید تضمین می شوند تا در آینده کار کنند. حتی اگر ما هر دو ماه، به عنوان مثال 0.3.x. - Wasmtime: Wasmtime 45 امروز آخرین کاندیدای نسخه را اجرا می کند و Wasmtime 46 WASI 0.3.0 را با مدل قطعه Async به طور استاندارد ارسال می کند. - Jco نزدیک: JCO، ابزار چت مدل قطعه JavaScript، همچنین تمام WASI 0.3 را پشتیبانی می کند.بهترین مکان برای شروع با WebAssembly Components کتاب Wasm Component Model است. برای یک لیست کامل از تغییرات، یادداشت های نسخه WASI 0.3.0 را ببینید. اگر شما می پرسید چه چیزی برای WebAssembly Components و WASI بعدی است، ببینید راه به مدل Component 1.0. WASI 0.3 کار یک جامعه است. تشکر از همه در WASI Subgroup که طراحی، بحث و اصلاح این نسخه، به زمان اجرا و نگهداری زنجیره ابزار که اجرای آن را ایجاد کرده است، و به هر مشارکت کننده که یک مشکل، بررسی یک PR، و یا سوال سختی که ساختن مشخصات بهتر است. و تشکر از کاربران ساختن در WASI؛ اجزای شما، بازخورد خود را، و تمایل خود را به آزاد کردن کاندیداها به شکل همان چیزی که فرستاده شده است. مدل Component متولد شده

چرا مهمه؟

WASI 0.3 ساختار async را از لایهٔ واسط به مدل مؤلفه منتقل کرد، بنابراین دیگر نیاز به حلقهٔ رویداد جداگانه برای هر مؤلفه نیست. این تغییر برای توسعه‌دهندگان وب‌اسمبلی، سازندگان ابزار زنجیره‌ای و تیم‌های میکروسرویس که می‌خواهند latency را به نانوثانیه برسانند، اثرگذار است. خواننده باید به این خبر اهمیت بده چون امکان ساخت برنامه‌های سریع‌تر، مقیاس‌پذیرتر و با نگهداری ساده‌تر را فراهم می‌کند.

به درد کی می‌خوره؟

• توسعه‌دهندگان وب‌اسمبلی • مهندسان ابزار زنجیره‌ای • تیم‌های میکروسرویس • مدیران فنی زیرساخت

تو عمل چی کار کنیم؟

با دانستن این به‌روزرسانی می‌توانید پروژه‌های WASI خود را به نسخهٔ 0.3 ارتقا دهید و از APIهای async بومی استفاده کنید. این کار زمان اجرای ترکیب مؤلفه‌ها را به‌طور چشمگیری کاهش می‌دهد و نیاز به کدنویسی پیچیدهٔ حلقهٔ رویداد را از بین می‌برد.

نظر Blue IT News

به‌روز کردن به WASI 0.3، گامی اساسی برای پذیرش گستردهٔ WebAssembly در محیط‌های سرویس‌محور است؛ توصیه می‌کنیم زودتر به‌روزرسانی کنید تا از مزایای latency نزدیک به صفر بهره‌مند شوید.

این صفحه ترجمه و تفسیر کاملی از گزارش اصلی Bytecodealliance است که توسط تیم تحریریه بلو آی تی نیوز به فارسی ترجمه و تحلیل شده. برای مشاهده نسخه اصلی، به منبع مراجعه کنید.