Які мови можна скласти до WebAssembly (Wasm)?


116

Які мови можна скласти до WebAssembly (Wasm)?

Я вважаю, що зараз C, C ++ і Rust (експериментальний) можна скласти до WebAssembly, при цьому резервний файл компілятора llvm з такими мовами, як Java, Swift та C # не підтримуються, але є можливими кандидатами для подальшої розробки.

Я не вірю, що JavaScript може бути скомпільований у Wasm. https://github.com/WebAssembly/design/isissue/219


1
Як зауваження для тих, хто читає це, нещодавно я використовував C і C ++ для WASM через emscripten, і це дуже добре працює.
CoffeeTableEspresso

Відповіді:


121

Підтримка WebAssembly постійно розвивається. Зараз його підтримують наступні мови:

Є також комерційні рішення:

Що стосується JavaScript, то навряд чи можна отримати підтримку, оскільки WebAssembly - це статично набрана мова збірки.

Існують також різні більш незрозумілі / захоплені мови, які підтримують WebAssembly. Більш детальну інформацію можна знайти в більш вичерпному списку мов Awesome WebAssembly .


1
Комерційна C # / Java / Swift реалізації: blogs.remobjects.com/2018/01/12 / ... . Також: github.com/appcypher/awesome-wasm-langs
Andreas Rossberg

Добре - я додав RemObjects як власну категорію, оскільки він є багатомовною та комерційною
ColinE

1
Але Python динамічно набирається!
Річард Енг

17

Дивіться https://github.com/mbasso/awesome-wasm#compilers - наразі це лише C / C ++, інші - експериментальні, але кількість "експериментальної" частини зростає.

В даний час WebAssembly підтримує просто рівну лінійну пам'ять. Це підходить для C / C ++ / Rust та багатьох інших мов, але для більшості популярних сучасних мов для запуску сміттєзбірника. Це "функція після MVP" WebAssembly (див. Https://github.com/WebAssembly/design/isissue/1079 ). Наразі єдиним варіантом є впровадження сміттєзбірника всередині сміття за допомогою якогось спеціального коду.


2
Варто додати, що asm.js можна легко скласти на wasm, а asm.js - це JavaScript. З цього приводу компілювати javascript - це було б набагато складніше, оскільки в ньому зазвичай не вистачає стільки ж доступної контекстної інформації.
Кулекс

11

TeaVM може використовуватися для трансляції байт-коду JVM до WebAssembly. Ознайомитися з домашньою сторінкою проекту можна за посиланням https://github.com/konsoletyper/teavm .

TeaVM за своєю суттю може транспілювати байт-код JVM в JS та WebAssembly. Підтримка WebAssembly знаходиться на початковій стадії, але є демонстрації для порівняння продуктивності простого моделювання JBox2D з GWT, TeaVM (вихід JS) та TeaVM (вихід WASM), які є досить вражаючими.

Зверніть увагу, що в даний час WebAssembly не має прямого доступу до DOM або інших API API. Також у поточному MVP немає підтримки для непрозорих типів даних або навіть GC. Однак можна виконувати вгору / знижувати дзвінки з JS на WASM і назад, використовуючи деякі хитрощі JS, як це спостерігається у згаданих демонстраційних демонстраціях.


8

Це репо

Містить список мов, які в даний час збираються або мають свої VM в WebAssembly (wasm)

Особливості:

  • Використовує емоджи, щоб показати, наскільки зріла кожна мова на даний момент
  • Надає посилання на назви та варіанти проектів для кожної мови

3
"Використовує емоджи для того, щоб показати, наскільки зріла кожна мова в даний час", прочитайте цю мову пару разів ... це досить глибоке твердження.
ipatch

Так, прості інтуїтивні пояснення в поєднанні з дурними виразами.
jasonleonhard
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.