Tổng quan về WebAssembly (WASM)
WebAssembly (wasm) là một ngôn ngữ máy tính độc lập và tối ưu hóa để chạy trên trình duyệt web. Nó được thiết kế để cung cấp một cách để các lập trình viên có thể viết mã độc lập ngôn ngữ và biên dịch chúng sang một dạng tối ưu hóa để chạy trên trình duyệt web.
WebAssembly được thiết kế để cung cấp hiệu suất tương đương với mã nguồn tốt nhất được viết bằng ngôn ngữ máy tính khác nhau và được thiết kế để tương thích với các ngôn ngữ lập trình khác nhau, bao gồm C, C++ và Rust.
WebAssembly cũng có thể được sử dụng để chạy các ứng dụng khác trên các nền tảng khác nhau, bao gồm cả các nền tảng không trình duyệt web.
WebAssembly, tiêu chuẩn được công nhận bởi W3C
WebAssembly được công nhận là một tiêu chuẩn chính thức bởi World Wide Web Consortium (W3C) vào năm 2019. Điều này có nghĩa là WebAssembly đã được đạt đến mức độ hoàn thiện và tính ổn định mà sẽ được ưu tiên trong việc phát triển các tiêu chuẩn và các tính năng mới cho trình duyệt web.
WebAssembly được thiết kế để cung cấp một cách thực sự mạnh mẽ để chạy các ứng dụng động trên trình duyệt web và được coi là một bước tiến lớn trong việc mở rộng khả năng của trình duyệt web. Nó cũng có thể được sử dụng để tăng hiệu suất và tốc độ của các ứng dụng web và để cung cấp một cách để các lập trình viên có thể viết mã độc lập ngôn ngữ và biên dịch chúng sang một dạng tối ưu hóa để chạy trên trình duyệt web.
WebAssembly có một số đặc điểm đặc trưng như sau:
-
Độc lập ngôn ngữ: WebAssembly là một ngôn ngữ máy tính độc lập, nghĩa là nó không phụ thuộc vào bất kỳ ngôn ngữ lập trình nào khác. Điều này cho phép nó được sử dụng với nhiều ngôn ngữ lập trình khác nhau và có thể được biên dịch từ nhiều ngôn ngữ khác nhau.
-
Tối ưu hóa: WebAssembly được thiết kế để cung cấp hiệu suất tương đương với mã nguồn tốt nhất được viết bằng ngôn ngữ máy tính khác nhau. Nó được biên dịch sang một dạng tối ưu hóa để chạy trên trình duyệt web và có thể chạy nhanh hơn so với mã JavaScript được thực thi trên trình duyệt.
-
Tương thích ngôn ngữ: WebAssembly được thiết kế để tương thích với các ngôn ngữ lập trình khác nhau, bao gồm C, C++ và Rust. Điều này cho phép nó được sử dụng với nhiều ngôn ngữ lập trình khác nhau và có thể được biên dịch từ nhiều ngôn ngữ khác nhau.
WebAssembly còn có một số đặc điểm khác như sau:
-
Tương thích trình duyệt: WebAssembly được thiết kế để được hỗ trợ bởi tất cả các trình duyệt chính thức, bao gồm Chrome, Firefox, Safari và Edge.
-
Nhẹ: WebAssembly là một ngôn ngữ máy tính rất nhẹ, nghĩa là nó không yêu cầu nhiều tài nguyên hệ thống để chạy. Điều này có nghĩa là nó có thể chạy trên các thiết bị với cấu hình thấp và có thể được sử dụng để xây dựng các ứng dụng web phức tạp trên các thiết bị di động.
-
An toàn: WebAssembly được thiết kế để cung cấp một môi trường an toàn để chạy các ứng dụng web
-
Để cung cấp một môi trường an toàn để chạy các ứng dụng web, WebAssembly còn có một số đặc điểm an toàn khác như sau:
-
Các hàm WebAssembly chỉ có thể gọi các hàm đã được cấp phép: Điều này ngăn chặn việc gọi các hàm không hợp lệ hoặc các hàm mà có thể gây ra các vấn đề an toàn.
-
Không có truy cập trái phép đến các tiện ích hệ thống: WebAssembly không thể truy cập vào các tiện ích hệ thống khác nhau, như các tập tin, các tiện ích lập trình hoặc bất kỳ tiện ích nào khác.
-
Giới hạn bộ nhớ: WebAssembly có thể sử dụng bộ nhớ tối đa đã được cấp phép, giúp ngăn chặn việc sử dụng quá nhiều bộ nhớ và gây ra các vấn đề về hiệu năng.
-
Để viết và chạy mã WebAssembly, bạn có thể thực hiện các bước sau:
-
Cài đặt các công cụ cần thiết: Để viết mã WebAssembly, bạn cần cài đặt một trình biên dịch WebAssembly, ví dụ như Emscripten hoặc Binaryen. Bạn cũng cần cài đặt một trình soạn thảo mã nguồn và một trình duyệt web để chạy mã WebAssembly.
-
Viết mã WebAssembly: Sau khi cài đặt các công cụ cần thiết, bạn có thể sử dụng một trình soạn thảo mã nguồn để tạo một tệp mã nguồn WebAssembly. Bạn có thể viết mã WebAssembly bằng một ngôn ngữ lập trình hỗ trợ, như C, C++, Rust hoặc một ngôn ngữ khác.
-
Biên dịch mã nguồn thành mã WebAssembly: Sau khi viết xong mã nguồn, bạn có thể sử dụng một trình biên dịch WebAssembly để biên dịch mã nguồn thành mã WebAssembly. Trình biên dịch sẽ tạo ra một tệp mã WebAssembly để bạn có thể sử dụng trong trang web của mình.
-
Sử dụng mã WebAssembly trong trang web: Để sử dụng mã WebAssembly trong trang web của bạn, bạn có thể sử dụng một đoạn mã JavaScript để nạp và chạy mã WebAssembly. Bạn cũng có thể sử dụng các thư viện JavaScript hỗ trợ, như WebAssembly.instantiateStreaming(), để nạp và chạy mã WebAssembly trong trình duyệt.
Cấu trúc mã WebAssembly giống như một chương trình thông thường, bao gồm các khối mã, các hàm và các biến. Bạn có thể sử dụng các ngôn ngữ lập trình hỗ trợ để viết mã WebAssembly, và sử dụng các công cụ để biên dịch mã nguồn thành mã WebAssembly
Sau khi biên dịch mã nguồn thành mã WebAssembly, bạn có thể sử dụng mã WebAssembly trong trang web của mình bằng cách sử dụng một đoạn mã JavaScript để nạp và chạy mã WebAssembly. Bạn cũng có thể sử dụng các thư viện JavaScript hỗ trợ, như WebAssembly.instantiateStreaming(), để nạp và chạy mã WebAssembly trong trình duyệt. Sau khi nạp và chạy mã WebAssembly, bạn có thể sử dụng các hàm và biến được khai báo trong mã WebAssembly tương tác với các phần khác của trang web.
Viết và chạy mã WebAssembly có thể giúp bạn xây dựng các ứng dụng web có hiệu suất tốt hơn và tương thích với nhiều ngôn ngữ lập trình khác nhau. Tuy nhiên, bạn cần lưu ý rằng WebAssembly vẫn chưa phổ biến trên tất cả các trình duyệt và không hỗ trợ tất cả các tính năng.
Đây là một đoạn mã viết bằng C++ và biên dịch thành WebAssembly để tính tổng của hai số nguyên:
Sau khi biên dịch mã nguồn thành mã WebAssembly, bạn có thể sử dụng hàm
add
trong trang web của mình bằng cách sử dụng một đoạn mã JavaScript như sau:
Trong đoạn mã trên, chúng ta đang nạp và chạy mã WebAssembly từ tệp
add.wasm
bằng hàm WebAssembly.instantiateStreaming()
. Sau khi nạp và chạy mã WebAssembly, chúng ta có thể gọi hàm add
bằng cách sử dụng thuộc tính exports
của đối tượng instance
.
Trong ví dụ trên, hàm
add
sẽ trả về giá trị tổng của hai số nguyên a
và b
được truyền vào như tham số. Ví dụ, khi gọi hàm add(1, 2)
, hàm sẽ trả về giá trị 3
.
Bạn có thể viết các hàm khác bằng cách khai báo các hàm trong khối
extern "C"
và sử dụng chúng tương tự như hàm add
trong mã JavaScript. Bạn cũng có thể sử dụng các biến và các kiểu dữ liệu khác nhau trong mã WebAssembly để xây dựng các ứng dụng web phức tạp hơn.
Một số nền tảng blockchain đang sử dụng WebAssembly (WASM) làm ngôn ngữ lập trình chính:
-
EOS: EOS là một nền tảng blockchain phân cấp được xây dựng dựa trên ngôn ngữ lập trình WebAssembly. Nó cho phép các nhà phát triển viết các ứng dụng blockchain bằng C++ hoặc Rust và chạy chúng trên nền tảng EOS.
-
Harmony: Harmony là một nền tảng blockchain phân cấp độc lập được xây dựng dựa trên ngôn ngữ lập trình WebAssembly. Nó cho phép các nhà phát triển viết các ứng dụng blockchain bằng Rust