用不同语言编译的WebAssembly二进制文件的大小如何比较?

时间:2019-03-13 06:47:48

标签: webassembly

垃圾收集语言(例如Go和AssemblyScript)要求将运行时与应用程序一起交付以处理垃圾收集。与没有垃圾回收的语言相比,这会产生更大的二进制大小。各种可编译为WebAssembly的语言的二进制大小如何比较?

2 个答案:

答案 0 :(得分:0)

我不能说Go,但是AssemblyScript有一个可选的GC,需要手动打开。另外,即使没有任何内存分配器直接处理线性内存,它也可以工作(请参阅https://developers.google.com/web/updates/2019/02/hotpath-with-wasm)。除了所有最后的工作之外,还制作了binaryen,它允许针对代码收缩进行大量优化。即使使用内存分配器和内置GC,简单的“ hello world”示例也不会变得大于2 kb,因为tlsf可以编译为大约1 kb,而增量三色标记垃圾收集器甚至更小。

当然,当这两个建议时,所有这些都是不必要的:

  1. https://github.com/WebAssembly/reference-types
  2. https://github.com/WebAssembly/gc

在WebAssembly中实现。

答案 1 :(得分:0)

我发现这个网站https://boyan.io/wasm-wheel/演示了运行WebAssembly的不同语言。该页面上的尺寸:

  • PHP 1.6MB
  • AssemblyScript 248B
  • C 280B
  • 转到1.5MB
  • Java 4.2KB
  • 科特琳65.2KB
  • Rust 1.3MB(有一些简单的方法可以减少锈迹,正确构建后的大小大约为千字节)

按预期,Go和PHP很大。似乎Java和Kotlin都可以在这里找到它,但也许像Go的二进制大小气球一样,加上了更复杂的代码。