TLDR;Это может быть возможно, но не так полнофункционально и высокопроизводительно, как Spidermonkey / V8 (... пока)
Ребята из Mozilla уже скомпилировали Python в WebAssembly , поэтомупочему не JavaScript?Однако существуют некоторые ограничения WebAssembly, которые сильно влияют на производительность.
1.Отсутствует (стабильная) поддержка потоков
Хотя среда JS является однопоточной, сами среды выполнения JS - нет.Современные механизмы JS используют преимущества параллелизма для анализа, компиляции, GC и т. Д. WebAssembly 1.0 (он же MVP) не поддерживает многопоточность. Существует предложение по темам WebAssembly , и в настоящее время Chrome и Firefox Nightly поддерживают его как экспериментальную функцию и по умолчанию отключены.Кроме того, это предложение может занять больше времени, чтобы быть стабильным, чем ожидалось, в ответ на Уязвимость Спектр / Обвал .
2.JIT невозможен
WebAssembly имеет линейную модель памяти для пользовательского пространства памяти (кучи).JIT генерирует оптимизированные машинные коды динамически, чтобы сделать это быстрее.Однако по соображениям безопасности WebAssembly не позволяет писать и выполнять инструкции из памяти.
То же самое происходит с iOS.Apple запрещает выполнение собственного кода из памяти , поэтому в пользовательских движках JS не может быть JIT на iOS .
Заключение
Если вы собираетесь скомпилировать и запустить движок JS в WebAssembly,Я бы предложил попробовать легкие JS-движки, такие как JerryScript и Espruino .Они нацелены на запуск JS на встраиваемых системах с одноядерными процессами и ограниченными памятьюУ них может быть меньше проблем со сборкой, чем у Spidermonkey / V8.
В любом случае, не ожидайте ничего стабильного с 2018.