LINUX.ORG.RU

Zig 0.9

 


0

3

Спустя 6 месяцев и 2023 коммита от 177 независимых участников вышла новая версия Zig.

Zig – это (кросс)компилятор языков программирования Zig, С++, С, Objective-C, Objective-C++, а также сборочная система для них. Проект разрабатывается под лицензией MIT. Недавно в Zig Core Team вошёл ещё один разработчик на зарплате: Isaac Freund.

В новой версии:

  • Появилась поддержка Objective-C, Objective-C++.

  • Улучшилась поддержка WebAssembly, RISC-V, Haiku.

  • Добавлены платформы ARM64 Windows и Solaris/Illumos.

  • Различные фиксы для уже поддерживаемых платформ.

  • В CI добавлены тесты скорости работы компилятора (подробнее). Теперь после каждого коммита видно, как меняется время парсинга, компиляции, анализа, а также сколько используется памяти. Это помогает оперативно находить регрессии и устранять их. Как пример, в Pull Request, который добавил Allocgate, забыли сделать free. Все тесты проходили, но на графике было видно увеличение потребления памяти, что помогло найти и исправить эту ошибку.

  • Одним из самых важных изменений языка является введение понятия Address Spaces. Теперь отдельным переменным можно указывать, где им создаваться (за счёт генерации компилятором специализированных инструкций эта функциональность полезна для встраиваемого оборудования и графических процессоров):

    pub const will_be_placed_in_flash: i32 addrspace(.flash) = 123;
    
    pub fn readFlash(ptr: *addrspace(.flash) i32) i32 {
       return ptr.*;
    }
    
  • Реализация компилятора Zig на Zig (self-hosted) готова на 44%.

  • Обновлены сторонние компоненты:

    • LLVM 13;
    • musl 1.2.2;
    • glibc 2.34;
    • mingw-w64 9.0.0.
  • Множество изменений в стандартной библиотеке (подробнее).

>>> Подробности

★★★★★

Проверено: xaizek ()
Последнее исправление: xaizek (всего исправлений: 7)
Ответ на: комментарий от moonmadness

Это как?

Как Метапрог. Пишешь на своём языке, а он сначала компилируется в си, а потом в бинарь.

Хотя, это я раньше так думал, а тут по новости похоже что ошибаюсь…

pihter ★★★★★
()
Ответ на: комментарий от splinter
Я помню чудное мгновенье:
Передо мной явилась Zig,
Как мимолетное виденье,
Как гений чистой красоты.

Душе настало пробужденье:
И вот опять явился Zig,
Как мимолетное виденье,
Как гений чистой красоты.
anonymous
()

Спустя 6 месяцев и 2023 коммита от 177 независимых участников вышла новая версия Zig.

РЕСПЕКТ проекту ...  
anonymous
()
Ответ на: комментарий от pihter

Я только до середины второй книги осилил, так он-таки хороший или плохой?

Его перепаяли. :) Мини-спойлер: «для конструирования личности Шрайка были использованы элементы личности … другого персонажа».

Или стоит дочитать даже если сейчас кажется скучным?

Конечно, стоит! Всю пенталогию. Даже немного завидую. :)

dataman ★★★★★
()

из-за этого зига llvm в арче не обновляется неделями

anonymous
()
Ответ на: комментарий от fsb4000

Да, любые флаги которые понимает clang или clang++ можно передавать и в zig cc или zig c++

выглядит как «ах, какое полезное изобретение!» надо пощупать!

// спасибо за надодку!

pihter ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

А так язык на вид как питон со скобочкам

Это дичь, а не язык. Худшие практики сишечки, приправленные собственными неадекватными конструкциями. Описание переменной и указание ее типа вообще фееричное:

will_be_placed_in_flash: i32 addrspace(.flash)
ptr: *addrspace(.flash) i32

Первый же вопрос: почему в случае обычной переменной ее типоразмер i32 указывается слева от addrspace, а в случае указателя - справа от addrspace? Для чего такая путанница?

Я могу понять, почему в том же Pascal-е указатель описывается путем добавления «^» перед именем переменной, а для доступа к значению надо добавлять «^» после имени переменной-указателя. Это оправдано и достаточно удобно при чтении слева-направо, и нет такой дичи как в сишечке.

Но тут умудрились даже описание переменной сделать извратным.

Xintrea ★★★★★
()

Реализация компилятора Zig на Zig (self-hosted) готова на 44%.

Еще столько же, и будет 88.

anonymous
()
Ответ на: комментарий от anonymous

Почему во всех новых языках для объявления функций пишут fn вместо func или function? Это действительно настолько удобнее или это в угоду лаконичности?

Это в угоду кретинизму. Современные IDE для писателей кода помогут быстро написать «function», и хорошо будет и писателю и читателю. Но нет, мы превратим язык в набор сокращений, не задумываясь о том, что исходный код программы предназначен таки для восприятия человеком. А не биороботом, который при чтении должен дополнительно парсить и преобразовывать читаемый текст.

Xintrea ★★★★★
()
Ответ на: комментарий от Xintrea

в угоду кретинизму было бы как раз разворачивать fn в function

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.