Как небольшой проект вырос в полноценный рантайм
Я уже довольно давно разрабатываю компилятор и виртуальную машину (VM) для его рантайма. В основном в одиночку — и в первую очередь потому, что хотела с самых основ разобраться, как такие сложные системы устроены изнутри.
Проект давно перерос рамки простого компилятора. Теперь в нём есть сборщик мусора, инкрементальный REPL и планировщик, предназначенный для выполнения скриптовых конечных автоматов с фиксированной частотой 60 Гц.
Сам компилятор вырос из кода OpenGOAL (открытого проекта по переработке Jak & Daxter). Архитектура виртуальной машины основана на моих собственных исследованиях: с помощью написанных на Python утилит я проанализировала форматы байткода скриптов игры и объединила эти данные с публичными докладами студии и технической документацией. Я не стремилась к прямой бинарной совместимости: там, где оригинальное устройство было неясно или недокументировано, я проектировала собственные архитектурные решения.
И именно здесь начинается самое интересное и сложное с точки зрения инженерии. Каждая мелочь требует осознанного решения, и даже самый незначительный нюанс каскадом увеличивает общую сложность системы:
— Как REPL должен компилировать новое выражение в контексте всего, что было введено до него? — Каковы компромиссы использования сборщика мусора в рантайме реального времени? — Или даже такая деталь, как отсчёт кадров: «кадр 10» означает 10-й тик или 11-й?
Ни один из этих вопросов не является тривиальным. Каждый ответ напрямую определяет поведение всего движка.
Недавно репозиторий выбрали для включения в публичный индекс кода для ИИ-агентов. Было приятно получить такое неожиданное признание для проекта, который всё ещё активно развивается.
Я хочу начать делиться инженерными решениями, стоящими за этим проектом: альтернативами, которые я рассматривала, логикой, которая привела к итоговому выбору, и компромиссами, с которыми пришлось согласиться.
Сейчас я нахожусь в поиске работы на полную занятость в сферах разработки компиляторов (Compiler Development), инструментария для языков (Language Tooling) или системного программирования (Systems Programming). Если вы работаете в этих областях, буду очень рада пообщаться!
#Compilers #SystemsProgramming #ProgrammingLanguages #OpenSource #Cpp