Pull to refresh

Коротко о «внезапном» релизе Zig версии 0.13.0

Reading time3 min
Views1.8K

Резкий и дерзкий релиз версии 0.13.0. Очень удивил своей внезапностью. Нововведений немного, потому коротко. Но есть заметные изменения. О них чуть детальнее. Критически релиз связан с выходом LLVM версии 18. Эндрю Келли хотел скорее выпустить версию для синхронизации. Потому такой быстрый релиз. У вас может возникнуть вопрос, ведь я вроде указывал в прошлой статье, что произойдёт отказ от LLVM? Не так быстро это происходит. Повторюсь, релиз слишком «внезапный», чтобы произошли такие серьёзные изменения. По найденной информации (спасибо чатику в телеге) полного отказа всё же не произойдёт. Будет опциональная возможность подключать LLVM на тех платформах, где нет внутренней поддержки. В общем win-win ситуация.

По случаю выхода версии 0.12.0 языка Zig я готовил статью о недокументированных изменениях. Их там не мало. Это, кстати, проблема языка Zig. Примечания к выпуску всегда неполноценны. А так как вышла новая версия, придётся статью ещё отложить, так как релизы выходят чаще, чем я пишу на Zig. Я в основном C++ разработчик, с временами параллельной разработкой под Android на Kotlin и iOS на Objective-C++. На Zig пишу для души. А с учётом того, что мне нужно ещё ждать обновления репозитория дистрибутива, которым я пользуюсь. Новую версию я увижу, наверное, только через месяц. Я приверженец стабильных релизов. Мейнтейнить пакет самому нет свободного времени. По этому прошу не пинать ногами за редкие статьи.

Штош. К новостям...

Стандартная библиотека

На Windows поправили запуск батников

Если коротко, то у Windows свой особый путь в вопросе обработки аргументов при передаче их в приложении cmd.exe. Если было необходимо при сборке на Zig запустить батник с аргументами, раньше могло всё выполниться не так как задумывалось. Теперь вроде победили. Более детально здесь. Вроде не должно как-то повлиять на работу текущего кода.

Упростили hash.crc

Вот это изменение 100% потребует рефакторинг кода для тех, кто использует нестандартные решения. Так как из релиза удалили идентичные реализации алгоритмов.

const hash = Crc32WithPoly(.Castagnoli);
  🠳
const hash = Crc(.Crc32Iscsi);

Переименовали ComptimeStringMap в StaticStringMap и улучшили

Упростили синтаксис. Ускорили за счёт уменьшения размера структуры, и изменений в методе хранения данных. 100% требует рефакторинг текущего кода, если использовали.

Изменили PriorityQueue

Сделали совместимым с ArrayList. А так же теперь поле items указывает только на валидную память, а не на всю память, как раньше. 100% требует рефакторинг текущего кода, так как полные размер очереди лежит в новом поле cap.

Переделали отображение этапов сборки в терминале

Лучше один раз увидеть, чем я тут буду расписывать

Старый известный вариант:

Гифка:

Новый понтовый вариант:

Гифка

Ги

Детально можно прочитать в примечаниях к выпуску или в статье блога Эндрю Келли

Система сборки

Копирование DLL-файла в путь установки для Windows

То есть теперь, когда в Windows вы линкуете библиотеку для приложения, которую тут же сами же собираете, то при выполнении этапа установки и exe-файл будет скопирован в путь /bin и dll-файл тоже. Имейте это в виду.

Пример из примечаний к выпуску:

exe.root_module.linkLibrary(sdl3_lib);

b.installArtifact(exe);
b.installArtifact(sdl3_lib);

Папка zig-cache переименована в .zig-cache

С одной стороны как-то пофиг. С другой стороны - «Куда делась папка? Почему папка с проектом теперь занимает так много места?».

На этом заметные изменения закончились. Спасибо за внимание!

з.ы.

И снова у вас мог появиться вопрос. что вроде же в предыдущей статье я указывал про ускорение компиляции. А где оно? Отвечаю: а его нет. Этот релиз связан только с синхронизацией инструментов для разработки с LLVM версии 18. Для кучности добавили некоторые изменения, которые я лично считаю важными. Цель ускорения компиляции перенесли на версию 0.14.0. Я надеюсь, что оно всё-таки произойдёт.


Ссылки-ссылочки

Основной сайт языка Zig / Он же на русском
Документация языка версии 0.13.0
Документация стандартной библиотеки версии 0.13.0
(Рекомендую читать код самой библиотеки, она читается очень просто. В комментариях кода написано всё тоже самое, что и в веб версии, так как Zig имеет встроенную генерацию документацию из комментариев. И по коду всё же проще ориентироваться)

Важные вехи языка со статусами на Github

Официальный список сообществ по языку в wiki на github

Телеграм чат @ziglang_en
Телеграм чат @ziglang_ru
Телеграм чат @zig_ru
(Говорят там владелец чата странно себя ведёт и поэтому этот чат удалили из официального списка сообществ)

Форум Ziggit
Новостная лента Zig NEWS
Сабреддит r/zig

Сайт для обучения zig.guide только на английском (у них есть гид по 0.13.0-dev)
Сайт для обучения zighelp английский и русский (на очень ранней стадии)
Ziglings: обучение через решение проблем
Набор задачек на Exercism

Страничка Zig на rosettacode c примерами кода (upd от учасника @forthuse)
Репозиторий GitHub zig-tut c примерами обучающих проектов (для Zig версии 0.11.0)
Zig By Example - примеры кода на Zig
(Примеры простенькие, и рекомендуется для начала поизучать сам язык, так как комментариев к коду в примерах нет)

Tags:
Hubs:
Total votes 7: ↑7 and ↓0+7
Comments0

Articles