Современные инструменты построения виртуальных машин. Спикер: Александр Боргардт
Один из главных разработчиков Golos Core Александр Боргардт предоставит фундаментальную, обобщенную информацию относительно современных инструментов построения виртуальных машин. Также спикер обозначит ключевые слова, что позволит ориентироваться в базовых понятиях и поможет в поиске более углубленной информации по данной теме.
Александр трудился в компании, разрабатывающей программное обеспечение, которое носило характер биосистем. Смысл заключался в том, что существовала точка А и точка В, через систему проходил большой поток данных, обычно относительно всей компании. Далее, на основании собранных данных, формировались разнотипные отчеты по желанию заказчика.
Программа имела достаточно сложную архитектуру. Самый ценный компонент структуры - ноды, которые считали полезную нагрузку, так называемые узлы обработки, и большая часть бизнес-логики была заключена именно в этих нодах.
Составляющие узла обработки
- Hardware компонент
- Операционная система
- Виртуальная машина Python
- Виртуальная машина Fort
- Бизнес-логика
Для решение задач, связанных с узлами обработки необходимо разобрать принцип работы виртуальных машин. Переходим к главному вопросу лекции - инструменты построение виртуальных машин.
Для начала рассмотрим типы виртуальных машин:
- Стековые
Когда необходимо сложить два числа и переложить результат: получаем первое значение, получаем второе значение, действие и сохраняем в определенный регистр.
В стеке есть возможность посчитать кост функции, что дает возможность получить кост анализ, фактически, дополнительную информацию для компиляторов.
Учитывая тенденции последних 10-20 лет, стековые машины более популярны.
- Регистровые
Аналогичная операция сложения в регистровых машинах проще, но кост анализ имплементировать в подобные машины сложнее.
Разбираем далее:
Сеть соединена внешним сетевым приложением, а интерпретатор Python пишет файловый дескриптор, который является куском памяти и делится между двумя псевдо-виртуальными машинами и демоном, отвечающим за сеть.
Схема сложная и требует усовершенствования
Чтобы отказаться от виртуальной машины Python, необходим инструмент, который позволит имплементировать виртуальную машину Fort.
Такими инструментами выступают flex bison и yaac
Данные инструменты позволяют построить дерево из языков и придать ему смысл.
С течением времени появляются новые решения
WebAssembly - стандарт, который использует разные виды анализов для организации компиляции.
Для того, чтоб адаптировать язык для работы поверх WebAssembly необходимо использовать промежуточный транслятор.
Backend для WebAssembly - LLVM (Low Level Virtual Machine), которая используется в одном из самых известных компиляторов Clang.
Clang - frontend на языке C++, который объясняет низкоуровневому языку LLVM как последовательность на языке С++ представить в промежуточном коде, а также позволяет подключать практически любые языки.
Из схемы видно, что LLVM и Clang разделяется на три составляющие:
- Frontend языка
- Оптимизатор, который проходит по байткоду под названием IR и является промежуточным
- Backend
Референсная имплементация WebAssembly, которую можно встраивать в приложения можно найти по следующей ссылке:
https://github.com/webassembly/wasm-jit-prototype