2017-04-21 18 views
33

Những ngôn ngữ nào có thể được biên dịch thành web assembly (hoặc wasm)? Tôi tin rằng ngay bây giờ C, C++, và gỉ (thử nghiệm) có thể được biên dịch để lắp ráp web, với backend trình biên dịch llvm, với các ngôn ngữ như Java, nhanh, và C# hiện không được hỗ trợ, nhưng là ứng viên có thể cho tương lai phát triển.Những ngôn ngữ nào có thể được biên dịch thành web assembly (hoặc wasm)?

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

Trả lời

5

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

TeaVM tại lõi của nó có thể transpile JVM bytecode thành JS và WebAssembly. Hỗ trợ WebAssembly ở giai đoạn đầu, nhưng có các bản demo để so sánh hiệu năng của một 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. Cũng trong MVP hiện tại không có hỗ trợ cho các kiểu dữ liệu mờ hoặc thậm chí GC. Tuy nhiên, có thể thực hiện/downcalls từ JS sang WASM và ngược lại 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

Xem https://github.com/mbasso/awesome-wasm#compilers - hiện tại chỉ có C/C++, một số 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 bằng phẳng. Đó là thích hợp cho C/C++/Rust và rất nhiều ngôn ngữ khác, nhưng hầu hết các ngôn ngữ hiện đại phổ biến cần thu gom rác để chạy. Đó là "tính năng sau MVP" của WebAssembly (xem https://github.com/WebAssembly/design/issues/1079). Bây giờ, tùy 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 _is_ javascript. Điều đó nói rằng, biên dịch javascript là/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

27

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

Có công việc hoạt động cơ bản dở dang cho các ngôn ngữ sau:

Về JavaScript, không có khả năng nhận hỗ trợ vì WebAssembly là ngôn ngữ lắp ráp được nhập mạnh mẽ.

Các vấn đề liên quan