Резкий и дерзкий релиз версии 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
(Примеры простенькие, и рекомендуется для начала поизучать сам язык, так как комментариев к коду в примерах нет)