Введение
ITMO.STARS — это конкурс, по которому можно поступить в ИТМО без высоких результатов ЕГЭ и участия в олимпиадах, представив самостоятельный проект. Он даёт шанс тем, кто не просто «зубрил», а уже стремится делать что-то осмысленное в своей области.
Обо мне
Меня зовут Антон, и я только что закончил 11 класс в городе Энгельс. Более 3-х лет меня интересует разработка компиляторов и инструментов, помогающих в разработке ПО. Однако судьба привела меня к тому, что на данный момент я работаю единственным backend-разработчиком в онлайн-школе по подготовке к ЕГЭ, совмещая при разработке и другие направления.
В начале лета был запланирован переезд в Санкт-Петербург за счет работодателя, где я работал уже из офиса. Также были и другие поездки, за счет чего работа над проектом в контексте ITMO.STARS немного затянулась. Все стабилизировалось ориентировочно в начале июля и, казалось бы, ситуация патовая: заявка не готова, проект не закончен, а времени почти не осталось. Но! Мое мнение — стоит цепляться за любые возможности, поэтому я и начинаю вести эту серию статей. Это история о том, как школьник из региона поступает в ИТМО не как все.
О проекте и тонкостях конкурса
Начиная с 9 класса я веду проект, посвященный исследованию в области прототипирования компиляторов. До более-менее серьезных промежуточных результатов мне не хватает около полугода, за счет чего я столкнулся с дилеммой — что отправлять в заявке?
Изучив положение о конкурсе и пообщавшись с теми, кто прошел его ранее, я пришел к выводу, что по большей части смотрят на абитуриента, а не на проект. И действительно, учебному учреждению необходим не какой-то проект, а абитуриент, который будет продвигаться в своей области и в будущем продвигать ее, что оправдывает вложения со стороны вуза.
Благодарю за обратную связь Дмитрия Леденцова, проступившего по данному конкурсу на СППО, реализовав интерпретатор.
Из положения стало ясно — проект нужно регулярно защищать, чтобы продолжать обучение за счет университета. Поэтому нельзя рассматривать проект только как средство поступления. Необходимо, чтобы будущий студент и дальше продвигался в выбранном направлении. В моем случае, к счастью, с этим проблем нет — проектом я продолжу заниматься, даже если не пройду по конкурсу.
Цель проекта в контексте конкурса
Идея проста: я хочу разработать минималистичный, но удобный для расширения компилятор, который может служить основой для прототипирования новых языков под JVM. Такой инструмент может быть полезен:
для исследовательских целей (быстрое прототипирование новых синтаксических и семантических конструкций);
для образовательных задач (архитектура компилятора позволит легко понять, как он работает);
как база для разработки DSL.
Главный акцент — упрощение разработки и экспериментов, без жертв в качестве архитектуры.
Ограничения
Поскольку проект не только должен быть готов в минимально рабочем виде в течение пары недель, а также должен будет демонстрировать мои способности и понимание различных концепций в проектировании и разработке, введен ряд ограничений:
строго минимальный набор возможностей;
никакой магии или «умных» зависимостей — всё свое: парсер, семантика, код-ген, CLI.
Используем лишь 2 зависимости: Lombok, OW2 ASM.
Что будет реализовано
Вот минимальный план, который я ставлю себе до подачи на конкурс:
синтаксический анализ;
анализ зависимостей проекта (включая .jar и другие source-файлы);
система семантического анализа;
генератор байт-кода и CLI, собирающий
.class
;Обновляемая CLI-сборка с выводом ошибок и отладочной информацией.
Почему это важно
Разработка даже простого компилятора — это хороший тест на понимание в построении архитектуры подобных проектов. Всё, что я реализую, должно быть не просто рабочим, но также понятным и расширяемым. Мне важно не просто «написать компилятор», а сделать структуру, которую можно будет развивать дальше — уже как часть инструмента или исследовательской платформы.
Большая часть заявки, конечно, будет посвящена не прототипу, а моей работе в исследовательском проекте. Рабочий прототип является лишь демонстрацией того, что на практике я тоже чего-то стою. Именно поэтому над ним я работаю один, без участия моей команды с основного проекта.
Дальше
В следующих статьях я буду поэтапно описывать каждый модуль:
как и почему я реализовал синтаксический анализ именно так;
линковка и циклические зависимости в типах;
подходы в семантическом анализе и на что опирался при выборе;
как устроена структура генерации байт-кода и сборки;
и какие промежуточные результаты я получил перед подачей проекта на конкурс.