Несомненно, что WASM является лучшей целью компиляции, чем JS для языков, таких как C / C ++ и Rust - языков, где вы управляете своей памятью вручную, где ваши вызовы чаще всего статически отправляются, а примитивные типыunboxed.
Однако если вы начнете переходить от языков такого типа к таким языкам, как Dart - которые полны динамического поведения, коробочных примитивных типов и GC, вы обнаружите, что с абсолютной уверенностью утверждать, что WASM является более трудным утверждением, становится все труднее.лучшая цель компиляции, чем JS - потому что вы будете вынуждены скомпилировать различные компоненты времени выполнения (например, реализацию диспетчеризации методов) в WASM - в то время как в JS вы получаете эти вещи из базовой среды выполнения JS, и они реализованы изначально и сильно оптимизированы.
Другой вИнтересно отметить, что dart2js по существу извлекает выгоду из двух этапов компиляции - компиляции AOT в JS и динамической оптимизации этого JS позже JS JIT.Если компилятору AOT не удается статически специализировать какой-либо сайт вызовов, все еще есть вероятность, что JS VM справится с этим.Вы не получаете такой роскоши с WASM.
Есть много других факторов, которые следует учитывать (например, встроенные библиотеки - хотите ли вы реализовать свой собственный массив, такой как структура, в WASM со снижением производительности или выпросто хотите использовать сильно оптимизированный собственный массив?) и т. д., и т. д.
Тем не менее, я не сомневаюсь, что есть рабочие нагрузки и программы, которые выиграли бы от Dart, нацеленного на WASM.Все, что я хочу сказать, это то, что ожидать, что все программы Dart будут магически быстрее, неверно.