Современные инструменты построения виртуальных машин. Спикер: Александр Боргардт

6 месяцев назад
65 в блокчейн

Один из главных разработчиков Golos Core Александр Боргардт предоставит фундаментальную, обобщенную информацию относительно современных инструментов построения виртуальных машин. Также спикер обозначит ключевые слова, что позволит ориентироваться в базовых понятиях и поможет в поиске более углубленной информации по данной теме.

Александр трудился в компании, разрабатывающей программное обеспечение, которое носило характер биосистем. Смысл заключался в том, что существовала точка А и точка В, через систему проходил большой поток данных, обычно относительно всей компании. Далее, на основании собранных данных, формировались разнотипные отчеты по желанию заказчика.

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

Снимок экрана 2018-04-09 в 16.10.07.png

Составляющие узла обработки

Снимок экрана 2018-04-09 в 16.16.03.png

  • Hardware компонент
  • Операционная система
  • Виртуальная машина Python
  • Виртуальная машина Fort
  • Бизнес-логика

Для решение задач, связанных с узлами обработки необходимо разобрать принцип работы виртуальных машин. Переходим к главному вопросу лекции - инструменты построение виртуальных машин.

Для начала рассмотрим типы виртуальных машин:

  • Стековые

Снимок экрана 2018-04-09 в 17.06.31.png

Когда необходимо сложить два числа и переложить результат: получаем первое значение, получаем второе значение, действие и сохраняем в определенный регистр.

В стеке есть возможность посчитать кост функции, что дает возможность получить кост анализ, фактически, дополнительную информацию для компиляторов.

Учитывая тенденции последних 10-20 лет, стековые машины более популярны.

  • Регистровые

Снимок экрана 2018-04-09 в 17.28.39.png

Аналогичная операция сложения в регистровых машинах проще, но кост анализ имплементировать в подобные машины сложнее.

Разбираем далее:

Снимок экрана 2018-04-09 в 17.29.49.png

Сеть соединена внешним сетевым приложением, а интерпретатор Python пишет файловый дескриптор, который является куском памяти и делится между двумя псевдо-виртуальными машинами и демоном, отвечающим за сеть.

Схема сложная и требует усовершенствования

Снимок экрана 2018-04-09 в 18.24.36.png

Чтобы отказаться от виртуальной машины Python, необходим инструмент, который позволит имплементировать виртуальную машину Fort.

Такими инструментами выступают flex bison и yaac

Снимок экрана 2018-04-09 в 19.01.58.png

Данные инструменты позволяют построить дерево из языков и придать ему смысл.

С течением времени появляются новые решения

WebAssembly - стандарт, который использует разные виды анализов для организации компиляции.

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

Backend для WebAssembly - LLVM (Low Level Virtual Machine), которая используется в одном из самых известных компиляторов Clang.

Clang - frontend на языке C++, который объясняет низкоуровневому языку LLVM как последовательность на языке С++ представить в промежуточном коде, а также позволяет подключать практически любые языки.

Снимок экрана 2018-04-09 в 19.32.14.png

Из схемы видно, что LLVM и Clang разделяется на три составляющие:

  • Frontend языка
  • Оптимизатор, который проходит по байткоду под названием IR и является промежуточным
  • Backend

Референсная имплементация WebAssembly, которую можно встраивать в приложения можно найти по следующей ссылке:
https://github.com/webassembly/wasm-jit-prototype

Снимок экрана 2018-04-09 в 19.46.34.png

Авторы получают вознаграждение, когда пользователи голосуют за их посты.
Голосующие читатели также получают вознаграждение за свой голос.