LINUX.ORG.RU

Zig 0.11

 , ,


1

3

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

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

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

  • Появился пакетный менеджер.
  • Улучшена поддержка powerpc, powerpc64le и Plan9.
  • Архитектура i386 переименована в x86.
  • Множественные улучшения и исправления для WebAssembly и появление специфичного для него аллокатора wasm_allocator.
  • Реализация компилятора Zig на Zig (self-hosted) полностью готова, а старый компилятор на C++ «выкинут на орбиту» (требования к ОЗУ для сборки снижены с 11 до 4 ГБ).
  • Обновлены сторонние компоненты:
    • LLVM 16.0.6;
    • musl 1.2.4;
    • wasi-libc 3189cd1ceec8771e8f27faab58ad05d4d6c369ef;
  • Множество изменений в стандартной библиотеке (подробнее).

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

anonymous

Проверено: cetjs2 ()
Последнее исправление: cetjs2 (всего исправлений: 3)

Ответ на: комментарий от gns

Суть в том что чем больше в языке конструкций тем больше дичи будет в коде. А тут у них прям какой-то шабаш:

f16	_Float16	16-bit floating point (10-bit mantissa) IEEE-754-2008 binary16
f32	float	32-bit floating point (23-bit mantissa) IEEE-754-2008 binary32
f64	double	64-bit floating point (52-bit mantissa) IEEE-754-2008 binary64
f80	double	80-bit floating point (64-bit mantissa) IEEE-754-2008 80-bit extended precision
f128	_Float128	128-bit floating point (112-bit mantissa) IEEE-754-2008 binary128

Если исключить «читаемость» из требований то можно очень легко дойти до полной эзотерики и в ней утонуть к херам.

alex0x08 ★★★
()

Так и не понял, зачем он нужен в мире, где придумали Rust. Но, судя по всему, кому-то нужен, так что поздравляю всех причастных.

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

заимплеменентить свой трейт как родительский трейт для чужого трейта

Звучит как дикий костыль которого не должно существовать. С такими запросами тебе в C++ или JS

Aswed ★★★★★
()

Ещё одно бесcмысленное поделие, пытающееся похоронить С, на похоронах которого С опять простудится.

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

Ну победы в International Obfuscated C Code Contest (https://www.ioccc.org/)  — это отдельный спорт (кстати, вот мое любимое оттуда — https://udel.edu/~mm/xmas/), однако цели у ребят из этой зиг-команды лично мне не понятны. Походу, имеем дело с ограниченностью мысли. Вместо того, что бы делать что-то полезное, будем писать очередное средство разработки по принципу «добавляя малое к малому получим большую кучу».

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

Походу, имеем дело с ограниченностью мысли.

Такого рода занятие это все равно лучше чем сочинять рэп в стиле Моргенштерна или шыряться по подвалам, осмысленность это уже дело десятое.

Очень много технически хреновых решений как-то хайпанули и выстрелили. Один node.js чего стоит.

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

Ну чем бы дитя не тешилось, конечно, лишь бы своих не заводило. :)

Не, ну, а так да, на одной (сомнительной) идее, о том, что висячие указатели — зло сколько уже языков-то наклепали. Ну вот еще один вклад в копилку сомнительно полезного труда.

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

С такими запросами тебе в C++ или JS

О да, JS просто незаменим, если нужно сделать тортик с надписью «Happy birthday, [Object Object]! undefined is a greate age!» Картинка гуглится по этой фразе.

А С++ растаманы убивать же вроде собрались? Или уже нет?

www_linux_org_ru ★★★★★
()
Последнее исправление: www_linux_org_ru (всего исправлений: 1)
Ответ на: комментарий от gns

«Слабее» в отношении языка — это что имеется в виду? Выразительность?

Не только. Речь еще о возможностях компилятора ловить ошибки в стандартных случаях, где отсутствие выразительности это не позволяет.

Язык А (просто тьюринг-полный денег-полный): переведи 100500 рублей с моей карты на карту 1234 5678 9012 3456.

Язык Б (более выразительный): переведи 100500 рублей с моей карты на карту 1234 5678 9012 3456 с сообщением «в долг до завтра».

Язык В (более что?): переведи 100500 рублей с моей карты на карту 1234 5678 9012 3456 с сообщением «в долг до завтра» этому бомжу, он обещает завтра вернуть вдвое больше. Компилятор:

Warning: The recipient is seem to be unable to give the specified amount of money back at the specified time.
Error: build failed due to --treat-warnings-as-errors.
www_linux_org_ru ★★★★★
()
Последнее исправление: www_linux_org_ru (всего исправлений: 1)
Ответ на: комментарий от www_linux_org_ru

а возможность писать и клиента, и сервер на одном языке.

Угу, это примерно как возможность писать и какать одновременно. Очень важная фича.

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

Не только. Речь еще о возможностях компилятора ловить ошибки в стандартных случаях, где отсутствие выразительности это не позволяет.

Ну это от компилятора зависит больше. Современные компиляторы С/С++ дают более вразумительную диагностику в плане «вы опечатались в символе print, наверное вы имели в виду printf» или при выборе перегруженной функции из стапицот возможных. Правда, простыня диагностики по поводу инстанцирования какой-нибудь объекта класса с темплейтами на три страницы по прежнему удручает :(

И от языка это не зависит. Сравните диагностику GCC и шланга на одном и том же коде :)

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

Ну...

А если к жопе присобачить сопроцессор фирмы Крэй, можно срать в даа унитаза в десять тысяч раз быстрей :)

gns ★★★★★
()

Говорят, там хотят LLVM тоже выкинуть.

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

Поздравляю с выходом из гибернации. Нынче даже для того что бы сделать свой модуль ядра не надо с раста на другой язык переходить.

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

И писать на нем все биндинги на kmalloc/kfree и свою версию printk. Вот счастье-то!... :(

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

Нынче даже для того что бы сделать свой модуль ядра не надо с раста на другой язык переходить.

Достижение-то какое, а? Я прям в шоке… а постойте, с++ вроде всегда такое позволял. Модули я писать не умею, но лет пять назад, когда тут на лоре кто-то страдал и на си писал remote shell, а ему давали советы, я для эксперимента лично для себя по этим советам накатал че-то (глючное наверно) на сокетах, с++ и uclibc без printf (или в этом духе) – и получилось меньше 1к статично слинкованное и отстрипованное. У того чувака было около 500…700 байт. Можно повторить этот эксперимент, взяв серверок из буста.

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

если к жопе присобачить

сопроцессор фирмы Крэй,

можно срать в даа унитаза

в десять тысяч раз быстрей

Шибко древний фольклор, нынешние и не понять могут. Это видимо еще начала 90-х, когда сопроцессор вставлялся в отдельную кроватку рядом с 386.

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

Не, это еще смешнее. CRAY X/Y-MP редко использовался как отдельный суперкомпьютер (хоть и мог, ОС на нем была), больно дорого его время стоило. Обычно, этот монстрик цеплялся к какому-нибудь VAXу. Можно было и чему еще, но это была традиционная связка, а VAXы и так были по дефолту у основных пользователей. Ну и VAX компилил задачу в коды крея и вгружал бинарь на исполнение по связке быстродействующих шин. И Крей всеми своими двумя-четырьмя-восемью векторно-конвейерными процессорами это все быстренько считал.

На многих фото Y/MP увидеть цилиндр с кожаным диванчиком по кругу (да, он так и выглядел) и VAX на заднем плане.

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

больно дорого его время стоило

У него там была аренда и повременная (понагрузочная) оплата крею, или же железо реально истиралось изнашивалось от вычислений, в отличие от простоя?

www_linux_org_ru ★★★★★
()
Последнее исправление: www_linux_org_ru (всего исправлений: 2)
Ответ на: комментарий от www_linux_org_ru

Я политики не знаю, «не застал» :) Основными заказчиками были всякая Ливерморская лаборатория и прочее минэнергеники США. Тупо было много расчетов, поэтому пакетный режим оправдывался. Я так думаю.

Посадить стопицот пользователей с редактором, почтой и кросс-компиллятором за терминалы VAXа было проще, дешевле и удобнее, чем то же количество за Крей (если это вообще возможно было, я точно не знаю). Посади за крей столько же, так он считать не будет, а будет контекстами щелкать и конвейеры чистить, что бы очередному пользователю программу откомпилить. Ну и где перформанс? Да и часть расчетов вполне можно было и на VAXе выполнять.

По сути, та же схема, что и при использовании современных графических карт в режиме CUDA. Никто же прям в карте в ее коды задачи не компилит и перключением контекста внутри карты не занимается, насколько я знаю.

gns ★★★★★
()
Последнее исправление: gns (всего исправлений: 3)

Кто-нить может объяснить почему zig генерит такие огромные бинарники?

$ cat 1.zig 
const std = @import("std");

pub fn main() !void {
    const stdout = std.io.getStdOut().writer();
    try stdout.print("Hello, {s}!\n", .{"world"});
}

$ zig build-exe 1.zig

$ ls -lah 1
-rwxr-xr-x  1 iron  wheel   1,0M  9 авг.  23:30 1

В то же время:

$ cat 1.c
#include <stdio.h>

int main() {
    puts("Hello World!");
    return 0;
}

$ cc 1.c

$ ls -la a.out 
-rwxr-xr-x  1 iron  wheel  6416  9 авг.  23:32 a.out

1M против 6k это, как бы, многоватенько. ЧЯДНТ?

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

Для этого господин упомянул про «выстрелили». Условно полезные вещи к хайпу не относятся.

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

У раста такая же беда, правда кому нужно было научились вырезать лишнее, но до сишного минимализма дотянуться всё равно не получается по объективным причинам.

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

но до сишного минимализма дотянуться всё равно не получается

Не, ну я пойму если бинарь будет в 2-3 раза больше, что можно списать на молодость языка. Так тут же более чем в 100 раз больше.

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

1M против 6k это, как бы, многоватенько. ЧЯДНТ?

Параметр -Doptimize=ReleaseSmall уменьшает размер файла:

$ zig init-exe
$ zig build -Doptimize=ReleaseSmall
$ stat -c %s zig-out/bin/z
8856
$ file zig-out/bin/z
zig-out/bin/z: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, stripped

для сравнения статически собранный 1.c:

$ gcc -Os -static 1.c
$ strip -s a.out
$ stat -c %s a.out
682688
$ file a.out
a.out: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), statically linked, stripped
No
()
Ответ на: комментарий от www_linux_org_ru

а постойте, с++ вроде всегда такое позволял

Не позволял

Модули я писать не умею

Заметно

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

Параметр -Doptimize=ReleaseSmall

Спасибо. Но если оптимизировать по скорости (Fast) то получается почему-то 66K.

для сравнения статически собранный 1.c

А зачем статически?

$ cc -O3 -Wl,--strip-all 1.c
$ ls -lah a.out
-rwxr-xr-x  1 iron  wheel   4,8K 10 авг.  13:59 a.out

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

Ткните пальчиком - куда смотреть, пожалуйста!

Пока - то что я видел, было лишь концептом.

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

А зачем статически?

zig собирает исполняемый файл статически, поэтому я и сравнивал размер с тоже статически собранной программой на C.

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

zig собирает исполняемый файл статически

Ок. А как собрать бинарь программы для работе в проде? Чтоб были оптимизации, минимальный возможный размер и стрипнутый бинарник?

iron ★★★★★
()
Ответ на: комментарий от no-such-file

Им надо выкинуть нолик, будет модно-молодёжно. Версия 11, чо.

$ less -V
less 590 (GNU regular expressions)
Copyright (C) 1984-2021  Mark Nudelman

Молодёжно?

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

Ок. А как собрать бинарь программы для работе в проде? Чтоб были оптимизации, минимальный возможный размер и стрипнутый бинарник?

Если под продом подразумевается Linux с musl, то тот статический бинарник и есть минимальный.

Если «как собрать бинарь с glibc», то что-то вроде

$ zig build -Doptimize=ReleaseSmall -lc -dynamic
monk ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.