WebAssembly: реконструкция стека с нуля

Преобразовывая исходные файлы.wasm или взаимодействуя с подходящим отладчиком с помощью Javascript, можно сериализовать полное состояние выполнения Wasm (главным образом, стек, фреймы вызовов, локальные переменные и т. Д.).

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

Могут ли текущие браузеры поддерживать это?

1 ответ

Не уверен, какое преобразование или отладчик вы имеете в виду, но ваша предпосылка о том, что можно сериализовать состояние выполнения JavaScript, неверна. На самом деле было бы чрезвычайно сложно реализовать такой механизм в движках браузера. Никакой производственный JS-движок, о котором я знаю, не может даже сериализовать свою кучу в общем случае (хотя некоторые, например, V8, имеют очень ограниченный механизм моментальных снимков для кучки запуска). Не говоря уже о стеке вызовов и состоянии живой функции, которые могут находиться в одном из многих режимов оптимизации, произвольно смешиваться с кадрами стека C или стека сборки из среды выполнения или устройства для внедрения и, как правило, являются очень сложными.

Механизация, которую вы имеете в виду, потребует общей сериализации поверх первоклассных неограниченных продолжений. TC39, комитет по JavaScript, отказался от идеи добавления полноценных продолжений к языку много лет назад, потому что он считался слишком сложным и слишком дорогим для реализации в большинстве движков (именно поэтому ES6 вместо этого представил генераторы как гораздо более ограниченный механизм), Редактировать: Общая сериализация даже не рассматривалась, так как она фактически нарушала бы инкапсуляцию через замыкания или прокси, и, следовательно, все существующие шаблоны безопасности языка.

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