作者:手机用户2602916737 | 来源:互联网 | 2023-02-06 05:29
可以将哪些语言编译为Web程序集(或wasm)?
我相信现在可以将C,C++和rust(实验)编译成Web程序集,使用llvm编译器后端,目前不支持Java,swift和C#等语言,但可能成为未来开发的候选者.
我不相信Javascript可以编译为wasm.
https://github.com/WebAssembly/design/issues/219
1> ColinE..:
WebAssembly支持不断发展.现在它受以下语言支持:
C/C++ - 通过EmScripten或其他基于LLVM的最小工具链提供非常好的(生产就绪)支持
Rust - WebAssembly是官方支持的目标,其周围有一个高度活跃的社区.
Go - 现在支持WebAssembly作为官方但实验性的目标
C# - 通过Blazor获得实验支持,但是这需要将.NET运行时嵌入到Wasm中.Blazor被微软正式采用为实验技术,最近发布了预览版.
TypeScript - 通过AssemblyScript,高度实验性,但获得动力.
Java - 通过TeaVM或Bytecoder
Haxe - 刚刚宣布支持
Kotlin - Kotlin/Native 0.4 获得了WebAssembly和TeaVM的实验支持
Python - Pyodide是WebAssembly的Python端口,包括科学Python堆栈的核心包(Numpy,Pandas,matplotlib).
PHP - 实验,但有一个工作原型
Perl - WebPerl是WebAssembly的Perl二进制文件的一个端口,允许您在Web上运行Perl脚本.
Scala - 使用Emscripten编译器
Ruby - 通过run.rb项目
还有商业解决方案:
RemObjects - 已宣布支持C#,Java,Swift和Oxygene
关于Javascript,它不太可能获得支持,因为WebAssembly是一种静态类型的汇编语言.
还有各种更加模糊/爱好的语言支持WebAssembly.更详细的可以在更详尽的Awesome WebAssembly语言列表中找到.
2> nzeemin..:
请参阅https://github.com/mbasso/awesome-wasm#compilers - 目前它只是C/C++,其他是实验性的,但"实验"部分的数量增长了.
目前,WebAssembly仅支持扁平线性内存.这适用于C/C++/Rust和许多其他语言,但大多数流行的现代语言需要垃圾收集器才能运行.这是WebAssembly的"后MVP功能"(参见https://github.com/WebAssembly/design/issues/1079).目前唯一的选择是使用一些自定义代码在wasm中实现垃圾收集器.
值得补充的是,asm.js可以很容易地编译为wasm和asm.js _is_Javascript.也就是说,编译Javascript会更加困难,因为它通常缺少尽可能多的即时可用的上下文信息.
3> Mirko Sertic..:
TeaVM可用于将JVM字节码转换为WebAssembly.您可以访问https://github.com/konsoletyper/teavm查看项目主页.
TeaVM的核心可以将JVM字节码转换为JS和WebAssembly.WebAssembly支持处于早期阶段,但有一些演示可用于比较简单的JBox2D仿真与GWT,TeaVM(JS输出)和TeaVM(WASM输出)的性能,这些都非常令人印象深刻.
请注意,WebAssembly目前无法直接访问DOM或其他Javascript API.同样在当前的MVP中,不支持opaque数据类型甚至GC.但是,可以从JS到WASM进行向上/向下调用,然后使用一些JS技巧再次返回,如上述演示中所示.
4> jasonleonhar..:
这个回购
包含当前可在WebAssembly(wasm)中编译或在其VM中拥有其VM的语言列表
特征:
使用表情符号显示每种语言当前的成熟程度
提供每种语言项目名称和选项的链接