Những ngôn ngữ nào có thể được biên dịch sang WebAssembly (Wasm)?


116

Những ngôn ngữ nào có thể được biên dịch sang WebAssembly (Wasm)?

Tôi tin rằng ngay bây giờ C, C ++ và Rust (thử nghiệm) có thể được biên dịch sang WebAssembly, với phần phụ trợ trình biên dịch llvm, với các ngôn ngữ như Java, Swift và C # hiện không được hỗ trợ, nhưng có thể là ứng cử viên cho sự phát triển trong tương lai.

Tôi không tin rằng JavaScript có thể được biên dịch thành Wasm. https://github.com/WebAssembly/design/issues/219


1
Cũng như một lưu ý cho bất kỳ ai đọc bài này, gần đây tôi đã sử dụng C và C ++ để WASM thông qua emscripten và nó hoạt động rất tốt.
CoffeeTableEspresso

Câu trả lời:


121

Hỗ trợ WebAssembly đang ngày càng phát triển. Ngay bây giờ nó được hỗ trợ bởi các ngôn ngữ sau:

Ngoài ra còn có các giải pháp thương mại:

Về JavaScript, khó có thể nhận được sự hỗ trợ vì WebAssembly là một ngôn ngữ hợp ngữ được nhập tĩnh.

Ngoài ra còn có nhiều ngôn ngữ khó hiểu / theo sở thích khác hỗ trợ WebAssembly. Bạn có thể tìm thấy thêm chi tiết trong danh sách Ngôn ngữ WebAssembly đầy đủ hơn .


1
Triển khai C # / Java / Swift thương mại: blog.remobjects.com/2018/01/12/… . Ngoài ra: github.com/appcypher/awesome-wasm-langs
Andreas Rossberg

Điểm tốt - Tôi đã thêm RemObjects như một danh mục của riêng nó vì nó đa ngôn ngữ và thương mại
ColinE

1
Nhưng Python được gõ động!
Richard Eng,

17

Xem https://github.com/mbasso/awesome-wasm#compilers - hiện tại nó chỉ C / C ++, những cái khác là thử nghiệm, nhưng số lượng phần "thử nghiệm" tăng lên.

Hiện tại WebAssembly chỉ hỗ trợ bộ nhớ tuyến tính phẳng. Điều đó phù hợp với C / C ++ / Rust và nhiều ngôn ngữ khác, nhưng hầu hết các ngôn ngữ hiện đại phổ biến đều cần trình thu gom rác để chạy. Đó là "tính năng hậu MVP" của WebAssembly (xem https://github.com/WebAssembly/design/issues/1079 ). Hiện tại, lựa chọn duy nhất là triển khai bộ thu gom rác bên trong wasm với một số mã tùy chỉnh.


2
Cần thêm rằng asm.js có thể dễ dàng được biên dịch thành wasm và asm.js javascript. Điều đó nói rằng, việc biên dịch javascript sẽ khó khăn hơn nhiều vì nó thường thiếu nhiều thông tin ngữ cảnh có sẵn ngay lập tức.
Culex

11

TeaVM có thể được sử dụng để chuyển mã byte JVM sang WebAssembly. Bạn có thể xem trang chủ của dự án tại https://github.com/konsoletyper/teavm .

TeaVM ở cốt lõi của nó có thể chuyển mã bytec của JVM sang JS và WebAssembly. Hỗ trợ WebAssembly đang ở giai đoạn đầu, nhưng có sẵn các bản trình diễn để so sánh hiệu suất của mô phỏng JBox2D đơn giản với GWT, TeaVM (đầu ra JS) và TeaVM (đầu ra WASM), khá ấn tượng.

Xin lưu ý rằng WebAssembly hiện không có quyền truy cập trực tiếp vào DOM hoặc các API JavaScript khác. Ngoài ra trong MVP hiện tại không có hỗ trợ cho các kiểu dữ liệu không rõ ràng hoặc thậm chí cả GC. Tuy nhiên, có thể thực hiện lệnh gọi lên / xuống từ JS sang WASM và quay lại một lần nữa bằng cách sử dụng một số thủ thuật JS, như đã thấy trong các bản trình diễn đã đề cập.


8

Repo này

Chứa danh sách các ngôn ngữ hiện đang biên dịch hoặc có máy ảo của chúng trong WebAssembly (wasm)

Đặc trưng:

  • Sử dụng biểu tượng cảm xúc để cho biết mức độ trưởng thành của mỗi ngôn ngữ hiện tại
  • Cung cấp liên kết đến tên và tùy chọn dự án từng ngôn ngữ

3
"Sử dụng biểu tượng cảm xúc để cho biết mức độ trưởng thành của mỗi ngôn ngữ hiện tại" hãy đọc câu đó cho chính mình một vài lần ... đó là một tuyên bố khá sâu sắc.
ipatch

Đúng vậy, những lời giải thích trực quan đơn giản cùng với những biểu thức ngớ ngẩn.
jasonleonhard
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.