WebAssembly (Wasm) สามารถคอมไพล์ภาษาอะไรได้บ้าง


116

WebAssembly (Wasm) สามารถคอมไพล์ภาษาอะไรได้บ้าง

ฉันเชื่อว่าตอนนี้ C, C ++ และ Rust (ทดลอง) สามารถคอมไพล์ไปยัง WebAssembly ได้ด้วยแบ็กเอนด์คอมไพเลอร์ llvm ซึ่งมีภาษาเช่น Java, Swift และ C # ไม่ได้รับการสนับสนุนในขณะนี้ แต่เป็นตัวเลือกที่เป็นไปได้สำหรับการพัฒนาในอนาคต

ฉันไม่เชื่อว่า JavaScript สามารถคอมไพล์ไปยัง Wasm ได้ https://github.com/WebAssembly/design/issues/219


1
เช่นเดียวกับทุกคนที่อ่านข้อความนี้ฉันเพิ่งใช้ C และ C ++ เป็น WASM ผ่าน emscripten และใช้งานได้ดีมาก
CoffeeTableEspresso

คำตอบ:


121

การสนับสนุน WebAssembly มีการพัฒนาตลอดเวลา ตอนนี้ได้รับการสนับสนุนโดยภาษาต่อไปนี้:

นอกจากนี้ยังมีโซลูชันเชิงพาณิชย์:

เกี่ยวกับ JavaScript ไม่น่าจะได้รับการสนับสนุนเนื่องจาก WebAssembly เป็นภาษาแอสเซมบลีที่พิมพ์แบบคงที่

นอกจากนี้ยังมีภาษาที่คลุมเครือ / งานอดิเรกอื่น ๆ อีกมากมายที่รองรับ WebAssembly สามารถดูรายละเอียดเพิ่มเติมได้ในรายการภาษา WebAssembly ที่ละเอียดยิ่งขึ้น


1
การใช้งาน C # / Java / Swift เชิงพาณิชย์: blogs.remobjects.com/2018/01/12/… . นอกจากนี้: github.com/appcypher/awesome-wasm-langs
Andreas Rossberg

จุดดี - ฉันได้เพิ่ม RemObjects เป็นหมวดหมู่ของมันเองเนื่องจากเป็นหลายภาษาและเชิงพาณิชย์
ColinE

1
แต่ Python พิมพ์แบบไดนามิก!
Richard Eng

17

ดูhttps://github.com/mbasso/awesome-wasm#compilers - ตอนนี้เป็นเพียง C / C ++ ส่วนอื่น ๆ อยู่ระหว่างการทดลอง แต่จำนวนส่วน "ทดลอง" เพิ่มขึ้น

ปัจจุบัน WebAssembly รองรับหน่วยความจำเชิงเส้นแบบแบน เหมาะสำหรับภาษา C / C ++ / Rust และภาษาอื่น ๆ อีกมากมาย แต่ภาษาสมัยใหม่ที่เป็นที่นิยมส่วนใหญ่ต้องการตัวเก็บขยะในการเรียกใช้ นั่นคือ "คุณลักษณะ post-MVP" ของ WebAssembly (ดูhttps://github.com/WebAssembly/design/issues/1079 ) สำหรับตอนนี้ทางเลือกเดียวคือใช้ตัวรวบรวมขยะภายใน wasm ด้วยโค้ดที่กำหนดเอง


2
เป็นมูลค่าเพิ่มที่ asm.js สามารถคอมไพล์เป็น wasm ได้อย่างง่ายดายและ asm.js คือ javascript ที่กล่าวว่าการรวบรวม javascript นั้น / จะยากกว่ามากเพราะโดยทั่วไปแล้วจะขาดข้อมูลบริบทที่พร้อมใช้งานทันที
Culex

11

TeaVM สามารถใช้เพื่อถ่ายทอด JVM bytecode ไปยัง WebAssembly คุณสามารถชำระเงินหน้าแรกของโครงการที่https://github.com/konsoletyper/teavm

TeaVM ที่แกนกลางสามารถถ่ายทอด JVM bytecode ไปยัง JS และ WebAssembly การสนับสนุน WebAssembly อยู่ในช่วงเริ่มต้น แต่มีการสาธิตเพื่อเปรียบเทียบประสิทธิภาพของการจำลอง JBox2D อย่างง่ายกับ GWT, TeaVM (เอาต์พุต JS) และ TeaVM (เอาต์พุต WASM) ซึ่งค่อนข้างน่าประทับใจ

โปรดทราบว่าปัจจุบัน WebAssembly ไม่มีการเข้าถึงโดยตรงไปยัง DOM หรือ JavaScript APIs อื่น ๆ นอกจากนี้ใน MVP ปัจจุบันยังไม่มีการรองรับประเภทข้อมูลทึบแสงหรือแม้แต่ GC อย่างไรก็ตามมันเป็นไปได้ที่จะทำการโทรขึ้น / ลงจาก JS เป็น WASM และกลับมาอีกครั้งโดยใช้กลอุบายของ JS ดังที่เห็นในการสาธิตที่กล่าวถึง


8

repo นี้

มีรายการภาษาที่คอมไพล์หรือมี VMs ใน WebAssembly (wasm)

คุณสมบัติ:

  • ใช้อิโมจิเพื่อแสดงความเป็นผู้ใหญ่ของแต่ละภาษา
  • จัดเตรียมลิงก์ไปยังชื่อโครงการและตัวเลือกแต่ละภาษา

3
"ใช้อิโมจิเพื่อแสดงความเป็นผู้ใหญ่ในแต่ละภาษา" อ่านข้อความนั้นกับตัวเองสักสองสามครั้ง ... มันเป็นคำพูดที่ลึกซึ้งทีเดียว
ipatch

ใช่คำอธิบายที่ใช้งานง่ายพร้อมกับสำนวนโง่ ๆ
jasonleonhard
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.