Обновить

Архитектура RayQuiro: от синтаксического дерева и байт-код ВМ до нативного машинного кода через LLVM

Уровень сложностиСложный
Время на прочтение9 мин
Охват и читатели4.6K
Рейтинг0
Комментарии3

Комментарии 3

Если коротко. Вы писали для компилятора алгоритмы размещения сложных структур в памяти (которые назначают адреса объектам, и переменным, доступ к элементам многомерных массивов), или эту часть делает LLVM? Сколько весит в конце такой готовый компилятор, и потребление памяти в работе?

Привет!

1. По памяти и структурам: Тут разделение по режимам:

  • В VM (байткоде): Локальные переменные и индексы на стеке размещает наш компилятор. Динамика и структуры сидят в куче через Value (tagged union).

  • В AOT (rqio build): Мы транслируем AST в C99 / LLVM IR. Выравнивание (alignment), паддинг и расчёт смещений полей в байтах уже берёт на себя бэкенд (TinyCC или Clang) при сборке.

2. Вес бинарника:

Сам CLI rqio (вместе с парсером, VM, рантаймом и C-компилятором) весит около 4.0 МБ на Linux и 4.4 МБ на Windows.

3. Потребление RAM:

В процессе парсинга, сборки и выполнения жрёт скромные 15–30 мб ram.

Привет!

1. По памяти и структурам: Тут разделение по режимам:

  • В VM (байткоде): Локальные переменные и индексы на стеке размещает наш компилятор. Динамика и структуры сидят в куче через Value (tagged union).

  • В AOT (rqio build): Мы транслируем AST в C99 / LLVM IR. Выравнивание (alignment), паддинг и расчёт смещений полей в байтах уже берёт на себя бэкенд (TinyCC или Clang) при сборке.

2. Вес бинарника:

Сам CLI rqio (вместе с парсером, VM, рантаймом и C-компилятором) весит около 4.0 МБ на Linux и 4.4 МБ на Windows.

3. Потребление RAM:

В процессе парсинга, сборки и выполнения жрёт скромные 15–30 МБ RSS.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации