# Мавка
Сучасна українська мова програмування.
## Будування
Треба:
- GNU/Linux
- Ціль _0.72.0_
- Zig _0.16.0_ (необовʼязково на і для `linux-x86_64`, необхідно для "кроскомпіляції")
```shell
bash scripts/build.sh debug linux-x86_64
./будування/{ВЕРСІЯ}/лінукс-ікс86_64/відлагодження/готове/мавка
```
Будування відбувається лише через GNU/Linux, так як Ціль наразі доступна лише там.
Мавку можна збудувати на різні платформи, але працездатність перевіряється насамперед на `linux-x86_64`.
Можливості на платформах відмінних від `linux-x86_64` можуть бути обмеженими.
Доступні режими будування:
- `debug`
- `release`
Доступні платформи будування:
- `linux-x86_64`
- `linux-aarch64`
- `macos-x86_64`
- `macos-aarch64`
- `windows-x86_64`
- `windows-aarch64`
- `android-aarch64`
- `wasm64`
Для будування для Android треба вказати **повний** шлях до [NDK](https://developer.android.com/ndk/downloads):
```
ANDROID_NDK_HOME="/home/kohutd/Android/android-ndk-r27d" bash scripts/build.sh debug android-aarch64
```
Перед будуванням можна завантажити додаткові бібліотеки за допомогою:
```
bash scripts/download_libs.sh
```
Для платформ `linux` та `android` буде збудовано з нуля `ncurses`, `readline` та `idn2`, але якщо архіви не завантажені, вони не будуть збиратись і не будуть включені в Мавку.
## Розробка
Мавку написано мовою Ціль. Але.
Деякі частини, такі як взаємодія з операційною системою (Linux/MacOS/Windows), написані мовою _C (eng)_ (зараз зробити інакше не вийде).
Тому під час розробки це треба мати наувазі - використання _C (eng)_ лише для крайньої необхідності.
Усі файли, що написані мовою _C (eng)_, розташовуються в папці `external` та підпапках відповідно до ОС.
Мавка, як і Ціль, майже не використовує Unicode - лише у випадках, де без нього не обійтись.
Натомість використовується [Дієкод](https://xn--80aaf6ah.xn--j1amh/%D1%87%D0%B0%D1%81%D0%BE%D0%BF%D0%B8%D1%81/2025-01-03-%D0%B4%D1%96%D1%94%D0%BA%D0%BE%D0%B4.html).
По причині того, що всі сучасні редактори і ОС за замовчуванням зберігають текстові файли використовуючи Unicode,
у Мавці на вхід передаються саме Unicode-файли (UTF-8),
але вони надалі перекодовуються в Дієкод. І вже під час розбору (і далі) Unicode не використовується.
По-суті, Unicode використовується лише для входу і виходу в ОС. Цього позбутись, щонайменше на Linux/MacOS/Windows, не вийде.
ДУЖЕ ВАЖЛИВО: так як Ціль ще не має досконалої підтримки зовнішніх дій для взаємодії з _C (eng)_, усі значення які передаються через аргументи
мають бути рівно 64 біт!
## Тестування
Запустити тести:
```shell
bash scripts/test.sh <шлях_до_мавки>
```