# Мавка

Сучасна українська мова програмування.

## Будування

Треба:

- GNU/Linux
- Ціль _0.63.0_
- Zig _0.15.2_ (необовʼязково на і для `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 <шлях_до_мавки>
```