WASI 0.3.0 ოფიციალურად გამოვიდა. განახლება WebAssembly-ის განვითარებაში მნიშვნელოვან ეტაპს წარმოადგენს, რადგან ის კომპონენტების მოდელს ასინქრონულ პრიმიტივებზე აფუძნებს. ეს ცვლილება დეველოპერებს საშუალებას აძლევს, უფრო ერგონომიულად და ეფექტურად იმუშაონ.

WASI 0.2-ში ასინქრონული მუშაობისთვის გარკვეული სირთულეების გადალახვა იყო საჭირო, თუმცა 0.3 ვერსიაში ეს პროცესი გამარტივდა. ახალი სტანდარტი დეველოპერებს აძლევს საშუალებას, იგივე ფუნქციონალი ბევრად უფრო მარტივი სტრუქტურით განახორციელონ.

wasi:cli და ფაილური სისტემა

wasi:cli-ის სტრუქტურა ძირითადად უცვლელი დარჩა, თუმცა stdio-ს მიმართულებით მნიშვნელოვანი ცვლილებაა. თუ ადრე მონაცემთა ნაკადს იმპერატიულად წერდით, ახლა თქვენ გადასცემთ stream<u8>-ს და იღებთ future-ს, რომელიც ოპერაციის დასრულებისას ააქტიურდება.

ანალოგიური მიდგომაა ფაილურ სისტემაშიც: ნაკადური კითხვა-წერა ახლა stream-ისა და future-ის კომბინაციით მუშაობს, ხოლო დირექტორიების გადათვლა რესურსზე დაფუძნებული იტერატორის ნაცვლად, პირდაპირ ნაკადად (stream) გარდაიქმნა.

ქსელური კავშირები და სოკეტები

wasi:sockets-ში რადიკალური ცვლილებებია. ქსელური წვდომის სპეციალური რესურსი მთლიანად გაუქმდა. ნაცვლად იმისა, რომ ქსელური წვდომა თითოეულ ფუნქციაში გაგვეტარებინა, ის ახლა world imports-ის მეშვეობით ხდება.

TCP და UDP სოკეტების მართვა ბევრად უფრო გამარტივდა. ადრე არსებული შუალედური მდგომარეობები, როგორიცაა connect-in-progress, აღარ არსებობს. ყველაფერი ჩანაცვლდა მარტივი ასინქრონული ფუნქციებით, რაც კოდს უფრო სუფთას და ადვილად წასაკითხს ხდის.

wasi:http და ახალი არქიტექტურა

wasi:http-ში რესურსების რაოდენობა რვადან ორამდე შემცირდა. ეს ყველაზე თვალსაჩინო ცვლილებაა. ახლა არსებობს მხოლოდ request და response, რაც ამარტივებს მოთხოვნებისა და პასუხების მართვას.

WASI 0.2 (wasi:io)WASI 0.3 (Component Model)
resource pollablefuture
resource input-streamstream
resource output-streamstream (written-to direction)
poll(list)await on a future (runtime-handled)
subscribe() on resourcereturn a future from the call
start-foo / finish-foofoo: async func(...)

ასევე, დაემატა ახალი worlds middleware-ისთვის. ეს ნიშნავს, რომ კომპონენტები, რომლებიც მოთხოვნის გზაზე დგანან, პირველხარისხოვან მხარდაჭერას იღებენ. handler-ი ახლა უკვე ასინქრონული ფუნქციაა, რაც WASI 0.2-ის შეზღუდვებს აუქმებს.

სახელების სტანდარტიზაცია

wasi:clocks-ის ცვლილებები ძირითადად სახელწოდებებს ეხება. wall-clock გადაკეთდა system-clock-ად, ხოლო datetime — instant-ად. ეს ცვლილება ემსახურება სხვა ეკოსისტემებთან, მათ შორის POSIX-თან და Rust-ის სტანდარტებთან თავსებადობას.