Обновить
40
0
Мещеряков Александр@Self_Perfection

Линуксоид ПК

Отправить сообщение

Короче говоря вам важно оптимизировать под размер, если я правильно понял.

Это однако не означает, что Zig вам не подходит. Я не программист, но из того что я читал про него, это такой современный C, который в том числе прозрачно с C взаимодействует и позволяет собирать его проекты. Как я понимаю, zmx такой большой потому что работает через libghostty-vt, внутри всё-таки эмулируя терминал. А ему для этого дофига всего надо, например парсить юникод. Вот отчёт клода с анализом:

Что вносит основной вклад в размер (881Ki ReleaseSmall)

.text — 538Ki (61%)

┌──────────────────────────────┬─────────┬───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│           Источник           │ ~Размер │                                                                        Причина                                                                        │
├──────────────────────────────┼─────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ ghostty: terminal.*          │ ~170Ki  │ Terminal emulator: PageList, Screen, OSC parser, Stream, formatter — весь ghostty-vt                                                                  │
├──────────────────────────────┼─────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ log.scoped инстанциации      │ ~125Ki  │ 127Ki из одного ghostty terminal/stream — каждый log.warn("...", .{}) с уникальной format-строкой = отдельная скомпилированная функция (Zig comptime) │
├──────────────────────────────┼─────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ std.debug (panic/stacktrace) │ ~70Ki   │ DWARF reader (debug.Dwarf.ElfModule.load = 26Ki), stack unwinder, panic machinery. Тянется из-за того что binary linked с libcxx                      │
├──────────────────────────────┼─────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ zmx: main.*                  │ ~60Ki   │ Собственный код daemon, attach, list                                                                                                                  │
├──────────────────────────────┼─────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ std (fmt, collections)       │ ~65Ki   │ std.fmt, ArrayHashMap, etc.                                                                                                                           │
└──────────────────────────────┴─────────┴───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

.rodata — 227Ki (26%)

┌───────────────────────────────┬────────┬─────────────────────────────────────────────────────┐
│           Источник            │ Размер │                                                     │
├───────────────────────────────┼────────┼─────────────────────────────────────────────────────┤
│ props.Tables.stage2 (Unicode) │ 61Ki   │ Unicode property lookup table (ghostty-vt)          │
├───────────────────────────────┼────────┼─────────────────────────────────────────────────────┤
│ props.Tables.stage1 (Unicode) │ 16Ki   │ Второй уровень таблицы                              │
├───────────────────────────────┼────────┼─────────────────────────────────────────────────────┤
│ simdutf lookup tables         │ ~30Ki  │ UTF-8/UTF-16 SIMD conversion tables                 │
├───────────────────────────────┼────────┼─────────────────────────────────────────────────────┤
│ format strings & strings      │ ~120Ki │ Строковые литералы (в т.ч. от 155 log-инстанциаций) │
└───────────────────────────────┴────────┴─────────────────────────────────────────────────────┘

.eh_frame — 53Ki (6%)

C++ exception unwinding frames. Приходят от linkage с libcxxabi + libunwind (которые ghostty-vt тянет из-за SIMD C++ кода). Этот оверхед есть всегда при смешивании Zig + C++.

.data.rel.ro — 37Ki (4%)

Таблицы виртуальных функций C++ (vtables) из libcxxabi. Нужны для C++ exceptions / RTTI в simd/*.cpp.

---
Итоговая картина зависимостей

ghostty-vt (~65% размера)
├── terminal/* Zig code          ~170Ki .text  (VT emulator core)
├── unicode property tables       ~80Ki .rodata (Unicode lookup tables)
├── log.scoped инстанциации      ~125Ki .text  (ghostty's logging в stream.zig)
└── simd/ C++ (simdutf, highway)  ~40Ki .text  + C++ overhead:
    ├── .eh_frame                  53Ki         (C++ unwind frames)
    └── .data.rel.ro               37Ki         (C++ vtables/RTTI)

std.debug / panic machinery      ~70Ki .text   (DWARF reader для stacktrace)
cxa_demangle (libcxxabi)        ~132Ki VM       (C++ name demangler — для panic demangling)

zmx own code                     ~60Ki .text

Главные выводы

1. Доминирует ghostty-vt: ~65% бинарника. Это цена за использование полноценного VT эмулятора.
2. log.scoped(.stream).warn — 127Ki сюрприз. В ghostty terminal/stream.zig множество log-вызовов, каждый с уникальной строкой → Zig генерирует отдельную функцию на каждый. Это называется "log bloat" от comptime-инстанциации.
3. C++ overhead (libcxxabi + libunwind + .eh_frame + .data.rel.ro) = ~280Ki — неизбежная стоимость использования simd/*.cpp из ghostty, который тянет C++ runtime.
4. std.debug = ~70Ki — DWARF reader для красивых panic stacktrace. Без него было бы меньше.

Если бы вы писали atch на zig, размер бинарника вышел бы примерно как сейчас.

При ReleaseSmall zmx меньше мегабайта:

$ time zig build -Doptimize=ReleaseSmall

real    0m56,688s
user    3m11,146s
sys     0m22,207s
$ ls -l zig-out/bin/
total 884
-rwxrwxr-x 1 self self 901600 2026-03-07 18:38 zmx

Да и в вашем выводе 130K - это уже не килобайтики, а весомые сотни килобайт.
Да, собирается не быстро (atch ещё не пробовал собирать, так что не могу сравнить).

Ок, atch поменьше, зато у zmx язык моднее-безопаснее и звёзд у репы на порядок больше. Но все эти критерии мало что говорят и выбора я пока для себя не сделал.

Любопытно сравнить с другим вышедшим только что исследованием https://www.anthropic.com/research/labor-market-impacts

https://github.com/neurosnap/zmx видели?
Недавно появился и как я понимаю тоже с намерением сделать как dtach, но лучше.

Как такие смартфоны искать?

Сборка для F-Droid страдала от похожих проблем недавно: https://gitlab.com/relan/fennecbuild/-/issues/134
Тогда нашли workaround.

хорошо бы зарепортить вашу ситуацию куда-то

Сборка для F-Droid страдала от похожих проблем недавно: https://gitlab.com/relan/fennecbuild/-/issues/134

хорошо бы зарепортить вашу ситуацию куда-то

Но можно и не заниматься такой вознёй, а слать со своих прогулок фоточки своему партнёру и получать в ответ сердечки и пожелания круто оторваться. Тоже доступная опция!

Было бы неплохо уточнить OpenStreetMap о проверенных таксофонах.

Сейчас OSM знает в РФ 4643 общественныamenity=telefoneх телефона: https://overpass-turbo.eu/s/2eIN

Тег amenity=telefone

Поправите?

Там нечему развиваться, он просто показывает картинки )

$ xli /tmp/test.webp
/tmp/test.webp: unknown or unsupported image type

И это WebP, который уже лет 5 назад стал мейнстримом! Пора JPEG XL поддерживать.

feh, конечно, открывает.

xli заброшен и не развивается, постепенно вымывается из репозиториев. Переходите на feh.

А pqiv попробую посмотреть. Это вроде geeqie?

Главное отличие - сервер сессий уже есть в поставке.

А что это такое?

Отсутствие конфликтов прокруток и выделений — очень солидный аргумент! Я честно говоря считал решение этого практически невозможным. Что обязательно какой-нибудь sixel отвалится.

С другой стороны насколько я знаю tmux прозрачно интегрируется с iTerm (но я сам маки обхожу за километр)

У zellij конфиг выглядит как нормальный конфиг - key, value и набор вложенных лэйаутов в формете близком к json

Что только люди ни придумают лишь бы TOML не использовать (

Манов по настройке и дефолтного конфига, в который можно было бы заглянуть за опциями в поставке tmux не имется, насколько мне известно.

man tmux. Дефолтные параметры смотреть типа такого:
Run tmux show-options -g for session options and tmux show-window-options -g for window options.

Я попробовал почитать обзоры zellij но не увидел в них конкретных примеров преимуществ над tmux. Ну хоткеи discoverable - так я уже tmux запомнил

Можете привести пример чем пользуетесь?

Ну значит тем больше аргументов голосовать за пиратскую партию, если она есть в вашей стране.

Или рассказывать окружающим о проблемах.

Все сейчас решённые социальные проблемы осознавались как проблемы сначала небольшой долей людей. Так что в принципе, пусть иногда, но малое количество соратников — не приговор.

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

  • Можно посмотреть, может какое-то из установленных у вас приложений можно заменить на [ярлык на] вебсайт

  • Может показать кому-то из знакомых, что использование вебсайта вместо приложения даёт дополнительный контроль

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

Ещё один недостаток мобильных приложений по сравнению с вебсайтами — отсутствие контроля. В случае вебсайта легко скрыть лишние элементы вебсайта с помощью uBlock, слегка изменить в чём-то его работу или добавить недостающую именно тебе функцию через Tamper Monkey. Сейчас, с появлением LLM, сделать такие модификации вебсайта стало особенно легко.

Есть несколько механизмов, которые будут этому препятствовать:

  • У них будет в принципе гораздо меньше клиентов, кто хочет купить в последний день/втридорога. Сейчас к ним обращаются от безысходности: билеты в продаже кончились. А в моей схеме большинство их потенциальных клиентов сами себе купят на аукционе билет в один из первых дней, пока дешевле.

  • Непонятно как посетителю иметь высокую гарантию, что перекуп продал билет только ему одному и он не окажется на входе в ситуации, что кто-то по билету уже вошёл. За уменьшение рисков можно и чуть заплатить больше.

  • Если есть задача бороться с перекупами ещё сильнее, то см.

Или продавать билеты только на кошельки, на которых есть выдаваемый гос. органами NFT условно "паспорта", для которого государство гарантирует, что один человек больше одного такого NFT не получит.

И без опции "передать NFT билета другому владельцу". Только вариант отказаться вернув в общий пул и получив назад что заплатил.

Не понял вашу мысль совсем.

Скальперам в моей схеме места нет.

Им бессмыленно участвовать в аукционе в первый день продаж, когда нужно заплатить на 5% участника с самой низкой ставкой, чтобы перекупить билет, потому что гипотетический клиент скальпера, который раньше к нему обращался за билетом, потому что билеты в свободной продаже быстро кончались, лучше сам поучаствует в аукционе в первые дни аукциона.

И тем более скальперу бессмысленно покупать билет в последний день, когда нужно заплатить x10 от минимальной ставки.

Ну тут целый спектр возможностей.

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

Или продавать билеты только на кошельки, на которых есть выдаваемый гос. органами NFT условно "паспорта", для которого государство гарантирует, что один человек больше одного такого NFT не получит.

1
23 ...

Информация

В рейтинге
Не участвует
Откуда
Москва и Московская обл., Россия
Зарегистрирован
Активность

Специализация

Системный администратор, DevOps-инженер
Linux
Bash
Nginx
PostgreSQL
Git
Docker