Оновлення Zig 0.17: нові можливості для системного програмування
Оновлення Zig 0.17: нові можливості для системного програмування
Zig, універсальна мова системного програмування, тільки що випустила версію 0.17 з ключовими покращеннями в своєму ELF зв’язувачі та системі побудови, а також розширеною підтримкою інкрементальної компіляції для проектів на x86_64 Linux.
Новий ELF зв’язувач Zig
Однією з найбільших досягнень є новий ELF зв’язувач Zig, який був представлений у попередньому випуску. Тепер він повністю підтримує x86_64 і SPARC64, а також частково підтримує LoongArch.
Зараз зв’язувач може створювати статичні та розділені бібліотеки, обробляти версії символів GNU, інформацію для налагодження DWARF, формувати GOT, виконувати копіювальні переоснащення, управляти таблицями хеш-символів, налаштовувати вирівнювання секцій та інші елементи, необхідні для справжнього програмного забезпечення Linux.
Хоча зв’язувач ще не є за замовчуванням, розробники стверджують, що він вже може будувати більшість проектів Zig, націлених на x86_64 Linux. Метою є повне усунення старого ELF зв’язувача в наступному випуску.
Покращення інкрементальної компіляції в Zig 0.17
Ці досягнення також безпосередньо впливають на інкрементальну компіляцію. Zig 0.17 значно покращує цю функцію, дозволяючи проектам перекомпілювати лише ті частини, що зазнали змін у вихідному коді.
Для більшості проектів на x86_64 Linux тепер можна використовувати інкрементальну компіляцію разом з режимом спостереження Zig, що дозволяє системі побудови виявляти зміни коду і виконувати майже миттєві інкрементальні перескладання.
Покращення системи побудови Zig
Ще однією важливою областю роботи стала система побудови Zig. Стадія конфігурації та частина, що виконує графік побудови тепер працюють як окремі процеси. Система кешування також була перероблена: Zig тепер використовує бінарний формат кешу, що приблизно на 25% менший, а кеш-хіти працюють на 5% до 10% швидше за тестуванням.
Удосконалення супроводжується новим Протоколом сервера побудови, який розроблено для надання зовнішнім інструментам, таким як IDE, доступу до графа побудови, етапів побудови, опцій, залежностей, згенерованих файлів та статусу побудови.
Існує короткостроковий недолік: архітектурні зміни наразі порушують деякі функціональні можливості в ZLS, Zig Language Server. Команди Zig і ZLS працюють разом, щоб розширити новий протокол, щоб сервер мови міг відновити і врешті-решт покращити свою попередню інтеграцію.
Зміни на рівні мови в Zig 0.17
Є також численні зміни на рівні мови. Серед них: переглянуто поведінку @bitCast, старий синтаксис множення масивів замінено на @splat, а також виключено декілька старих або застарілих мовних конструкцій.
Ще одна помітна зміна стосується інтеграції з C. @cImport, застарілий у Zig 0.16, тепер видалено. Переклад з C на Zig переходить в офіційний зовнішній пакет translate-c, який підтримується Zig Software Foundation, що дозволяє розвиватися незалежно від основного компілятора Zig.
Розширення підтримки платформ
Підтримка платформ продовжує розширюватися. У випуску додані цілі loongarch32-linux, загально доступна підтримка 64-бітного SPARC, введено початкову підтримку xtensa-linux і поліпшено підтримку на OpenBSD, FreeBSD, NetBSD, ARM, AArch64 та кількох менш поширених архітектур.
Усередині Zig 0.17 оновлює свій інструментарій на базі LLVM до LLVM і Clang 22.1.8. Для крос-компіляції доступний glibc 2.44. У випуск також включені заголовки ядра Linux 7.2. Zig продовжує постачати musl 1.2.5 з усуненими проблемами безпеки та портативності.
Для довідки, мінімальна підтримувана версія Linux для стандартної бібліотеки Zig залишається Linux 5.10.
Окрім основних змін, SPIR-V зв’язувач було переписано, і тепер він може виконувати інкрементальну компіляцію та зв’язувати зовнішні об’єктні файли SPIR-V. Бекенд компілятора SPIR-V також став багатопотоковим. Нарешті, триває попередня робота над самостійними бекендами компілятора LoongArch та AArch64.
Більше деталей про всі зміни в Zig 0.17 доступні в офіційних нотатках випуску проекту.




