Как отличаются двоичные файлы WebAssembly, скомпилированные из разных языков? - PullRequest
1 голос
/ 13 марта 2019

Языки для сборки мусора, такие как Go и AssemblyScript, требуют доставки среды выполнения с приложением для обработки сборки мусора.Это приводит к гораздо большим размерам двоичных файлов, чем в языках без сборки мусора.Как сравниваются размеры двоичных файлов из разных языков, которые компилируются в WebAssembly?

Ответы [ 2 ]

0 голосов
/ 14 марта 2019

Я нашел этот сайт https://boyan.io/wasm-wheel/, который демонстрирует различные языки, на которых работает WebAssembly. Размеры на этой странице:

  • PHP 1.6MB
  • AssemblyScript 248B
  • C 280B
  • Go 1,5 МБ
  • Java 4,2 КБ
  • Котлин 65,2 КБ
  • Rust 1,3MB (есть простые способы уменьшить этот размер с помощью ржавчины, ожидайте порядка килобайт при правильной сборке)

Как и ожидалось, Go и PHP большие. Кажется, даже Java и Kotlin понимают это прямо здесь, но, может быть, как Go, их двоичный шар размеров с добавлением более сложного кода.

0 голосов
/ 13 марта 2019

Я не могу сказать о Go, но AssemblyScript имеет дополнительный GC, который, кстати, должен быть включен вручную.Кроме того, он может работать даже без каких-либо распределителей памяти, которые обрабатывают линейную память напрямую (см. https://developers.google.com/web/updates/2019/02/hotpath-with-wasm).. В дополнение ко всей заключительной работе создается двоичный код, позволяющий выполнять много оптимизационных проходов, направленных на сжатие кода. Даже с распределителем памяти и встроеннойПростой пример "Привет, мир" GC никогда не становится больше 2 КБ, потому что tlsf, например, компилируется примерно в 1 КБ, инкрементный сборщик мусора с трехцветной маркировкой еще меньше.

Конечно, все это будет ненужным, когда этиВ WebAssembly реализовано два предложения:

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

.

...