Skip to content

Компиляторы 2025: Итерация 4, 5 - #5

Merged
MishkaSimakov merged 19 commits into
mainfrom
llvm-integration
Sep 7, 2026
Merged

Компиляторы 2025: Итерация 4, 5#5
MishkaSimakov merged 19 commits into
mainfrom
llvm-integration

Conversation

@MishkaSimakov

Copy link
Copy Markdown
Owner

Дерево scope-ов с таблицами символов уже было реализовано до этого. В этой итерации:

  1. Улучшена поддержка структур
  2. Добавлен UFCS для удобной работы со структурами
  3. Добавлен небезопасный каст между целочисленными типами
  4. Добавлены тесты для всего выше
  5. Сделал все типы и QualifiedId иммутабельными

@valeriy-zainullin

Copy link
Copy Markdown

Привет! Отличная работа. 10/10 Увидел тесты на scope, они проходят. Есть даже проходы оптимизационные. Конечно, llvm тоже оптимизирует. Но сделано намного больше, чем требуется. Есть небольшое улучшение по примерам, их пока тяжеловато запускать. Если хочешь, можешь реализовать.

Примеры и makefile

Сейчас при просто запуске make в директории с тестами сборка не происходит.

Потому что первым правилом в файле стоит build/print.s, потому создается только он.

Предлагаю добавить вот это в начало файла.

all: run_code # или exe/main
.PHONY: all run_code

Тогда без аргументов make выберет первую цель, увидит all, а там нужное правило.

Linux

Сборка примеров пока не работает на linux. В makefile есть вызов /opt/homebrew/Cellar/llvm/19.1.7_1/bin/llc. Есть идея.

Можно сделать в корне репозитория файл env.bash с примерно таким содержанием.

#!/bin/bash
export PATH="/opt/homebrew/Cellar/llvm/19.1.7_1/bin:$PATH"
# LD_LIBRARY_PATH, если надо. CMAKE_PREFIX_PATH, если cmake не находит llvm.
export PS1='(tlang-env) $PS1' # Можно закомментировать, если не нужно.

Коммитить не нужно, это под конкретную конфигурацию системы.

И в таком случае достаточно просто llc в makefile вызывать по имени. И он будет выбираться через PATH.

Иногда в системах (особенно на линуксах типо ubuntu, у них в репозиториях есть и llvm-14, llvm-15, llvm-18, llvm-20 и мб это не все варианты, это на ubuntu 25.04, и на прошлых версиях примерно так же было) у утилит LLVM есть суффикс в виде версии через дефис (clang-14, clang-20, можно установить пакет clang, тогда он поставит последний, вроде бы, и сделает его доступным через просто clang). Тогда можно еще переменную сделать LLC_NAME ?= llc в начале makefile для примеров. Если значения еще нет, будет llc. Иначе то, что укажет пользователь. И использовать ее для вызова утилиты. А пользователь может чуть усложнить команду, но будет работать, LLC_NAME=llc-20 make.

Запустить можно командой source env.bash.

Из минусов -- удаляется только при закрытии терминала. Потому мб можно сразу терминал под это выделить. Если не менять PS1, то можно и не замечать изменений и спокойно пользоваться.

Это вообще локальный скрипт, который пишется быстро и работает. Если вдруг нужно для прода или для нескольких людей, можно вообще вдохновиться скриптом activate от пакета virtualenv для python. https://github.com/pypa/virtualenv/blob/main/src/virtualenv/activation/bash/activate.sh

@MishkaSimakov
MishkaSimakov merged commit 6595907 into main Sep 7, 2026
1 check passed
@MishkaSimakov
MishkaSimakov deleted the llvm-integration branch September 7, 2026 07:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants