Вышел WASI 0.3.0: нативная асинхронность поверх Component Model

Вышел WASI 0.3.0: нативная асинхронность поверх Component Model

Релиз WASI 0.3.0 официально закрепляет асинхронность как родную фичу WebAssembly Components, избавляя от обходных приёмов прошлых версий. Там, где WASI 0.2 требовала ресурсов pollable и input-stream, теперь напрямую используются future и stream. Пары функций start/finish схлопываются в одно объявление async func, например start-connect/finish-connect превращается в connect: async func. Из wasi:sockets полностью убрали ресурс network: доступ к сети теперь выдаётся через импорты мира, а не протаскивается через аргументы функций.

Изменения затронули все модули. В CLI переработан stdio через стримы и future, в sockets унифицированы коды ошибок TCP/UDP, в filesystem потоковые операции и обход директорий переведены на пары stream-плюс-future, а в clocks упорядочили терминологию (wall-clock стал system-clock). Особенно заметен HTTP: новые миры service и middleware позволяют сцеплять сервисы и компоновать компоненты напрямую вместо сетевых вызовов. Это смещает акцент на эргономику и производительность: микросервисы могут собираться внутри процесса, а не общаться по сети, что потенциально срезает задержки с миллисекунд до наносекунд.

Ключевые факты

  • async стал нативной возможностью компонентов WebAssembly
  • future и stream вместо pollable и input-stream из WASI 0.2
  • Пары start/finish схлопнуты в одно объявление async func
  • Ресурс network убран из wasi:sockets; доступ через импорты мира
  • HTTP-миры service и middleware позволяют компоновать компоненты без сети