
Збірка Zig 0.17.0 переробляє та розширює підтримку платформ і мови
Zig 0.17.0 приносить перероблену систему збірки, вдосконалений ELF-лінкер, ширшу підтримку платформ і оновлення мови. Це результат роботи 206 контриб'юторів і 925 комітів за п'ять місяців.
Головні новини релізу
Zig 0.17.0 охоплює п'ятимісячну роботу, виконану 206 контриб'юторами в 925 комітах. Реліз суттєво змінює систему збірки: процес maker виділяється з процесу configurer, переробляється система кешу, додається захист від configure cache poisoning і додається Build Server Protocol. Також розширюються параметри lazy dependency та форматування.
ELF-лінкер покращено настільки, що інкрементальна компіляція на x86_64-linux має працювати для всіх. До керування пакетами додано локальні перевизначення шляхів, а компіляція ресурсів Windows переміщена до зовнішнього пакета.
Більш широке покриття цілей
У платформенних роботах входить нативне CI-тестування для aarch64-openbsd і CI pull request для aarch64-freebsd та aarch64-netbsd. Zig використовує обов'язкове закріплення коду на aarch64-openbsd, обхід проблеми LLVM, яка стосується більшості бінарників aarch64-windows, і надає stack trace для крашів та невдалих assertion на 32-бітних ARM і SPARC. Опкоди pointer authentication тепер обробляються під час stack unwinding на AArch64.
Додано підтримку цілей loongarch32-linux-gnu, а 64-бітний SPARC загалом досяг стану, придатного до використання. Інформація про цілі додана для aarch64-switch, arm-gba, mipsel-psx та powerpc-wiiu. Дуже рання підтримка xtensa-linux доступна через C або експериментальний LLVM backend. Стандартна бібліотека також отримала підтримку кількох нішевих Linux, OpenBSD та цілей no-libc.
Зміни мови та бібліотеки
Форматна граматика та імплементація Zig узгоджені згенерованим парсером recursive descent, який використовується як fuzzing oracle. Вбудований @bitCast тепер знову інтерпретує логічне бітове уявлення значення і поводиться однаково незалежно від endianness цілі. Його семантика змінена для масивів і векторів, а приведення з extern struct або union більше не дозволені. Примітки релізу рекомендують аудит використання масивів або векторів, оскільки деякий код може зламатися без помилки компіляції.
Вбудований @cImport видалено, а std.Build.Step.TranslateC оголошено застарілим заради явної залежності від офіційного пакета ZSF translate-c. Нові вбудовані @backingInt і @fromBackingInt замінюють застарілі builtin @intFromEnum і @enumFromInt. Zig 0.17.0 також додає @SpirvType, вводить SafeAllocator і переробляє StackFallbackAllocator.
SiTech — веброзробка з підтримкою AI
Створюємо швидкі та сучасні сайти й інтегруємо AI у бізнес-процеси. Маєте проєкт чи запитання? Із задоволенням допоможемо.