# FromZero / Language [README in English](./README.md) · [Документация](./docs/ru/index.md) **FromZero/Language** - пакет из JIT-компилятора и виртуальной машины для языка FZL. ## Текущие возможности На данный момент язык имеет: - Встроенную функцию `printline` для вывода аргумента в stdout - Строковый, булев и числовой литералы - Арифметические операции: сложение, вычитание, умножение, деление, модуло, возведение в степень - Декларация переменных со следующими типами: - `uint`, `int` - целые числа размером с машинное слово - `i8`..`i64` - целые числа со знаком - `u8`..`u64` - целые числа без знака - `str` - строки - `bool` - булевы - Присваивание - Функции - Классы и объекты Примеры кода лежат в директории `exl/`. ## Инструкции по сборке 1. Склонировать проект: `git clone https://git.samsonium.dev/samsonium/fz-lang.git` 2. Собрать проект: `make build` 3. Установить проект: `sudo make install` Оба бинарных файла предоставляют справку по использованию при запуске с флагом `--help` (или `-h`). ## Гайдлайн по разработке Желательно иметь редактор кода, поддерживающий Clang LSP, так как в проекте есть готовые настройки для форматтера в виде файла `.clang-format`. Для дебаггинга есть два таргета в CMake: `build-c` для компилятора и `build-vm` для виртуальной машины. Оба таргета позволяют указать переменную с путём файла. Например, так: ```shell $ make debug-c FILE=exl/hw.fzs ``` Для проверки новых фич, нужно использовать make-таргет `test`, а тесты писать в `CMakeLists.txt`. ### Бенчмаркинг `make bench` собирает Release-версию, компилирует `benchmarks/loop.fzs` один раз и измеряет время запуска программы в виртуальной машине. По умолчанию выполняются 2 прогрева и 7 замеров; выводятся медиана, среднее, минимум и максимум. Компиляция исходника в измерения не входит. Параметры можно переопределить: ```shell make bench RUNS=15 WARMUP=3 make bench BENCH_FILE=path/to/program.fzs MAX_ITER=2000000 ``` Измеряется полное время запуска процесса `fz` (включая загрузку программы), а не только цикл интерпретации. Для сопоставимых результатов запускайте бенчмарк на одной машине и не меняйте нагрузку между прогонами.