🏠

Zig

Зміст:
  1. Корисні посилання
    1. Для самостійного навчання:
  2. Налаштування Neovim
  3. Як встановити гру Tetris на Void Linux [Zig 0.13.0]
  4. Як злінкувати програму з системною бібліотекою [Zig 0.15.2]

Корисні посилання

Для полегшення роботи з різними версіями Zig:
https://marler8997.github.io/anyzig/

Для полегшення роботи з різними версіями Zls:
https://codeberg.org/knightpp/anyzls/

Заповнювачі виводу:
https://ziglang.org/documentation/0.15.2/std/#std.Io.Writer.print

Для самостійного навчання:

Книга Педро:
https://pedropark99.github.io/zig-book/Chapters/01-zig-weird.html

Документація мови:
https://ziglang.org/documentation/0.15.2/

Документація стандартної бібліотеки:
https://ziglang.org/documentation/0.15.2/std/

Навчання на основі виправлення помилок:
https://codeberg.org/ziglings/exercises

Налаштування Neovim

astro-nvim

sudo xbps-install -S neovim

vim .bashrc
alias nv="nvim"

mv ~/.config/nvim ~/.config/nvim.bak
mv ~/.local/share/nvim ~/.local/share/nvim.bak
mv ~/.local/state/nvim ~/.local/state/nvim.bak
mv ~/.cache/nvim ~/.cache/nvim.bak

git clone --depth 1 https://github.com/AstroNvim/template ~/.config/nvim
rm -rf ~/.config/nvim/.git
nvim

:LspInstall zls
:TSInstall zig
:DapInstall codelldb

Manage plugins

:Lazy check
:Lazy update
:Lazy clean
:Lazy sync

:AstroUpdate

Як встановити гру Tetris на Void Linux [Zig 0.13.0]

https://github.com/andrewrk/tetris

Встановлюємо основні залежності:

sudo xbps-install -Su zig libX11-devel MesaLib-devel glfw-devel

Встановлюємо libepoxy:

git clone git@github.com:anholt/libepoxy.git
cd libepoxy
mkdir _build && cd _build
meson
ninja
sudo ninja install

Вже після написання статті побачив, що libepoxy є в репозиторії Void, тому можете пробувати також sudo xbps-install -Su libepoxy.
Відповідно, залежності libX11-devel та MesaLib-devel вище можуть бути непотрібними, але це не точно:

sudo xbps-install -Su zig libepoxy glfw-devel

Встановлюємо tetris:

git clone git@github.com:andrewrk/tetris.git

Патчимо його під версію Zig 0.13, яка (поки що) за замовчуванням постачається Void.
На версії Zig 0.15 цього, мабуть, вже не доведеться робити, не перевіряв.

cd tetris

build.zig:
    const exe = b.addExecutable(.{
        .name = "tetris",
        .root_source_file = b.path("src/main.zig"),
        .optimize = optimize,
        .target = target,
    });

src/main.zig:
    ---callconv(.c)
    +++callconv(.C)

Запускаємо:

zig build play

Як злінкувати програму з системною бібліотекою [Zig 0.15.2]

Зазвичай залежності, прописані в build.zig.zon, будуть компілюватися при запуску zig build.

Але якщо вам потрібно не компілювати залежності, а тільки підключити їх з системи, то можна додати рядок exe.linkSystemLibrary("ІМ'Я-БІБЛІОТЕКИ"); у файлі build.zig після об’явлення змінної exe.

Звісно, бібліотека має бути встановлена перед цим.

Наприклад, нас цікавить бібліотека SDL3, яка є залежністю для dvui.

Встановлюємо обидва пакети SDL3 та SDL3-devel:

sudo xbps-install -S SDL3 SDL3-devel

У файлі build.zig.zon маємо тільки згадку dvui:

    .dependencies = .{
        .dvui = .{
            .url = "...",
            .hash = "...",
        },
    },

Тоді у файлі build.zig після:

const exe = b.addExecutable(.{
    ...
});

дописуємо:

exe.linkSystemLibrary("SDL3");

І zig build має злінкувати системну бібліотеку:

$ zig build
[3] Compile Build Script
├─ [2375/9753] Linking
├─ [2371/2920] Code Generation
└─ [12406] Semantic Analysis
   └─ meta.stringToEnum__anon_84415


Побудовано за допомогою Eleventy