WASI 0.3-ის ოფიციალური რელიზი შედგა, რაც WebAssembly-ის განვითარების ისტორიაში მნიშვნელოვან ეტაპს წარმოადგენს. ამიერიდან, ასინქრონული პროგრამირება (async) ამ ტექნოლოგიის განუყოფელი და „ნეითივ“ ნაწილი ხდება. WASI-ის ქვეგანყოფილებამ უკვე დაამტკიცა ახალი სპეციფიკაცია, რომელიც კომპონენტების მოდელს ასინქრონულ პრიმიტივებზე აფუძნებს.
რა შეიცვალა WASI 0.3-ში?
წინა ვერსიაში, WASI 0.2-ში, დეველოპერებს უწევდათ ისეთი კომპლექსური მექანიზმების გამოყენება, როგორიცაა wasi:io (pollables, input/output streams). ახლა ეს ფუნქციები პირდაპირ კომპონენტების მოდელის კანონიკურ ABI-შია ინტეგრირებული. შედეგად, კოდი გახდა უფრო მარტივი, გასაგები და ადვილად წაკითხვადი.
მთავარი სიახლე ისაა, რომ ჰოსტი ახლა სრულად აკონტროლებს საერთო „ივენთ-ლუფს“ (event loop), რომელსაც ყველა კომპონენტი იზიარებს. ეს გამორიცხავს კონფლიქტებს, რომლებიც ადრე სხვადასხვა კომპონენტის ასინქრონულ რანთაიმებს შორის წარმოიქმნებოდა.
ასინქრონული მოდელის უპირატესობები
- სრულფასოვანი ასინქრონულობა: stream<T> და future<T> ახლა პირველი კლასის მოქალაქეები არიან, რაც მონაცემთა გადაცემას ბევრად ეფექტურს ხდის.
- შესრულებაზე ორიენტირებული: ახალი მოდელი ემყარება „დასრულებაზე დაფუძნებულ“ (completion-based) მიდგომას, რაც Linux-ის io_uring-ის მსგავსად, მაღალ წარმადობას უზრუნველყოფს.
- სტრიმების სტაბილურობა: ახალი ვერსია აგვარებს შეცდომების აღმოჩენის პრობლემას, რაც წინა ვერსიაში სტრიმების ნაადრევად შეწყვეტისას წარმოიქმნებოდა.
გავლენა პროგრამირების ენებზე
WASI 0.3-ის წყალობით, ენების ბინდინგების გენერატორებს შეუძლიათ შექმნან „ნეითივ“ ასინქრონული ბინდინგები. ეს ეხება ისეთ პოპულარულ ენებს, როგორებიცაა Rust, JavaScript, Python, C# და Go. მაგალითად, Go-ს შემთხვევაში, რანთაიმს შეუძლია სინქრონული გამოძახებები ასინქრონულად გადააქციოს ვირტუალური ძაფების (goroutines) გამოყენებით.
მიკროსერვისების რევოლუცია
განსაკუთრებული ყურადღება დაეთმო wasi:http ინტერფეისს. ახალი „middleware“ სამყარო საშუალებას იძლევა, კომპონენტები ერთმანეთს პირდაპირ, ქსელის გავლის გარეშე დაუკავშირდნენ. ეს პროცესი, რომელსაც „service chaining“-ს უწოდებენ, მიკროსერვისებს შორის კომუნიკაციის დროს მილიწამებიდან ნანოწამებამდე ამცირებს — რაც ექვსი რიგითი სიდიდით უკეთესი შედეგია.
| WASI 0.2 (wasi:io) | WASI 0.3 (Component Model) |
|---|---|
| resource pollable | future |
| resource input-stream | stream |
| resource output-stream | stream (written-to direction) |
| poll(list) | await on a future (runtime-handled) |
| subscribe() on resource | return a future from the call |
| start-foo / finish-foo | foo: async func(...) |
ამჟამად Wasmtime 46 უკვე უზრუნველყოფს WASI 0.3-ის სრულ მხარდაჭერას. დეველოპერებს შეუძლიათ დაიწყონ ახალი სტანდარტის გამოყენება და თავიანთი პროექტების ადაპტირება, რადგან სპეციფიკაცია უკვე სტაბილურია და მისი მომავალი ვერსიები თავსებადობას შეინარჩუნებს.



დისკუსია
0 კომენტარი
ჯერ კომენტარი არ არის — იყავი პირველი.