Avatar
1
Sơn Ngọc Beginner
Sơn Ngọc Beginner
Assembly vs WebAssembly
Xin chào mọi người, em muốn hỏi rằng giữa Assembly và WebAssembly có điểm gì tương đồng và không tương đồng, 2 thứ sinh ra để phục vụ mục đích gì và có liên hệ gì với nhau không ạ?
  • Answer
programming assembly webassembly computer science
Remain: 5
1 Answer
Avatar
monkey Beginner
monkey Beginner
Assembly và WebAssembly là 2 thứ hoàn toàn khác nhau em ạ.

  1. Assembly (Hợp Ngữ) là ngôn ngữ ánh xạ được với ngôn ngữ máy, nó là ngôn ngữ để hệ điều hành giao tiếp với phần cứng
  2. WebAssembly thì sẽ cần đến ahead-of-time (AOT) or just-in-time (JIT) compiler để dịch ra ngôn ngữ máy tương ứng với môi trường mà nó chương trình đang chạy. Cụ thể hơn thì, ví dụ chúng ta có đoạn mã WebAssembly thế này:

// Code WebAssembly dạng typescript
export function sum(a: i32, b: i32): i32 {
  return a + b;
}

// Code WebAssembly đã được biên dịch
;; INFO asc module.ts --textFile module.wat --outFile module.wasm --bindings raw -O3 --runtime stub
(module
 (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
 (memory $0 0)
 (export "sum" (func $module/sum))
 (export "memory" (memory $0))
 (func $module/sum (param $0 i32) (param $1 i32) (result i32)
  local.get $0
  local.get $1
  i32.add
 )
)

Em có thể sử dụng công cụ này để kiểm tra: https://www.assemblyscript.org/

Thi khi em nạp cái đoạn code WebAssembly kia vào trình duyệt chẳng hạn, thì trình duyệt sẽ sử dụng trình dịch AOT hoặc JIT của mình để dịch và nạp đoạn code này vào máy ảo (cần tìm hiểu thêm là nạp vào máy ảo hay máy tính, nhưng anh đoán là máy ảo), nghĩa là trong máy ảo của em bây giờ sẽ có luôn hàm add. Vậy thì thay vì như trước đây, mỗi lần gọi hàm add là lại phải thông dịch lại, thì giờ đây khi gọi hàm add thì nó sẽ được thực thi mà không cần phải trải qua bước thông dịch nữa. Như vậy hiệu năng sẽ được cải thiện đáng kể.

  • 1
  • Reply
Theo như em tìm hiểu thì hiện tại đang có 1 thứ gọi là WASI, vậy thì tương lai có thể họ sẽ đưa được WebAssembly chạy bên ngoài môi trường Browser đúng không ạ? Vậy thì liệu ta có thể dùng WebAssembly để xây dựng Desktop, Mobile Apps hay thậm chí Server application không ạ? Và câu hỏi cuối là hiện tại mình có thể run được WebAssembly trên môi trường nào ngoài Browser không ạ?  –  Sơn Ngọc 1660857181000
Yes, WebAssembly đã vượt ra ngoài phạm vi của nó rồi em ạ, hiện giờ blockchain cũng đang sử dụng WebAssembly để chạy trên máy ảo của node. Nên nó hoàn toàn có thể trở thành 1 chuẩn chung cho nhiều loại máy ảo khác nhau, đặc biệt là những máy ảo thế hệ mới.  –  monkey 1660857542000