71 lines
3.6 KiB
Markdown
71 lines
3.6 KiB
Markdown
# 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-release`
|
||
|
||
После этого в корне появится директория **"build"**. В ней будут лежать два скомпилированных бинарных файла:
|
||
|
||
- `fzc` - компилятор
|
||
- `fz` - виртуальная машина
|
||
|
||
Оба бинарных файла предоставляют справку по использованию при запуске с флагом `--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` (включая загрузку программы), а не
|
||
только цикл интерпретации. Для сопоставимых результатов запускайте бенчмарк на
|
||
одной машине и не меняйте нагрузку между прогонами.
|