Можно ли скомпилировать движок javascript (например, spidermonkey) и запустить его на Webassembly?

Я предполагаю, что в этом процессе будут какие-то проблемы.

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

Но почему? WebAssembly уже работает на движке JS.

Bumsik Kim 13.12.2018 16:23

Необходимо запустить собственный движок сценариев JS на WebAssembly.

Marco Jo 14.12.2018 01:53

Не пытаюсь показаться грубым, но если вы задаете вопрос, это, вероятно, выше вашей головы.

Jared Smith 14.12.2018 02:26

да. Я знаю, я только что попробовал. И это будет непросто. Спасибо.

Marco Jo 14.12.2018 02:38
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
4
507
1

Ответы 1

TL; DR; Это могло бы быть возможно, но не настолько полнофункциональным и высокопроизводительным, как Spidermonkey / V8 (... пока)

Ребята из Mozilla уже скомпилировал Python в WebAssembly, так почему бы не JavaScript? Однако у WebAssembly есть некоторые ограничения, которые сильно влияют на производительность.

1. Нет (стабильной) поддержки резьбы

Хотя среда JS является однопоточной, сами среды выполнения JS - нет. Современные движки JS используют преимущества параллелизма для синтаксического анализа, компиляции, сборки мусора и т. д. WebAssembly 1.0 (также известный как MVP) не поддерживает многопоточность. Есть предложение WebAssembly Threads, и в настоящее время Chrome и Firefox Nightly поддерживают его в качестве экспериментальной функции и по умолчанию отключены. Кроме того, для стабилизации этого предложения может потребоваться больше времени, чем ожидалось, в ответ на Уязвимость Spectre / Meltdown.

2. JIT невозможен

WebAssembly имеет линейную модель памяти для памяти пользовательского пространства (куча). JIT динамически генерирует оптимизированные машинные коды, чтобы сделать его быстрее. Однако из соображений безопасности WebAssembly не позволяет записывать и выполнять инструкции из памяти.

То же самое происходит с iOS. Apple предотвращает выполнение собственного кода из памяти поэтому пользовательские движки JS не могут иметь JIT на iOS.

Вывод

Если вы думаете скомпилировать и запустить JS-движок на WebAssembly, я бы посоветовал попробовать облегченные JS-движки, такие как JerryScript и Эспруино. Они нацелены на запуск JS во встроенных системах, которые являются одноядерными и имеют ограниченный объем памяти. У них может быть меньше проблем со сборкой, чем у Spidermonkey / V8.

В любом случае, по состоянию на 2018 год ничего стабильного не ждите.

Прекрасный ответ. Большое спасибо.

Marco Jo 14.12.2018 02:35

Другие вопросы по теме