LINUX.ORG.RU

Избранные сообщения LamerOk

MetaPost на новый лад

 , ,

Когда-то давно я написал сборник рецептов по изготовлению картинок с помощью MataPost: Создание иллюстраций в MetaPost

Шли годы. И вот только я задумался серьёзно перейти на PGF/TikZ, как обратил внимание на LuaTeX: pdflatex → lualatex: почти бесшовный переход

Внезапно оказалось, что MetaPost (точнее библиотека MPlib) уже «вшита» в код LuaTeX, то есть можно кодировать картинки не выходя за пределы tex-файла, если перейти на LuaTeX само собой.

Больше никаких мучений со сторонними программами и специальными заголовочными файлами, чтобы кириллица появилась. Всё работает из коробки.

Evgueni
()

Flux — C++20 библиотека алгоритмов с другой моделью итераций

 , ,

Это header-only (~405 KB) C++20 библиотека в духе C++20 Ranges, Python IterTools, итераторов Rust и других, и предоставляет набор функций, в целом эквивалентный C++20 Ranges, но использует немного другую модель итерации, основанную на курсорах, а не итераторах.
Курсоры Flux - это обобщение индексов массивов, в то время как итераторы STL - обобщение указателей массивов.
Возможности:

  • большой выбор алгоритмов и адаптеров последовательностей для создания мощных (?) и эффективных конвейеров данных;
  • более высокая безопасность по сравнению со стандартными итераторами;
  • более простое использование в распространённых случаях, особенно при определении собственных последовательностей и адаптеров;
  • более эффективное выполнение некоторых распространённых операций;
  • совместимость с существующими стандартными библиотечными типами и концептами.

Документация: https://tristanbrindle.com/flux/index.html
Код: https://github.com/tcbrindle/flux
Лицензия: Boost 1.0.
Пример:

constexpr auto result = flux::ints()                        // 0,1,2,3,...
                         .filter(flux::pred::even)          // 0,2,4,6,...
                         .map([](int i) { return i * 2; })  // 0,4,8,12,...
                         .take(3)                           // 0,4,8
                         .sum();                            // 12

static_assert(result == 12);

Он же в Compiler Explorer: https://flux.godbolt.org/z/KKcEbYnTx.


Проект от автора библиотеки NanoRange – C++20 Ranges для C++17.

dataman
()

Настройка Neovim/Nvim

 , , , ,

Введение

Neovim или просто Nvim — это современный редактор, возникший как замена Vim.

Vim — это текстовый редактор для терминала, уникальный прежде всего наличием различных режимов работы (нормальный, редактирования, выделения, замены, командный), которые позволяют выполнять абсолютно все действия с клавиатуры без использования мыши, что заметно увеличивает скорость работы с текстом. Так же он является программируемым, что, наверное, и является его самым большим плюсом.

Да, вы можете взять VS Code, поставить кучу плагинов чтобы получить необходимый функционал, но сам редактор, плагины настраиваются через JSON, что не позволяет добавить какую-нибудь пользовательскую функцию для сортировки файлов в проводнике или навесить сочетание на вызов функции… Там такое можно сделать через написание расширений, что намного сложнее и трудозатратнее чем в том же виме + в последнем меньше ограничений со стороны APIVS Code нельзя радикально переделать интерфейс, заменить проводник на другой и т.п.).

( читать дальше... )

rtxtxtrx
()

Герб Саттер — отчёт о встрече по стандартам ISO C++ в июне 2025 года

 ,

https://herbsutter.com/2025/06/21/trip-report-june-2025-iso-c-standards-meeting-sofia-bulgaria/

Уникальная веха: «Совершенно новый язык»

Сегодняшний день знаменует собой поворотный момент в развитии C++: несколько минут назад комитет C++ проголосовал за включение первых семи (7) документов по рефлексии во время компиляции в C++26 под несколько продолжительных аплодисментов в зале. Я думаю, что Хана «Мисс Constexpr» Дусикова лучше всего описала влияние этой функции несколько дней назад, в своей спокойной бесстрастной манере… Когда ей сказали, что документ об рефлексии попадёт на субботнее голосование по принятию, она слегка пожала плечами и тихо сказала: «Совершенно новый язык».

Микрофон упал.

До сегодняшнего дня, возможно, самым значимым опросом за всю историю C++ был опрос в Торонто в июле 2007 года о принятии первого документа «constexpr» Бьярне Струструпа и Габриэля Дос Рейса в проект C++11. Оглядываясь назад, мы можем видеть, какой тектонический сдвиг начался для C++.


Даниэль Лемир (Daniel Lemire) попробовал:


Экспериментальный форк clang от Bloomberg с поддержкой P2996 («Reflection for C++26»):

Есть в godbolt.org.

dataman
()

FLOX 0.1.0

 , , hft, lowlatency,

Группа Open Source

Опубликован первый релиз FLOX.

FLOX это C++-фреймворк (стандарт C++23), предоставляющий компоненты и абстракции для построения событийных торговых систем с высокой пропускной способностью.

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

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

В FLOX уже реализованы две книги заявок (полная и оконная), агрегатор свечей, интерфейсы коннекторов, управления позициями, риском, стратегиями, а также подписочная модель через единую шину данных.

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

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

В планах встроить JS‑движок для быстрого прототипирования и проверки гипотез.

Проект распространяется по лицензии MIT, код полностью открыт.

>>> Подробности на GitHub (github.com)

eeiaao
()

Алиасы для функций в библиотеке .so

 ,

Приветствую всех. Вопрос такой, занимаюсь портированием ПО c Windows на Linux, и столкнулся с проблемой, что имена функций в библиотеке с маленькой буквы, а второе ПО динамически подключает эту библиотеку и ищет функции с большой буквы. В винде это решили через def файл, где написали такие строчки:

EXPORTS
Sign_int16=sign_int16
Sign_int32=sign_int32
Sign_real32=sign_real32
 
и так далее

А в линуксе есть аналог def файлов?

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

Может есть еще варианты? Спасибо.

lazgo
()

Glaze 5.4.0

 , , , ,

Glaze 5.4.0
Группа Разработка

Состоялся выпуск 5.4.0 высокопроизводительной библиотеки Glaze, предназначенной для чтения и записи JSON с удобными возможностями сериализации и десериализации данных.

Также поддерживаются форматы CSV, BEVE и EETF (Erlang External Term Format) (опционально, для компиляции требуются библиотеки Erlang).
Библиотека написана на языке C++ (header-only, стандарт C++23) и распространяется по лицензии MIT.

( читать дальше... )

>>> Подробности на GitHub (github.com)

dataman
()

virt-manager и вывод графики

 , , , ,

Возможно ли заставить virt-manager отображать графику также шустро как при kvm -display gtk,gl=on --device virtio-vga-gl?

Уточню в virt-manager настроено ускорение и на госте glxinfo -B показывает что всё хорошо, всё ускорено, устройство virgl OpenGL 4.2, также как и при -display gtk,gl=on запуске виртуалки из терминала, а не через virt-manager, разница именно что я так понимаю в выводе итоговом изображении.

Я глубоко не вникал, но при запуске в ручном режиме можно спокойно внутри в 3D шутеры гонять, но неудобно манипуляции всякие делать типа подключить/отключить CD на горячую. Через virt-manager наоборот можно мышевозить, гасить одно, запускать другое и прочее, но вывод лагает :(

А я с 3D работаю и на гостях тестирую.


Заранее отвечу проброс карты невозможен, материнка M4A88TD-M/USB3 не умеет.
Да и не нужно, virgl выдаёт на глаз нативное ускорение, но только при выводе через gtk/sdl

Я гуглил, но информации много, порой противоречивой, мне главное узнать можно ли то что я хочу или нет

LINUX-ORG-RU
()

Нужно чинить иксы

 , , , ,

X11 robustness: DRI3 без аппаратного ускорения (комментарий)

Сабж

Судя по всему последний раз проблема поднималась в 2018, потом все как-то забыли - да и решения там были весьма сомнительные предлагались - копмозитинг предлагается вынести в иксы, тем самым прибив модульность

В общем, без композитинга всё работает как надо, present через damage вызывает fbCopyNtoN на экранную поверхность, present отрабатывает, пусть и с тирингом.

С композитингом же всё сильно хуже - present делает такое же копирование, но в поверхность окна, для которой работает composite redirect.

Без изменений в композиторе ничего сделать не выйдет - сейчас в протоколе composite композитор получает пиксмапу окна и ожидает что после damage event в ней будут актуальные данные. Это совершенно несовместимос с подходом dri3/present, который привязвает несколько пиксмап к окну и требует лишнего копирования.

Изначальная идея в present предполагала отправлять Notify в композитор. Вероятно от неё отказались т.к это неэффективно - иксы здесь занимаются перессылкой событий и fence между процессами.

В здесь целом напрашивается получение дескриптора для отправки событий композитору напрямую, но это тоже выглядит как какой-то костыль. Но в принципе, dri3 передаёт файловые дескрипторы текстур - почему он не может так же передавать дескрипторы некоего канала с композитором? Звучит как вполне разумное решение, которое будет полезно и для xwayland т.к можно будет передать контроль wayland-композитору напрямую, минуя процесс Xwayland

VK_KHR_swapchain помимо fence оперирует с семафорами. Может можно вообще timeline semaphore задействовать? Но в любом случае надо как-то передавать индекс буфера. Расширение протокола позволит задействовать все возможности Vulkan при условии поддержки композитором. Так же vulkan’овые объекты доступны и в opengl

В общем интересно, остались ли тут разбирающиеся в устройстве иксов и vulkan люди, может кто-нибудь может подкинуть идеи

Возможная идея, что можно пересылать в композитор: https://github.com/notpeelz/monado/blob/main/src/xrt/ipc/client/ipc_client_compositor.c#L737 (freedesktop gitlab опять лежит) Здесь есть 2 варианта функции - с семафорой (включая timeline) и просто с fence. Причём создаётся семафора довольно просто - в vulkan queue отправляется пустой Submit с семафорой, которая ожидается уже другим процессом. То есть даже какая-то дополнительная поддержка со стороны приложения не нужна - дальше вся синхронизация присходит прямо в gpu.

P.S дополнение, всем фанатам и просто пользователям Вяленного, набежавишим в тред. Современный графический стек, предполагающий на каждый чих использовать opengl на клиенте немного несовместим с современными GPU, которые могут потерять все контексты в любой момент на любой чих в шейдере в любом приоложении. И даже если сделать перезапуск композитора с переподключением - это нифига не поможет от падения всего десктопного софта, который вынужден рисоваться через opengl. Почему-то на windows есть GDI и там нет этой проблемы. В иксах же есть свой аналог GDI и потенциальная возможность свести все эти отказы к единой точке, которую устранить. Достаточно избавиться от glamor в сервере, можно даже попытаться переписать его на vulkan, добавив обработку потери контекста. Я сейчас категорически не могу рассматривать рендеринг всех десктопных приложений на клиентах через opengl т.к это создаёт огромные неудобства при gpu reset. Да, можно сделать софтовый wayland композитор и нечто похожее на мой костыльный патч в modesetting, но нормально решить проблему потери контекстов просто нельзя - в архитектуре это просто не предусмотренно. Так что можно хвалить wayland, он прекрасно справляется с медиазадачами вроде 3д десктопа в виртуальной реальности, но превращается в тыкву, когда GPU не может работать

mittorn
()

О наболевшем: RADV vs AMDVLK. Почему Valve поддерживает RADV и как это в будущем может аукнуться?

 , , , ,

Привет.

Многие наверняка знают, что на Линукс существует два опен-сурсных драйвера для видеокарт АМД:

  • AMDVLK (официальный)
  • RADV (неофициальный, из Mesa)

AMDVLK является кросс-платформенным драйвером (Windows, Linux, Stadia и др), и именно поэтому АМД с ним немного припоздали. Но, по их словам, это того стоило, так как этот драйвер должен удовлетворять всю их пользовательскую базу, а не только 1% (из них 0.3-0.4 на АМД) пользователей Линукс.

RADV существует же только на Линуксе, прибит гвоздями к Mesa. Проект хороший, драйвер тоже развивается, работает быстро.

Недавно же подтвердилось, что компания Valve идёт ва-банк: их новое устройство Steam Deck с системой SteamOS 3 на борту будет работать с драйверами Mesa. Про возможность установки официального драйвера от АМД пока ничего сказано не было.

Что меня, собственно, волнует… Зоопарк. Зоопарк драйверов. Valve всё делает отлично, SteamOS 3 - это кульминация всей их работы за долгие годы. Но как наличие и борьба между двумя драйверами скажется на нас, пользователей, и разработчиков игр?

  1. Сейчас так или иначе игры (особенно крупные) разрабатываются в межвзаимодействии/партнёрстве между разработчиками игр и держателями железа (АМД/Нвидиа/Интел). АМД потратила кучу времени и ресурсов, чтобы сделать AMDVLK кросс-платформенным, а все инструменты и SDK с GPUOpen заточить под свой софт/драйверы. Есть ли у разработчиков причинЫ отказаться от всего этого и начинать выпускать/портировать игры под RADV без костылей и обходных путей? Ведь мы же понимаем, что разработка игр сейчас в некоторых моментах дороже: так зачем им ещё один драйвер?

  2. Использование RADV лишает обладателей видеокарт прямой поддержки производителя. Иными словами, меня пошлют нахер, если я не использую официальный драйвер, а у меня возникли какие-то проблемы с игрой/софтом. К кому мне идти? К Valve/сообществу? Меня это не особо радует.

  3. Аналогично, использование стороннего драйвера может лишить меня поддержки разработчиков игры. Возможно, в их игре есть поддержка Vulkan. Более того, даже есть нативная версия, либо они официально проверяют работоспособность через Proton. НО! Проверяют они всё это на драйвере AMDVLK. В этом случае меня опять пошлют нахер. Уже были ранее случаи, когда разработчики выпускали нативные версии под Убунту, а пользователям других система на форумах говорили «досвидос!».

  4. Дажe Google, имея в своём штате главного разработчика RADV, не стали играть в камикадзе, оценили все бизнес-риски, и используют на своей платформе Stadia только драйвер AMDVLK. Они с АМД коммерческие партнёры и получают от них всю поддержку + сами вносят коммиты в AMDVLK. По-моему, это о многом говорит.

  5. Почему никто не думает о самих разработчиках? Почему им никто не даёт выбора? Забугорное линукс-сообщество очень токсичное и хочет указывать всем, под что должны разрабы пилить свои игры. Но разве это плохо и разработчики виноваты в том, что они захотят написать и портировать свои игры сразу под кросс-платформенный AMDVLK, имея всю поддержку производителя железа?

  6. Уже были случаи, когда некоторые игры (Doom Eternal и Baldur’s Gate 3) работали из коробки только с AMDVLK. А что если таких случаев в будущем будет больше? Буду ли геймеры ждать патчи для RADV или они просто вернутся на Windows?

Как вы думаете, как порешает рынок в этой ситуации? Кто в итоге победит?

mphuZ
()

X11 robustness: DRI3 без аппаратного ускорения

 , , ,

X11 robustness: DRI3 без аппаратного ускорения

Уже больше 5 лет как использую разные GPU от AMD и сталкиваюсь с разнообразными проблемами, приводящими к его зависанию. К сожалению, в современном линуксовом десктопе, особенно на AMD зависание GPU зачастую не получается обработать прозрачно для софта. В лучшем случае могут попортиться данные, связанные с активными задачами, в худшем - gpu вообще становится неработоспособен до снятия питания (этим грешили некоторые APU на gfx9)

Успешный GPU Reset

Если в случае с неработоспособным GPU другого выхода, кроме как отказ от него нет, дискретные GPU обычно могут успешно пройти сброс.

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

На rdna2 же обычно содержимое vram остаётся целым, однако не всегда. С некоторой вероятностью обнаруживается периодический мусор после сброса, обычно в этом случае попытка использовать работающие с GPU приложениями приведёт к повторному зависанию. В общем, никаких гарантий нет и по хорошему все GPU клиенты должны пересоздать все контексты с нуля

( читать дальше... )

mittorn
()

Качество книжек по Rust

 

Решил посмотреть что есть на русском языке по Rust для старта, и каково качество оригинала и перевода. Нашел книжку https://doc.rust-lang.ru/book/, решил посмотреть, хватит ли моих утомленных мозгов чтобы осилить введение в язык. Споткнулся в самом начале на элементарном примере:

io::stdin().read_line(&mut guess)
Вот что там написано:

Главная задача read_line — принять все, что пользователь вводит в стандартный ввод, и сложить это в строку (не переписывая её содержимое), поэтому мы передаём эту строку в качестве аргумента. Строковый аргумент должен быть изменяемым, чтобы метод мог изменить содержимое строки.

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

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

Далее:

одним из главных преимуществ Rust является безопасность и простота использования ссылок. Чтобы дописать эту программу, вам не понадобится знать много таких подробностей. Пока вам достаточно знать, что ссылки, как и переменные, по умолчанию неизменяемы. Соответственно, чтобы сделать её изменяемой, нужно написать &mut guess, а не &guess. (В главе 4 ссылки будут описаны более подробно)

Что значит, что по умолчанию ссылки неизменяемы? Ведь мне только это достаточно знать. Неизменяем «адрес», хранимый в ссылке, или неизменяемы данные, на которые указывает ссылка? Что делает синтаксис «&mut guess» ? Он дает меняться «адресу», чтобы ссылка могла указываеть на другую область памяти, или дает меняться данным, на которые указывает ссылка? Почему, блин, с самого начала людей оставляют в неизвестности, не объясняя что конкретно происходит? Концепция владения в гл. 4 тут вообще не при чем.

Почему я пишу слово «адрес» в кавычках? Потому что я не смог понять, что такое ссылка. Поэтому я не понимаю механизм работы ссылки:

  • Ссылка Rust хранит адрес в памяти, где хранятся данные?
  • Ссылка Rust хранит адрес в памяти, где находится внутреннее описание переменной, на которую указывает ссылка? Через которое уже будет доступ к памяти, где хранятся данные?
  • Ссылка Rust вообще не хранит адрес в памяти, а хранит некий номер/дескриптор из какой-то таблицы доступных переменных, по которой получается адрес в памяти? Но тогда это адрес чего - самих данных или внутреннего описания переменной, по которой доступен адрес самих данных?
  • Может быть, конструкция вообще другая?
Xintrea
()

Новое издание первого тома книги «Программирование: введение в профессию» А. В. Столярова

 , , , ,

Группа Документация

Вчера, 14 января 2025 года на сайте автора был опубликован первый том нового издания известной книги «Программирование: введение в профессию» за авторством Андрея Викторовича Столярова, известного на данном портале как @Croco.

Новое издание является исключительно электронным и имеет номер 2,9, а не 3. Номер 3 получит полноценное типографское издание на бумаге, если оно состоится.

>>> Подробности (stolyarov.info)

Zeev
()

Столяров все-таки закостеневший и самовлюбленный

 , ,

Уже пару недель как темы про него заглохли, надо новую начать =)

liksys, как ты и говорил, реально Croco остался в мире программирования 90-х, в лучшем случае начала нулевых. Я как-то раньше не особо это замечал, но сейчас почитал его гостевуху, это же lol и facepalm

http://www.stolyarov.info/guestbook/archive/10/#cmt751

Ему написали, что может зло в Web не в жабоскрипте, а в злоупотреблении им и новомодными технологиями и привели в пример сервис, в котором по какой-то БД делается какой-то особый поиск по картинкам с выделением существенной части картинка на сайте прямоугольником.

В ответ «вон с моего сайта, мразь. А лучше сдохни. Или хотя бы найди себе такую профессию, где не будешь ежедневно вредить людям.» с пояснением:

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

И еще кучка подражателей затявкали в тон гуру.

Это мдец какой-то. Вот он реально похоже не видит разницы между пассивным или относительно пассивным (форумы) доступом к информации и активной работы (что-то там выделять на картинке) на сервере и не понимает, что трудозатраты программиста и гимор юзера в разы больше в случае какой-то спецподелки для подобной работы, вместо один раз сделанного Web-решения?

А сервисы для совместной и/или удаленной работы типа гугл-коллаба, гугл-доков, онлайн-редакторы для LaTex (overleaf) и прочей научной работы и тд и тп, молчу уже про гитхаб с копилотом - все это не имеет права на существование? Все это «вебанутая плесень»? Ну чудак на букву «м».

Притом, если бы он аргументировал, что это мол хорошо, но приводит к огромным проблемам, что может лишать юзеров свободы, привязывая всех в итоге к SaaS и подобное, можно было бы еще уважать такое мнение. Я даже с этой стороны с ним мог бы и согласиться. Но он же тупо не понимает похоже. И видит только «плесень» и ахинею в которую превратились браузеры.

praseodim
()

Xorg всё

 ,

xorg-x11-server is removed from RHEL 10

So Long, and Thanks for All the Fish

vbr
()

Почему выбирают XML для написания книг?

 , ,

Помню, давно читал книгу «PHP5 в подлиннике» Дмитрия Котерова в которой он упомянул, что писал книгу на XML. Я тогда удивился, но особого значения не придал. Сейчас читаю книгу «Практическое использование Vim» в которой автор Дрю Нейл также упомянул, что писал книгу на XML.

Подскажите, почему программисты выбирают XML для написания книг, а не, например, Latex?

Перемещено hobbit из general

Gnom7
()

Fish shell переписан с C++ на Rust

 , ,

https://fishshell.com/blog/new-in-40

Разработчики фиша упоролись, и переписали весь шелл с плюсов на раст, на это ушло больше двух лет.

В качестве причин указывается следующее:

  • Никто не любит С++ и Cmake
  • C++ становится легаси языком, искать контрибьюторов на нем сложнее, у Раст активное комьюнити
  • Удобней работать с многопоточкой
  • И вообще надо быть модным и актуальным
Fizzika
()

Ремаппинг кнопок под Wayland

 , ,

Привет, ЛОР!

Я хочу одну странную фичу: чтобы при однократном нажатии на Shift без других клавиш генерировалась левая или правая скобка для левого или правого шифта соответственно. Под иксами это делается простым запуском xcape -e 'Shift_L=parenleft;Shift_R=parenright'.

Пробовал через evremap, но он не позволяет отправить именно скобку на ввод. Только комбинацию, например, SHIFT+0, но её результат уже будет зависеть от раскладки.

Что посоветуешь?

UPD:

Анон подсказал рецепт с keyd.

hateyoufeel
()

Как оставить в выходном файле неиспользуемую явно функцию?

 , ,

Если линкеру задать опции --gc-sections, а компилятору -ffunction-sections, из выходного файла будут выкинуты функции, к которым нет явного обращения. Размер выходного файла заметно уменьшится, это хорошо. А плохо то, что в прошивке присутствует одна функция, не используемая явно, но сильно нужная, которую линкер радостно и выкидывает.

Вопрос: как объяснить линкеру, что выкидывать можно всё, кроме вот этой вот функции? Линкер и компилятор — из набора GCC.

one_more_hokum
()

А насколько можно «обезжирить» программу на C++?

 

Предположим, есть у меня исходники программы на С++. Если я перепишу ее так, чтобы не зависеть от стандартной библиотеки, насколько это может сэкономить размер исполняемого файла?

Раньше так особо не делал, или писал как есть на плюсах или сразу на С.

LongLiveUbuntu
()