Часто задаваемые вопросы (FAQ)
Общее
Используется ли код оригинального КуМир?
Нет. Qumir написан полностью с нуля — первый коммит ядра языка датирован сентябрём 2025 года. Никакой код из оригинального КуМир (НИЛСИ, МФТИ) не используется. Qumir — независимая реализация того же алгоритмического языка.
Чем Qumir отличается от оригинального КуМир?
Qumir — это независимая реализация того же алгоритмического языка с современной архитектурой: компилятор на C++ с бэкендом LLVM, поддержка WebAssembly и онлайн-песочница. Синтаксис языка совместим с КуМир — большинство программ запустятся без изменений.
Основные отличия:
- Qumir компилирует в нативный код и WebAssembly; оригинальный КуМир — интерпретатор
- Модули (исполнители) расширяются через C++ API
- Нет редактора с пошаговым выполнением и визуальной отладкой (пока)
Можно ли использовать Qumir для подготовки к ЕГЭ?
Да. Синтаксис языка соответствует алгоритмическому языку, используемому в заданиях ЕГЭ и ОГЭ по информатике. Поддерживаются все основные конструкции: циклы нц/кц, условия если/то/иначе, массивы таб, процедуры и функции.
Qumir — бесплатный?
Да, полностью. Исходный код открыт: github.com/resetius/qumir.
Синтаксис и совместимость
Почему программа из КуМир не работает в Qumir?
Проверьте следующее:
- Точка входа: в Qumir выполняется первый алгоритм в файле. Если у него есть параметры — передайте их в поле «Аргументы».
- Системные функции: некоторые встроенные функции оригинального КуМир могут называться иначе. Сравните с документацией по синтаксису.
- Кодировка файла: исходник должен быть в UTF-8.
Регистр букв в ключевых словах имеет значение?
Да. Ключевые слова пишутся строчными буквами: алг, нач, кон, если, нц и т.д. АЛГ или Алг — ошибка.
Можно использовать латинские буквы в именах переменных?
Да, имена переменных и алгоритмов могут содержать латинские буквы, цифры и знак _. Ключевые слова — только кириллические.
Онлайн-версия
Почему программа зависла в браузере?
Qumir компилирует программу в WebAssembly и запускает её прямо в браузере. Бесконечный цикл заблокирует вкладку. Перезагрузите страницу.
Где хранятся проекты?
Проекты сохраняются в localStorage браузера. Они не синхронизируются между устройствами и будут потеряны при очистке данных браузера. Используйте кнопку «Поделиться» для получения постоянной ссылки.
Поддерживается ли ввод данных?
Да. Для передачи аргументов в точку входа используйте поле «Аргументы» (через запятую). Команда ввод поддерживается через поле ввода в панели «Ввод/Вывод».
Почему исполнитель не появляется?
Убедитесь, что в начале программы есть строка использовать Черепаха (или другой исполнитель). Панель исполнителя появляется автоматически после первого запуска программы с этим модулем.
Исполнители
В чём разница между Чертежником и Рисователем?
Чертежник рисует линии на координатной плоскости — перемещается к указанным точкам. Подходит для графиков, геометрических фигур.
Рисователь работает попиксельно — рисует на растровом листе заданного размера. Подходит для создания изображений, фракталов, заливки цветом.
Можно ли использовать несколько исполнителей одновременно?
Несколько неграфических модулей (например, «Комплексные числа») подключаются одновременно без ограничений. Графических исполнителей (Черепаха, Чертежник, Рисователь, Робот) одновременно может быть активен только один.
Как задать цвет в Чертежнике и Рисователе?
Оба модуля используют один тип цвет. Доступны именованные константы (чёрный, красный, синий и др.) и конструкторы (RGB, HSL, HSV). Подробнее — в документации по Рисователю.
Компилятор и интерпретатор
В чём разница между qumiri и qumirc?
qumiri— интерпретатор и JIT-компилятор. Быстро запускает программу без создания файлов.qumirc— AOT-компилятор. Создаёт нативный исполняемый файл или.wasm.
Для разработки удобнее qumiri, для деплоя — qumirc.
Как включить оптимизации?
./build/bin/qumirc -O2 программа.kum -o программа
В онлайн-версии уровень оптимизации выбирается в выпадающем меню (только в режиме разработчика).
Программа работает медленно. Что делать?
- Убедитесь, что используете
qumircс оптимизациями, а не интерпретатор. - Избегайте вычислений внутри глубоко вложенных циклов с вызовами функций.
- В браузере скорость ограничена WebAssembly — для тяжёлых вычислений используйте нативную сборку.
Разработка и сборка
Какие зависимости нужны для сборки?
- CMake ≥ 3.30
- Компилятор C++23 (GCC 13+ или Clang 17+)
- LLVM ≥ 20
- GoogleTest (для тестов)
- Опционально:
wasm-ldдля WebAssembly, Node.js для JS-тестов
Как запустить только конкретный тест?
cd build
ctest -R test_lexer # по имени набора
ctest -R "complex/operators" # регрессионный тест по пути
Как добавить новый модуль (исполнитель)?
Реализуйте класс, наследующий IModule из qumir/modules/module.h. Зарегистрируйте его в TNameResolver. Смотрите реализацию модуля Черепаха как пример минимального модуля.
Можно ли интегрировать движок Qumir на свой сайт?
Да. Qumir компилирует программы в WebAssembly, который запускается в любом современном браузере. Исходный код открыт под лицензией BSD-2-Clause.
Для встраивания потребуется:
- Скомпилированный
.wasm— получается черезqumirc --wasm. Запускается стандартным WebAssembly API браузера. - JS-рантайм — WASM-модуль импортирует хост-функции ввода/вывода, работы со строками и массивами. Готовая реализация лежит в
service/static/runtime/. Можно использовать как есть или написать собственную.
Опционально: HTTP-сервер (service/server.cpp) — нужен только если вы хотите компилировать исходный код на лету на стороне сервера. Для показа заранее скомпилированных программ сервер не нужен.
Я нашёл ошибку или хочу внести исправление — что делать?
Исходный код проекта открыт: github.com/resetius/qumir.
- Сообщить об ошибке — создайте Issue на GitHub с описанием и примером программы, на которой воспроизводится проблема.
- Предложить исправление — сделайте форк, внесите изменения и откройте Pull Request.
- Написать напрямую — оставьте сообщение в гостевой книге или в Telegram-канале проекта.