Можно ли скомпилировать движок JavaScript (например, spidermonkey) и запустить на веб-сборке? - PullRequest
0 голосов
/ 13 декабря 2018

Полагаю, что в этом процессе возникнут некоторые проблемы.

Как вы думаете, он безопасен и стабилен?

1 Ответ

0 голосов
/ 14 декабря 2018

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.

...