WASI 0.3.0 chính thức ra mắt: Hỗ trợ bất đồng bộ tích hợp sẵn trên WebAssembly Components

Công nghệ12 tháng 6, 2026·3 phút đọc

WASI 0.3.0 đã được phê chuẩn chính thức, đánh dấu bước tiến lớn bằng cách đưa các nguyên thủy bất đồng bộ (async primitives) vào cốt lõi của WebAssembly Component Model. Bản cập nhật này giúp mã nguồn trở nên gọn gàng hơn, đơn giản hóa các thao tác I/O, mạng và hệ thống tệp thông qua việc thay thế các mẫu start/finish cũ bằng các hàm async trực tiếp.

WASI 0.3.0 chính thức ra mắt: Hỗ trợ bất đồng bộ tích hợp sẵn trên WebAssembly Components

Nhóm công tác WASI (WebAssembly System Interface) đã chính thức phê chuẩn phiên bản WASI 0.3.0, một bản cập nhật quan trọng tái định hình cách thức tương tác với hệ thống trong môi trường WebAssembly. Điểm nhấn lớn nhất của lần ra mắt này là việc tích hợp sẵn tính năng bất đồng bộ (async) vào WebAssembly Component Model, thay thế cho các cơ chế giả lập phức tạp trước đây.

Điều này mang lại sự thay đổi mang tính cơ bản nhưng giúp mã nguồn trở nên "thân thiện" (ergonomic) và dễ bảo trì hơn rất nhiều so với phiên bản 0.2. Dưới đây là những thay đổi chính mà các nhà phát triển cần lưu ý.

wasi:io và wasi:cli: Tối ưu hóa luồng dữ liệu

Trong WASI 0.3, các khái niệm về pollableinput-stream/output-stream riêng biệt đã được thống nhất và đơn giản hóa.

  • Từ pollable sang future: Thay vì phải thăm dò (poll) danh sách các tài nguyên, giờ đây hệ thống sử dụng future được xử lý bởi runtime.
  • Luồng (Stream) thống nhất: Cả đầu vào và đầu ra đều sử dụng kiểu stream. Đặc biệt, stdout trong WASI 0.3 yêu cầu bạn truyền một luồng dữ liệu vào và nhận về một future thay vì được cấp một output-stream để ghi dữ liệu theo mệnh lệnh như trước.

wasi:sockets: Loại bỏ tài nguyên mạng

Cách tiếp cận với mạng (network) đã được đơn giản hóa đáng kể.

  • Xóa bỏ Network Resource: Trong WASI 0.2, quyền truy cập mạng là một tài nguyên (capability) phải được truyền qua từng lời gọi hàm. WASI 0.3 đã loại bỏ hoàn toàn điều này; quyền truy cập mạng giờ được cấp thông qua các nhập khẩu (imports) của thế giới (world).
  • Hàm Async trực tiếp: Cặp mẫu start-foo/finish-foo (ví dụ: start-connectfinish-connect) đã được thay thế bằng các hàm async func duy nhất như connect, bind, hay listen. Điều này giúp mã nguồn rõ ràng và dễ đọc hơn, loại bỏ các trạng thái trung gian phức tạp.

wasi:http: Tái cấu trúc mạnh mẽ

Đây là thay đổi dễ nhận thấy nhất trong bản phát hành này, tập trung vào việc đơn giản hóa mô hình xử lý yêu cầu và phản hồi.

  • Giảm số lượng tài nguyên: Số lượng tài nguyên đã giảm từ 8 xuống còn còn 2 (requestresponse). Các tài nguyên riêng biệt cho incoming/outgoing body hay future-trailers đã được gộp lại.
  • Handler bất đồng bộ: Handler giờ đây là một hàm async func. Trong WASI 0.2, incoming-handler phải sử dụng tham số response-outparam như một giải pháp thay thế (workaround) do thiếu hỗ trợ async trả về trực tiếp.
  • Hỗ trợ Middleware (Trung gian): Một thế giới (world) mới gọi là middleware đã được giới thiệu, cho phép các thành phần (components) vừa nhập vừa xuất handler. Điều này tạo ra sự hỗ trợ hạng nhất cho các thành phần nằm trên đường đi của yêu cầu, rất hữu ích cho việc xây dựng các gateway hoặc proxy.

wasi:filesystem và wasi:clocks

  • Hệ thống tệp: Các thao tác đọc/ghi luồng (streaming) và duyệt thư mục đều đã chuyển sang mô hình stream kết hợp với future.
  • Đồng hồ (Clocks): Có một số thay đổi về tên gọi để tuân thủ các tiêu chuẩn phổ biến như POSIX và Rust. wall-clock đổi thành system-clock, và datetime đổi thành instant. Mục tiêu là đảm bảo tính nhất quán trong toàn bộ hệ sinh thái.

Tổng thể, WASI 0.3.0 là một bước tiến cần thiết giúp WebAssembly ngày càng trưởng thành, cung cấp một nền tảng vững chắc và hiện đại hơn cho việc phát triển các ứng dụng đa nền tảng hiệu suất cao.

Chia sẻ:FacebookX
Nội dung tổng hợp bằng AI, mang tính tham khảo. Xem bài gốc ↗