📖 Документация Qumir

← Вернуться в Playground

О проекте Qumir

История создания

Изначально я начал писать свой собственный язык программирования с нуля. Однако в процессе работы стало ясно, что проект далёк от завершения и требует значительных усилий на проектирование синтаксиса и семантики языка.

Осознав это, я решил взять уже готовый, компактный и хорошо проработанный синтаксис КуМир и адаптировать его для своей уже готовой инфраструктуры компилятора. Так родился Qumir — современная реализация учебного алгоритмического языка на базе собственной компиляторной инфраструктуры.

Философия проекта

Данный сайт я делал прежде всего для себя, чтобы можно было быстро тестировать программы и отлаживать компилятор. Поэтому сайт содержит режим разработчика с выводом внутреннего представления компилятора (AST, IR, LLVM IR).

Некоммерческий характер

Сайт принципиально некоммерческий. Здесь нет, не было и не будет рекламы. Проект развивается исключительно энтузиазмом автора и открытым сообществом.

Приоритеты разработки

Я прежде всего реализую корректную и полную реализацию языка КуМир. Цель — создать работающую альтернативу оригинальной системе КуМир, которая будет:

Качество и тестирование

Каждый коммит автоматически прогоняется через набор регрессионных тестов в GitHub Actions. При этом тестируется:

Тесты включают проверку вывода программ, корректности работы алгоритмов, обработки ошибок и других аспектов языка.

Архитектура и технологии

Проект написан полностью на языке C++ с использованием современных возможностей C++23.

Лексический анализ

Лексер написан вручную — это имплементированный руками конечный автомат. Такой подход даёт полный контроль над обработкой ошибок и производительностью.

Синтаксический анализ

Парсер классический рекурсивный нисходящий, написанный вручную без использования генераторов (yacc/bison/ANTLR). Это позволяет:

Промежуточное представление

После построения AST (абстрактного синтаксического дерева) строится промежуточное представление (IR). Из IR может генерироваться:

Оптимизации

Компилятор выполняет несколько проходов оптимизации:

Веб-сервер

Сервис, обслуживающий веб-API для компиляции и других операций, также написан на C++ с использованием моего легковесного фреймворка coroio.

Coroio — это современный асинхронный сетевой фреймворк на C++, использующий корутины (C++20) для написания высокопроизводительного серверного кода. Это позволяет:

Ссылки на coroio:

Исполнение в браузере

Веб-версия работает по следующей схеме:

  1. Сервер компилирует исходный код КуМир в WebAssembly
  2. Клиент (браузер) получает скомпилированный WebAssembly модуль и исполняет его локально

Таким образом, выполнение программ происходит исключительно в браузере пользователя. Это сделано намеренно по двум причинам:

1. Снижение нагрузки на сервер

Серверу нужно только скомпилировать код в WebAssembly — это быстрая операция. Само выполнение программы, которое может занимать много времени и ресурсов, происходит на стороне клиента. Это позволяет масштабировать сервис без дополнительных затрат на вычислительные ресурсы.

2. Безопасность

На сервере не исполняется пользовательский код, поэтому не надо решать задачи изоляции и безопасности:

Каждый пользователь работает в песочнице своего браузера, что обеспечивает естественную изоляцию.

Уникальность

На текущий момент это единственная работающая реализация языка КуМир онлайн в браузере.[^1]

Файловый ввод-вывод в браузере

Qumir — единственная онлайн реализация КуМир с поддержкой файлового ввода/вывода в браузере!

В отличие от других онлайн-сред программирования, где файлы либо не поддерживаются, либо требуют загрузки/скачивания, Qumir предоставляет встроенный файловый менеджер прямо в интерфейсе браузера. Вы можете:

Файлы сохраняются в localStorage браузера и доступны для всех программ в рамках проекта. Это делает возможным полноценную работу с файловым вводом-выводом без установки какого-либо ПО.

Подробнее см. Работа с файлами.

[^1]: Если вы знаете другую полнофункциональную реализацию, дайте мне знать в гостевой книге на GitHub. Учтите, что реализация должна проходить все регрессионные тесты Qumir для сравнения.

Открытый исходный код

Проект полностью открыт и доступен на GitHub:

Вы можете: