commit -m "better"
Есть такой классный torrent клиент transmission. Мне казалось, что на него, в последние годы, подзабили - последний релиз был почти 3 года назад, а до этого - в 18 году. Но нет, коллеги продолжают работать, и за последние несколько месяцев вышло 3 беты,…
Как я и говорил, случился релиз, и даже +1 patch - https://github.com/transmission/transmission/releases/tag/4.0.1
Я сразу не написал про это, потому что у меня, почему-то, падал gtk port.
Наконец, разобрался, рассказываю.
Там, по всему коду, появились вот такие вот глобальные объекты - https://github.com/transmission/transmission/blob/main/gtk/DetailsDialog.cc#L2008
Они стали предметом initialization order fiasco, потому что, в случае использования динамических библиотек, порядок выполнения конструкторов более определен, чем в случае статической линковки (например, можно гарантировать, что статические объекты зависимой .so будут сконструированы раньше, чем объекты программы).
Запилил следующее преобразование всех исходников - https://github.com/stal-ix/ix/blob/main/pkgs/bin/transmission/gtk/unwrap/ix.sh#L67
Оно все такие глобальные объекты заменяет на синглтон Майерса. И перенаправляет все вызовы в него, с помощью препроцессора - https://github.com/stal-ix/ix/blob/main/pkgs/bin/transmission/gtk/unwrap/ix.sh#L68
Вроде, работает!
Xочет кто-нибудь это запушить в upstream? Почет, слава, вот это вот все.
Я сразу не написал про это, потому что у меня, почему-то, падал gtk port.
Наконец, разобрался, рассказываю.
Там, по всему коду, появились вот такие вот глобальные объекты - https://github.com/transmission/transmission/blob/main/gtk/DetailsDialog.cc#L2008
Они стали предметом initialization order fiasco, потому что, в случае использования динамических библиотек, порядок выполнения конструкторов более определен, чем в случае статической линковки (например, можно гарантировать, что статические объекты зависимой .so будут сконструированы раньше, чем объекты программы).
Запилил следующее преобразование всех исходников - https://github.com/stal-ix/ix/blob/main/pkgs/bin/transmission/gtk/unwrap/ix.sh#L67
Оно все такие глобальные объекты заменяет на синглтон Майерса. И перенаправляет все вызовы в него, с помощью препроцессора - https://github.com/stal-ix/ix/blob/main/pkgs/bin/transmission/gtk/unwrap/ix.sh#L68
Вроде, работает!
Xочет кто-нибудь это запушить в upstream? Почет, слава, вот это вот все.
GitHub
Release 4.0.1 · transmission/transmission
Transmission 4.0.1
The 4.0.0 release two weeks ago generated a lot of useful feedback (thank you!!) so we've been busy fixing bugs. This release has only bug fixes, documentation improvements, ...
The 4.0.0 release two weeks ago generated a lot of useful feedback (thank you!!) so we've been busy fixing bugs. This release has only bug fixes, documentation improvements, ...
👍6🤯3🤔2👌1
commit -m "better"
https://gavinhoward.com/2023/02/my-code-conquered-another-os/ Оказывается, не только я обратил внимание на эту прекрасную реализацию bc, и теперь она ставится по умолчанию: * FreeBSD * Gentoo * А теперь и в macOS! Не считая stal/IX, конечно. Поздравим…
#gavin, будни #bootstrap
Коллега сошел с ума, и запилил зависимость bc install script от bc, что, конечно, доставляет - https://github.com/gavinhoward/bc/issues/63
https://github.com/gavinhoward/bc/blob/master/scripts/safe-install.sh#L28
Я эту проблему решил, собрав bc 2 раза - один раз для host, и тогда мы можем пользоваться свежесобранным bc - https://github.com/pg83/ix/blob/main/pkgs/bld/bc/ix.sh#L8, и второй раз для target, где мы просто делаем зависимость на предыдущий target - https://github.com/pg83/ix/blob/main/pkgs/bin/bc/gavin/ix.sh#L9
Ну, такое.
Правда, такой финт ушами приходится делать вообще для всех скриптовых языков (perl - https://github.com/pg83/ix/blob/main/pkgs/bin/perl/ix.sh#L11, python, ruby), которым вынь да положь свой рабочий интерпретатор во время сборки.
А чем bc хуже?..
Коллега сошел с ума, и запилил зависимость bc install script от bc, что, конечно, доставляет - https://github.com/gavinhoward/bc/issues/63
https://github.com/gavinhoward/bc/blob/master/scripts/safe-install.sh#L28
Я эту проблему решил, собрав bc 2 раза - один раз для host, и тогда мы можем пользоваться свежесобранным bc - https://github.com/pg83/ix/blob/main/pkgs/bld/bc/ix.sh#L8, и второй раз для target, где мы просто делаем зависимость на предыдущий target - https://github.com/pg83/ix/blob/main/pkgs/bin/bc/gavin/ix.sh#L9
Ну, такое.
Правда, такой финт ушами приходится делать вообще для всех скриптовых языков (perl - https://github.com/pg83/ix/blob/main/pkgs/bin/perl/ix.sh#L11, python, ruby), которым вынь да положь свой рабочий интерпретатор во время сборки.
А чем bc хуже?..
GitHub
bc -> bc dependency loop · Issue #63 · gavinhoward/bc
https://github.com/gavinhoward/bc/blob/master/scripts/safe-install.sh#L28 creates hard dependency loop on previously available bc for install process, which can be not available: in bootstrap envir...
👍5🤔5🤡5
commit -m "better"
#gavin, будни #bootstrap Коллега сошел с ума, и запилил зависимость bc install script от bc, что, конечно, доставляет - https://github.com/gavinhoward/bc/issues/63 https://github.com/gavinhoward/bc/blob/master/scripts/safe-install.sh#L28 Я эту проблему…
Не сошел с ума, а просто ошибся! https://github.com/gavinhoward/bc/issues/63#issuecomment-1443908686
(кстати, напомню тем, кто к нам недавно присоединился, что мы тут любим сумасшедших, они делают все самое интересное)
(кстати, напомню тем, кто к нам недавно присоединился, что мы тут любим сумасшедших, они делают все самое интересное)
GitHub
bc -> bc dependency loop · Issue #63 · gavinhoward/bc
https://github.com/gavinhoward/bc/blob/master/scripts/safe-install.sh#L28 creates hard dependency loop on previously available bc for install process, which can be not available: in bootstrap envir...
👍15😁2🤔2
https://www.phoronix.com/news/Mesa-Zink-DB-Descriptor-Mode
https://www.phoronix.com/news/Mesa-RADV-Cyberpunk-2077-RT
Несколько новостей про #mesa, в том числе, вышла новая мажорная ее версия, 23 - https://www.opennet.ru/opennews/art.shtml?num=58705
И я решил, что больше ждать не могу, надо обновляться. Обновиться я не мог целый год, потому что в 22.1 сломали настройку контекса в #zink + radv, так, что у меня по разному в разных релизах отваливались куски браузера #epiphany.
В итоге, я обновился, но #webkit использует канву без 3d ускорения, все остальные приложения работают "как надо".
Я было соорудил кадавра, чтобы WebKitWebProcess использовал старую mesa, 22.0, но потом решил, что поддерживтаь такое в долгосроке не хочу.
Так же я попробовал, например, собрать весь мир с radv + zink, а браузер и webkitproc c radeonsi, но оно тоже, почему-то, не полетело.
https://www.phoronix.com/news/Mesa-RADV-Cyberpunk-2077-RT
Несколько новостей про #mesa, в том числе, вышла новая мажорная ее версия, 23 - https://www.opennet.ru/opennews/art.shtml?num=58705
И я решил, что больше ждать не могу, надо обновляться. Обновиться я не мог целый год, потому что в 22.1 сломали настройку контекса в #zink + radv, так, что у меня по разному в разных релизах отваливались куски браузера #epiphany.
В итоге, я обновился, но #webkit использует канву без 3d ускорения, все остальные приложения работают "как надо".
Я было соорудил кадавра, чтобы WebKitWebProcess использовал старую mesa, 22.0, но потом решил, что поддерживтаь такое в долгосроке не хочу.
Так же я попробовал, например, собрать весь мир с radv + zink, а браузер и webkitproc c radeonsi, но оно тоже, почему-то, не полетело.
Phoronix
Mesa 23.1 Zink Change Further Lowers CPU Overhead, Less vRAM Utilization
Yet another Zink OpenGL-on-Vulkan driver optimization has landed in Mesa 23.1 ahead of its official release next quarter.
👍4
https://www.kitware.com/import-cmake-c20-modules/
А вот, например, текст от Kitware, про поддержку модулей в cmake.
Про то, как они пропихивали динамические зависимости в разные там ninja/clang/gcc.
Если честно, когда я прочел про то, что они запилили свой форк ninja в 2015 году, для поддержки модулей в fortran, и смогли его смержить в upstream только недавно, после появления модулей в C++, я заплакал кровавыми слезами, и дальше читать не стал.
#cmake
А вот, например, текст от Kitware, про поддержку модулей в cmake.
Про то, как они пропихивали динамические зависимости в разные там ninja/clang/gcc.
Если честно, когда я прочел про то, что они запилили свой форк ninja в 2015 году, для поддержки модулей в fortran, и смогли его смержить в upstream только недавно, после появления модулей в C++, я заплакал кровавыми слезами, и дальше читать не стал.
#cmake
Kitware
import CMake; C++20 Modules
Update As of Oct 2023, the experimental flags mentioned in this article have been removed for module support in CMake. Please see this article for an update on how to use C++ 20 named modules in CMake. If you want to understand the technical and historical…
🤔5🤡3🤣2😐1
commit -m "better"
https://www.kitware.com/import-cmake-c20-modules/ А вот, например, текст от Kitware, про поддержку модулей в cmake. Про то, как они пропихивали динамические зависимости в разные там ninja/clang/gcc. Если честно, когда я прочел про то, что они запилили свой…
This media is not supported in your browser
VIEW IN TELEGRAM
commit -m "better"
Шапито продолжается, потому что, с выходом новой версии #harfbuzz появилась зависимость harfbuzz -> cairo, и у нас теперь тройной цикл: cairo -> freetype -> harfbuzz -> cairo. "New hb-cairo API for integrating with cairo graphics library. This is provided…
https://github.com/harfbuzz/harfbuzz/issues/2524#issuecomment-1437382934 #harfbuzz
Потрындел с matthiasclasen и behdad про эту circular dep.
Неожиданно, после небольшой попытки забуллшитить, они назвали настоящую причину - никто не хочет заниматься package management, поэтому положили, куда проще, а не куда правильнее.
В целом, я их понимаю (хотя понять != простить), потому что запилить новый пакет и протащить его во все downstream дистрибутивы - то еще развлечение.
Потрындел с matthiasclasen и behdad про эту circular dep.
Неожиданно, после небольшой попытки забуллшитить, они назвали настоящую причину - никто не хочет заниматься package management, поэтому положили, куда проще, а не куда правильнее.
В целом, я их понимаю (хотя понять != простить), потому что запилить новый пакет и протащить его во все downstream дистрибутивы - то еще развлечение.
GitHub
Discuss: resolve harfbuzz<->freetype circular dependency via a C header-only hb-ft.h implementation · Issue #2524 · harfbuzz/harfbuzz
This concept occurred to me while discussing the problems with the current circular dependency between these two libraries. Essentially, we could pull the contents of hb-ft.cc out into hb-ft.h, and...
🤔5👍2😁2
#mesa #rant
https://gitlab.freedesktop.org/mesa/mesa/-/issues/6578#note_1795307
В #mesa совершенно аховая обработка ошибок. Можно сказать, что ее там нет совсем, потому что есть несколько мест, где строки меняют на коды ошибок, и наоборот.
Поэтому 2 высокогрейдовых специалиста обсуждают, как им половчее проаугментировать кодовую базу принтфами, чтобы разобраться в проблеме.
Дело еще осложняется тем, что падает worker в webkit, которых всегда запускается строго больше 1, это число не конфигурируется, и падает оно прямо на старте. То есть, нельзя получить устоявшуюся конфигурацию процессов, приаттачиться к нужному, и подебажить.
Такое ощущение, что в #mesa, что в #webkit, славно потрудились над job security, ага. Отлаживать это невозможно от слова совсем.
https://gitlab.freedesktop.org/mesa/mesa/-/issues/6578#note_1795307
В #mesa совершенно аховая обработка ошибок. Можно сказать, что ее там нет совсем, потому что есть несколько мест, где строки меняют на коды ошибок, и наоборот.
Поэтому 2 высокогрейдовых специалиста обсуждают, как им половчее проаугментировать кодовую базу принтфами, чтобы разобраться в проблеме.
Дело еще осложняется тем, что падает worker в webkit, которых всегда запускается строго больше 1, это число не конфигурируется, и падает оно прямо на старте. То есть, нельзя получить устоявшуюся конфигурацию процессов, приаттачиться к нужному, и подебажить.
Такое ощущение, что в #mesa, что в #webkit, славно потрудились над job security, ага. Отлаживать это невозможно от слова совсем.
GitLab
zink, radv: broken epiphany web browser (#6578) · Issues · Mesa / mesa · GitLab
I am using sway with vulkan renderer, and zink, as primary opengl implementation, over export MESA_LOADER_OVERRIDE=zink, with amdgpu: ATOM BIOS: 113-CEZANNE-018 After transition from mesa 22.0.4...
🔥12👍4😁1
Forwarded from ДЕВОПСИНА | DevOps | Linux
This media is not supported in your browser
VIEW IN TELEGRAM
😁16🔥5👍1🤮1
#bootstrap
У меня, знаете ли, часто зудит мысль, что clang + musl - не самая популярная связка компилятора и libc. А один умный человек мне однажды сказал, что наиболее безглючный код - это тот, который позвали наибольшим возможным числом способов, желательно, в gdb.
Код под Linux чаще всего собирается с gcc + glibc, а под mac, где используется clang, собирается другой набор программ, и с другой libc.
Поэтому, когда я вижу вот такое, с новым выпуском clang:
https://gitlab.gnome.org/GNOME/glib/-/blob/main/glib/gstrfuncs.h#L207 - вот тут написано, буквально, следующее - "для константных строк в gcc применим какую-то всратую оптимизацию, без нормально определенной семантики, и которая будет ломаться от gcc к gcc, потому что это не С, и на этот код примерно всем насрать". А когда clang решит, что достаточно хорошо поддержал эту никому не известную упячку из gcc, будем в нем ломаться вдвойне.
Я, от греха подальше, раздефайнил эти оптимизации к херам - https://github.com/pg83/ix/commit/b38e152954363020588192f88c70b47b410c2257
Это, так сказать, был пассивный #hardening.
А есть еще и активный.
Например, по тем же соображениям, я "отменил" UB при переполнении целых чисел, ну и strict aliasing заодно. https://github.com/pg83/ix/blob/main/pkgs/lib/build/opt/safe/ix.sh
Ну потому что clang смотрит на код не совсем так, и, наверняка, проэксплуатирует UB, незаметный при сборке с gcc.
Это все, конечно, про дефолты, а так пользователь может выстрелить себе в ногу любым удобным ему способом, если зачем-то захочет.
Мне сложно оценить эффект от этих действий количественно (на количество багов, перф - единицы процентов), но он точно ненулевой, потому что, со временем, некоторые подземные стуки, которые у меня не было времени отладить, проходят как бы "сами собой".
У меня, знаете ли, часто зудит мысль, что clang + musl - не самая популярная связка компилятора и libc. А один умный человек мне однажды сказал, что наиболее безглючный код - это тот, который позвали наибольшим возможным числом способов, желательно, в gdb.
Код под Linux чаще всего собирается с gcc + glibc, а под mac, где используется clang, собирается другой набор программ, и с другой libc.
Поэтому, когда я вижу вот такое, с новым выпуском clang:
.../parameter/array.h:85:23: warning:То я начинаю сильно нервничать на тему "а как это вообще работает", и думать, как сделать так, чтобы я от этого не страдал.
object backing the pointer
will be destroyed at the end
of the full-expression
[-Wdangling-gsl]
gchar * str = g_strdup(os.str().c_str());
^~~~~~~~~~~~~~~~~~~~~~~~~~
.../include/glib-2.0/glib/gstrfuncs.h:212:51:
note: expanded from macro 'g_strdup'
const char *const __str = _G_STR_NONNULL (___str);
^~~
.../include/glib-2.0/glib/gstrfuncs.h:157:29:
note: expanded from macro '_G_STR_NONNULL'
#define _G_STR_NONNULL(x) ((x) + !(x))
https://gitlab.gnome.org/GNOME/glib/-/blob/main/glib/gstrfuncs.h#L207 - вот тут написано, буквально, следующее - "для константных строк в gcc применим какую-то всратую оптимизацию, без нормально определенной семантики, и которая будет ломаться от gcc к gcc, потому что это не С, и на этот код примерно всем насрать". А когда clang решит, что достаточно хорошо поддержал эту никому не известную упячку из gcc, будем в нем ломаться вдвойне.
Я, от греха подальше, раздефайнил эти оптимизации к херам - https://github.com/pg83/ix/commit/b38e152954363020588192f88c70b47b410c2257
Это, так сказать, был пассивный #hardening.
А есть еще и активный.
Например, по тем же соображениям, я "отменил" UB при переполнении целых чисел, ну и strict aliasing заодно. https://github.com/pg83/ix/blob/main/pkgs/lib/build/opt/safe/ix.sh
Ну потому что clang смотрит на код не совсем так, и, наверняка, проэксплуатирует UB, незаметный при сборке с gcc.
Это все, конечно, про дефолты, а так пользователь может выстрелить себе в ногу любым удобным ему способом, если зачем-то захочет.
Мне сложно оценить эффект от этих действий количественно (на количество багов, перф - единицы процентов), но он точно ненулевой, потому что, со временем, некоторые подземные стуки, которые у меня не было времени отладить, проходят как бы "сами собой".
GitLab
glib/gstrfuncs.h · main · GNOME / GLib · GitLab
Low-level core library that forms the basis for projects such as GTK+ and GNOME.
👍6🔥6😁2
Потихоньку собираю запчасти, которые я использую, в единое целое.
Ну, вот, знаете, чтобы ссылки из разных программ открывались единообразно, чтобы привязки программ к типам файлов работали единообразно (без специальных настроек), и так далее.
Для этого начал пилить свой xdg portal - https://github.com/pg83/portal
Для этого мне пришлось познакомиться с dbus вплотную, хотя я очень не хотел это делать, потому что было понятно, что это страшное УГ. Ниже не исчерпывающий список, а так, для примера:
* https://github.com/godbus/dbus/blob/master/_examples/server.go#L12 - куски xml, которые напрямую пишутся в wire protocol, для интроспекции. (Во flathub xdg portal оно еще и конкатенацией строится, да).
* Нет общего дерева сервисов, ну или я что-то сильно не понял. Казалось бы, сервис - это путь объекта в какой-то иерархичной модели + интерфейс, которй он реализует. Но нет, сервис уникально идентифицирует (service_name, path, interface), то есть, иерархий объектов произвольно много. Я не понимаю, как это объяснить, кроме как пресловутого "не договорились" - кто-то хотел путь в виде A.B.C, а кто-то - A/B/C, сделали оба варианта.
* Великолепное решение проблемы долгих ответов в асинхронной модели. https://flatpak.github.io/xdg-desktop-portal/#idm9 TL;DR - клиент присылает уникальный endpoint, по которому клиент поднимает микросервис с одной ручкой, которую должен дернуть хендлер оригинального запроса в сервере. Леденящий душу пиздец, чо.
Ну, вот, знаете, чтобы ссылки из разных программ открывались единообразно, чтобы привязки программ к типам файлов работали единообразно (без специальных настроек), и так далее.
Для этого начал пилить свой xdg portal - https://github.com/pg83/portal
Для этого мне пришлось познакомиться с dbus вплотную, хотя я очень не хотел это делать, потому что было понятно, что это страшное УГ. Ниже не исчерпывающий список, а так, для примера:
* https://github.com/godbus/dbus/blob/master/_examples/server.go#L12 - куски xml, которые напрямую пишутся в wire protocol, для интроспекции. (Во flathub xdg portal оно еще и конкатенацией строится, да).
* Нет общего дерева сервисов, ну или я что-то сильно не понял. Казалось бы, сервис - это путь объекта в какой-то иерархичной модели + интерфейс, которй он реализует. Но нет, сервис уникально идентифицирует (service_name, path, interface), то есть, иерархий объектов произвольно много. Я не понимаю, как это объяснить, кроме как пресловутого "не договорились" - кто-то хотел путь в виде A.B.C, а кто-то - A/B/C, сделали оба варианта.
* Великолепное решение проблемы долгих ответов в асинхронной модели. https://flatpak.github.io/xdg-desktop-portal/#idm9 TL;DR - клиент присылает уникальный endpoint, по которому клиент поднимает микросервис с одной ручкой, которую должен дернуть хендлер оригинального запроса в сервере. Леденящий душу пиздец, чо.
GitHub
GitHub - pg83/portal
Contribute to pg83/portal development by creating an account on GitHub.
🤡11👍2🔥2🐳1
commit -m "better"
https://www.hillelwayne.com/post/np-hard/ Текст про мои любимые #sat солверы. #Z3 (для связности) Интересная мысль, которую я раньше не думал: "Of course life isn’t that easy and randomly generated SAT problems tend to be intractable.4 But a lot of industrial…
Красивое про #sat
https://ahelwer.ca/post/2018-02-13-z3-firewall/
Тот случай, когда по названию статьи сразу понимаешь, что там будет сделано, как, и думаешь: "блин, классно, почему я раньше про такое не думал/не слышал".
https://ahelwer.ca/post/2018-02-13-z3-firewall/
Тот случай, когда по названию статьи сразу понимаешь, что там будет сделано, как, и думаешь: "блин, классно, почему я раньше про такое не думал/не слышал".
Andrew Helwer
Checking Firewall Equivalence with Z3
Lessons I’ve learned from software engineering are uniformly cynical:
Abstraction almost always fails; you can’t build something on top of a system without understanding how that system …
Abstraction almost always fails; you can’t build something on top of a system without understanding how that system …
🔥7👍3🤔2
commit -m "better"
Слушайте, ну мужик сказал - мужик сделал! #ix_run #dev_shell ... HOSTCC scripts/basic/fixdep HOSTCC scripts/kconfig/mconf.o HOSTCC scripts/kconfig/lxdialog/checklist.o HOSTCC scripts/kconfig/lxdialog/inputbox.o HOSTCC scripts/kconfig/lxdialog/menubox.o…
"ix run" (или любая другая метапоисковая система), конечно, сильно меняет подход к разработке. #ix_run #dev_shell
Свой go-шный portal я собираю, например, вот так - https://github.com/pg83/portal/blob/main/build.sh
Хочется cgo, и зависимость от какий-то C-шной библиотеки?
Свой go-шный portal я собираю, например, вот так - https://github.com/pg83/portal/blob/main/build.sh
ix run set/dev/go -- go build"Где-то там" строится временный #realm, со всем нужным окружением, в котором запускается свежесобранный go build на мой проект. Оверхед - доли секунды.
Хочется cgo, и зависимость от какий-то C-шной библиотеки?
ix run set/dev/go --cgo lib/gtk/3 -- go build ...Мне кажется, в ближайшие годы какой-то другой способ разрабатываться в oss должен уйти в небытие, потому что, как я уже несколько раз писал, такие метапакетные системы постепенно идут в массы.
GitHub
portal/build.sh at main · pg83/portal
Contribute to pg83/portal development by creating an account on GitHub.
🔥15🤡3👍2🤔2✍1
Forwarded from РАСТ
This media is not supported in your browser
VIEW IN TELEGRAM
Анонс курса раста в следующем году. Распространяйте среди первокурсников, чтобы все выбирали нас!
🔥22😁11🥰7
Тут вот Данила "наше все" #Lemire запилил бенчмарк https://lemire.me/blog/2023/03/03/float-parsing-benchmark-regular-visual-studio-clangcl-and-linux-gcc/
Что он бенчмаркал, непонятно (может, свою fast_float, может, компиляторы, а может, виндовый шедулер), потому что:
Под винду сравнил VS/std vs. VS/fastfloat vs. clang/fastfloat, ну и добавил, для пикантности, сравнение с gcc/wsl/???.
Знаете, когда смотрят на перф, то стараются изменять 1 параметр, и пишут, что меняют, чтобы было понятно, что происходит.
Из его сравнения можно сделать однозначный вывод, что MSVC сосет (как компилятор), ну и... все.
Не бенчмаркайте так, как это сделал Лемир!
Что он бенчмаркал, непонятно (может, свою fast_float, может, компиляторы, а может, виндовый шедулер), потому что:
Под винду сравнил VS/std vs. VS/fastfloat vs. clang/fastfloat, ну и добавил, для пикантности, сравнение с gcc/wsl/???.
Знаете, когда смотрят на перф, то стараются изменять 1 параметр, и пишут, что меняют, чтобы было понятно, что происходит.
Из его сравнения можно сделать однозначный вывод, что MSVC сосет (как компилятор), ну и... все.
Не бенчмаркайте так, как это сделал Лемир!
😁10🤔2🐳2🔥1👌1
commit -m "better"
Потихоньку собираю запчасти, которые я использую, в единое целое. Ну, вот, знаете, чтобы ссылки из разных программ открывались единообразно, чтобы привязки программ к типам файлов работали единообразно (без специальных настроек), и так далее. Для этого начал…
Меня тут спрашивают, зачем я решил запилить свой портал.
Рассказываю.
Недавно писал про то, что, при обновлении #mesa до 23 ветки, у меня сломался #zink opengl driver для связки epiphany + ее WebKitWebProcess (это отдельный процесс для рендеринга(и не только)).
Тогда я решил это тем, что собрал epiphany + WebKitProc(blabla) в софтверном режиме.
Но это, конечно, было очень медленно, и нужно было решить проблему более лучше.
Как можно в #mesa выбрать opengl driver для приложения?
* Поправить всратый xml с конфигами - настройками - хаками для приложений, которые не работают с дефолтными настройками. https://gitlab.freedesktop.org/mesa/mesa/-/blob/main/src/util/00-mesa-defaults.conf Да, там strcmp() по имени приложения, так себе решение, я решил этот способ оставить на самый крайний случай.
* Второй способ - вмешаться в загрузчик драйверов в egl, и как-то override его решение. Я так и хотел сделать, но, к сожалению, zink прикручен к mesa через жопу. Он хочет не только драйвер, но чтобы при загрузке приложения была выставлена опция, котороая говорит, что надо использовать именно zink. Почему? Потому что, вместо того, чтобы протащить какие-то настройки через фабрику с драйверами, им оказалось проще в 5 местах кода сделать проверку на == "zink". Особенно "вредное" место - https://gitlab.freedesktop.org/mesa/mesa/-/blob/main/src/egl/main/eglapi.c#L695
Что тут написано? Тут написано, что zink - не настоящий драйвер, он в своем коде использует запчасти из opengl software renderer, и ему надо инициализироваться сложнее, чем позвать функцию инициализации из драйвера.
Сразу видно руку мастера, а точнее, программиста на 300000кк/сек, которому после него хоть трава не расти.
Ну и, поэтому, вмешаться в код выбора драйвера просто не помогло бы, потому что выбор случается раньше.
* Третий способ - выставить вот эту самую переменную в разные значения для разных приложений.
Казалось бы, во враппере для epiphany выставляем эту переменную среды, и все работает?
Почти, но не совсем.
Перестают работать всякие внешние программы, которые мы можем позвать для открытия файлов, которые только что скачали. Потому что это же обычные, хорошие, программы, которым нужно другое значение этой переменной среды, общее для всей остальной системы.
И тут я, конечно, вспомнил про то, что epiphany умеет работать во flatpak/snap, а значит, умеет использовать порталы, а значит, умеет вызывать внешние программы для просмотра файлов через портал. Дальше мой портал открывает приложение для просмотра в чистом окружении, в котором нет испорченной переменной среды MESA_LOADER_DRIVER_OVERRIDE.
(на самом деле, я тут чуть-чуть срезал, и путь до портала не совсем такой, но это сильно усложнило бы повествование, и не дало бы больше понимания)
Ну а дальше дело было за малым.
Рассказываю.
Недавно писал про то, что, при обновлении #mesa до 23 ветки, у меня сломался #zink opengl driver для связки epiphany + ее WebKitWebProcess (это отдельный процесс для рендеринга(и не только)).
Тогда я решил это тем, что собрал epiphany + WebKitProc(blabla) в софтверном режиме.
Но это, конечно, было очень медленно, и нужно было решить проблему более лучше.
Как можно в #mesa выбрать opengl driver для приложения?
* Поправить всратый xml с конфигами - настройками - хаками для приложений, которые не работают с дефолтными настройками. https://gitlab.freedesktop.org/mesa/mesa/-/blob/main/src/util/00-mesa-defaults.conf Да, там strcmp() по имени приложения, так себе решение, я решил этот способ оставить на самый крайний случай.
* Второй способ - вмешаться в загрузчик драйверов в egl, и как-то override его решение. Я так и хотел сделать, но, к сожалению, zink прикручен к mesa через жопу. Он хочет не только драйвер, но чтобы при загрузке приложения была выставлена опция, котороая говорит, что надо использовать именно zink. Почему? Потому что, вместо того, чтобы протащить какие-то настройки через фабрику с драйверами, им оказалось проще в 5 местах кода сделать проверку на == "zink". Особенно "вредное" место - https://gitlab.freedesktop.org/mesa/mesa/-/blob/main/src/egl/main/eglapi.c#L695
Что тут написано? Тут написано, что zink - не настоящий драйвер, он в своем коде использует запчасти из opengl software renderer, и ему надо инициализироваться сложнее, чем позвать функцию инициализации из драйвера.
Сразу видно руку мастера, а точнее, программиста на 300000кк/сек, которому после него хоть трава не расти.
Ну и, поэтому, вмешаться в код выбора драйвера просто не помогло бы, потому что выбор случается раньше.
* Третий способ - выставить вот эту самую переменную в разные значения для разных приложений.
Казалось бы, во враппере для epiphany выставляем эту переменную среды, и все работает?
Почти, но не совсем.
Перестают работать всякие внешние программы, которые мы можем позвать для открытия файлов, которые только что скачали. Потому что это же обычные, хорошие, программы, которым нужно другое значение этой переменной среды, общее для всей остальной системы.
И тут я, конечно, вспомнил про то, что epiphany умеет работать во flatpak/snap, а значит, умеет использовать порталы, а значит, умеет вызывать внешние программы для просмотра файлов через портал. Дальше мой портал открывает приложение для просмотра в чистом окружении, в котором нет испорченной переменной среды MESA_LOADER_DRIVER_OVERRIDE.
(на самом деле, я тут чуть-чуть срезал, и путь до портала не совсем такой, но это сильно усложнило бы повествование, и не дало бы больше понимания)
Ну а дальше дело было за малым.
GitLab
src/util/00-mesa-defaults.conf · main · Mesa / mesa · GitLab
Mesa 3D graphics library
🔥5👍4🤔4
commit -m "better"
#xiaomi https://www.ixbt.com/news/2022/07/01/oled-4k-dolby-vision-xiaomi.html Кто-то ждет выставок от Apple, а я вот теперь жду Xiaomi. Через 2 дня они представят свои "прошки", и, если доставка будет работать, это будет мой следующий ноутбук. Знаете, я…
#xiaomi
Кстати, купил я новый book pro, на Новый Год.
Поставил, конечно, #stal/ix, не с первого раза, потому что первая попытка окирпичила ноут (я полагаю, что эти долбоебы положили какие-то запчасти от загрузчика не во flash, а на раздел на диске, потому что все шло хорошо, пока я не удалил раздел с виндой).
Экран классный, процессор быстрый, греется меньше, чем прошлая модель.
Не без linux глюков, какие-то проблемы с ACPI, не всегда уходит в сон.
Купил ноут на алишечке, поэтому он без русских букв на клавиатуре.
Неожиданно для себя (в 40-то лет) понял, что давно уже печатаю, не смотря на клавиатуру. Поначалу было сложно, мозг отказывался верить, что у него получается работать, не видя русские буквы, но за пару дней я приспособился.
Правда, если я начинаю пытаться нажать на какую-то букву осознано, то, часто, не могу найти ее с первого раза. Поэтому, если где-то ошибся, то проще стереть слово, и напечатать его целиком, на автомате.
Кстати, купил я новый book pro, на Новый Год.
Поставил, конечно, #stal/ix, не с первого раза, потому что первая попытка окирпичила ноут (я полагаю, что эти долбоебы положили какие-то запчасти от загрузчика не во flash, а на раздел на диске, потому что все шло хорошо, пока я не удалил раздел с виндой).
Экран классный, процессор быстрый, греется меньше, чем прошлая модель.
Не без linux глюков, какие-то проблемы с ACPI, не всегда уходит в сон.
Купил ноут на алишечке, поэтому он без русских букв на клавиатуре.
Неожиданно для себя (в 40-то лет) понял, что давно уже печатаю, не смотря на клавиатуру. Поначалу было сложно, мозг отказывался верить, что у него получается работать, не видя русские буквы, но за пару дней я приспособился.
Правда, если я начинаю пытаться нажать на какую-то букву осознано, то, часто, не могу найти ее с первого раза. Поэтому, если где-то ошибся, то проще стереть слово, и напечатать его целиком, на автомате.
👍16🔥9🥰3👎2