WebAssembly là gì?
- WebAssembly là một tập lệnh và định dạng bytecode đã được tiêu chuẩn hóa, được thiết kế để chạy mã phía máy khách không đáng tin cậy trong trình duyệt web với tốc độ gần như native.
- Nó phát triển từ Emscripten, một trình biên dịch từ C/C++ sang JavaScript, ban đầu chuyển LLVM IR sang JavaScript để có thể chạy mã C và C++ trên web.
- Theo thời gian, các nhà phát triển trình duyệt đã hợp tác với dự án Emscripten để tạo ra một tập con đơn giản của JavaScript nhằm tối ưu hiệu năng, và tập con này sau đó được tiêu chuẩn hóa thành asm.js.
- Sau đó, để tránh overhead của JavaScript, một định dạng bytecode độc lập đã được thiết kế, và đó chính là Wasm.
- Gần đây, WebAssembly cũng đang trở nên phổ biến ngoài phạm vi trình duyệt; Fastly và Shopify đã xây dựng các sản phẩm Edge Compute và Functions dựa trên các engine WebAssembly.
- WebAssembly là một nền tảng hấp dẫn để xây dựng hệ sinh thái plugin nhờ khả năng được nhiều ngôn ngữ nguồn khác nhau nhắm tới.
Vì sao lại là trình thông dịch WebAssembly?
- Giống như nhiều kỹ sư phần mềm khác, tác giả thường rơi vào kiểu bắt đầu một side project mới rồi mất hứng thú sau vài tuần.
- Tác giả cần một dự án lớn có thể đầu tư công sức trong thời gian dài, đồng thời giúp tiếp cận với các tầng thấp hơn của ngăn xếp tính toán.
- Tác giả bắt đầu quan tâm đến làn sóng hype quanh WebAssembly và thấy nó hấp dẫn như một công cụ platform engineering, nơi có thể thiết kế các system call tùy chỉnh.
Semblance
- Để làm quen với WebAssembly Core Specification, tác giả quyết định viết một trình thông dịch WebAssembly.
- Vì mục tiêu của dự án là để học, tác giả không định triển khai mọi opcode hay vượt qua toàn bộ bộ kiểm thử cốt lõi.
- Chỉ cần chạy được chương trình "Hello, World!" là đã thấy hài lòng.
Kết quả
- Dự án được xem là một thành công lớn. Dù độ bao phủ opcode chưa đầy đủ, nó vẫn có thể chạy một chương trình "Hello, World!" đơn giản.
- Mã nguồn lộn xộn, chậm, có rò rỉ bộ nhớ và có thể dễ bị tấn công bởi các module độc hại, nhưng nó hoạt động.
- Tác giả đã học được rất nhiều về đặc tả cốt lõi của WebAssembly và có thể bước ra khỏi vùng an toàn của mình với tư cách một kỹ sư.
- Giờ đây tác giả cảm thấy mình đã có đủ kiến thức về WebAssembly để đóng góp cho các runtime công nghiệp như Wasmtime.
1 bình luận
Bình luận trên Hacker News
Tôi từng có trải nghiệm viết một trình thông dịch Wasm bằng Scheme, nên rất vui khi thấy người khác tự tay làm việc này. Wasm ít khó hơn tưởng tượng, và tôi khuyên hãy thử ở mức đủ để thấy thú vị, không nhất thiết phải triển khai mọi lệnh
wast2jsonthì có thể thu được mô tả JSON đơn giản hơn cùng với các tệp wasm nhị phân thông thườngCâu hỏi của người mới:
Tôi tìm thấy một bài viết thú vị về việc tự diễn giải WASM
Đây là một cách tiếp cận thú vị và là một công trình rất tốt
Tôi nghĩ việc chọn Wasm-C-API làm giao diện chuẩn sẽ là một ý tưởng hay
Một điểm có thể gây tranh cãi:
Tôi khuyên nên xem qua Orca. Đây có thể là một cơ hội tốt để đóng góp: https://orca-app.dev
Thật tuyệt khi được thấy quá trình đào sâu vào WebAssembly và xây dựng một trình thông dịch từ đầu
Một bài viết rất hay, tạo động lực để tôi quay lại với việc triển khai WASM
Công việc thực sự rất ấn tượng