Oracle с открытым исходным кодом WebAssembly двигатель GraalWasm

В последнее время Oracle с открытым исходным кодом WebAssembly двигатель его реализации в GraalVM в GraalWasm, команды разработчиков введен, GraalWasm текущей реализации WebAssembly MVP (минимальный жизнеспособный продукт) спецификация, и может быть в двоичном формате запуск программы WebAssembly, которая является компилятором, такими как Emscripten как генерируется бэкэндом.

Поддержка WebAssembly расширяет возможность GraalVM и другую языковую поддержку при осуществлении дальнейшего ожидаемым, чтобы сделать это платформой общего назначения исполнения языка программирования. Но теперь GraalWasm еще очень ранняя стадия реализации, так и в экспериментальном режиме.

Для достижения GraalWasm, команда разработчиков использовали GraalVM, чтобы обеспечить эффективную платформу для локального двигателя оценки с использованием GraalVM из  трюфелей API , первым понял интерпретатор WebAssembly двоичные файлы.

WebAssembly полуструктурированного формат, который может легко восстановить управляющую структуру потока программы, так что память, хранящая структуру данных коды может быть представлена ​​в виде AST. Программа представлена ​​интерпретатором AST может быть написана очень простым способом, но, несмотря на данные AST на основе структуры легче контролировать и управлять, но они существуют недостатки введения дополнительных накладных расходов памяти.

С другой стороны, на основе кодовых бит коды указует на то, что ни один проиллюстрированный узел дерева для каждого базового обучения, который основан на GraalVM бит не Интерпретатор кода, как правило, имеет меньшую причину объема памяти.

Так как каждый блок содержит только линейные последовательности команд WebAssembly, таким образом, лучшие два метода способен связывать GraalWasm интерпретатора методов: АСТ WebAssembly накладывается на инструкции потока управления, например, если и петли. Тем не менее, каждый блок с узлом трюфеля AST, называемый узлами Wasm блока, что уменьшает объем памяти, так как каждый блок команд не требует отдельного узла одного объекта.

Кроме того, блок GraalWasm часть исходного узла не реплицируется соответствующие потоки команд, но только указатель, содержащийся в массиве WebAssembly двоичный файл.

 

文本 WebAssembly、二进制 WebAssembly 与 GraalWasm AST 之间的对应关系

在此数据结构之上实现的解释器是基于 AST 的解释器和基于位码的解释器之间的混合体。在较高的控制流级别上,它在适当的基本块之间分配。在每个基本块中,解释器在迭代该基本块的操作码的解释循环内完成。这种设计使转译更容易理解,并简化了部分评估。

运行时,解释器和程序将传递到 Truffle 的局部评估引擎,然后该引擎将解释器专门用于程序,并将专门的代码传递给 GraalVM 编译器,最终为目标平台生成高效的汇编代码。

关于 GraalWasm 的更多技术细节可以查看官方博客:

开发团队还介绍了项目接下来的发展规划,其表示,GraalWasm 的动机之一是扩展 GraalVM 的 node.js 实现支持的 API 集,WebAssembly 支持的增加将使其能够实现加载 WebAssembly 二进制文件的 V8 兼容 API 功能。

下一步将是实现 WebAssembly 系统接口(WASI),这对于在 Web 上下文外部运行 WebAssembly 程序是必需的。WASI 是一组 API,用于抽象化对各种操作系统功能的访问,例如文件 API、网络套接字和时钟。

同时 GraalWasm 将专注于提高性能,初步实验和对多个 C 微基准的性能调整表明,与以最高优化水平进行编译的本地 GCC 二进制文件相比,GraalWasm 当前可实现约 0.5 倍至 0.75 倍的峰值性能。

另一方面是改善 GraalWasm 中的调试支持,并将其与 GraalVM 的其余部分集成。

рекомендация

отwww.oschina.net/news/112519/announcing-graalwasm