The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Новая версия Louvre 1.2, библиотеки для разработки композитных серверов на базе Wayland , opennews (??), 15-Фев-24, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


84. "Новая версия Louvre 1.2, библиотеки для разработки композитн..."  +/
Сообщение от Аноним (84), 17-Фев-24, 06:57 
Bitset? Реально? Всегда поражался с людей что вкорчевывают его везде даже если он сто лет там не сдался. Сколько КБ озу они сэкономили если скажем открыть для простоты подсчёта 100 окон (никто в жизни столько не использует, но мы ведь особенные). 100 окон, скажем структура из 10 полей в каждой enum на 3 записи. Кто готов подсчитать? Предположу что целых 3КБ, ладно 4КБ со всеми memory alignment.

А теперь запустите любое питон приложение, которое в трее показывает вам погоду, или индикатор блютуса, ещё чего, видите там 50 МБ то-то и оно. Про современные графические "центры приложений" лучше вообще забыть, там 500мб+ на старте и выше. Одна единственная пяти секундная gif анимация видосика или мемасика в телеграмме или браузере кушает под 10мб озу. А они целых 4 КБ сэкономили!!!

Ответить | Правка | Наверх | Cообщить модератору

90. "Новая версия Louvre 1.2, библиотеки для разработки композитн..."  +1 +/
Сообщение от n00by (ok), 17-Фев-24, 10:05 
Я не понял, где там экономится память. Цели заявлены - удобная работа с флагами. Вопрос, почему названо bitset. Ну, наверное, потому что автор из Чили, а 640 слов в Бейсик Инглиш хватит всем.

* Unlike `std::bitset`, LBitset functions are designed to modify and retrieve bit states using flags rather than indices, which are ideally
* defined within an enum.

template <class T>
class Louvre::LBitset
{
    using Flag = typename std::conditional<
        std::is_enum<T>::value,
        typename std::underlying_type<T>::type,
        T
        >::type;

...

private:
    Flag m_flags;
};

...

    enum ChangesToNotify : UInt16
    {
        NoChanges                   = 0,
        BufferSizeChanged           = 1 << 0,
        BufferScaleChanged          = 1 << 1,
        BufferTransformChanged      = 1 << 2,
        DamageRegionChanged         = 1 << 3,
        OpaqueRegionChanged         = 1 << 4,
        InputRegionChanged          = 1 << 5,
        SourceRectChanged           = 1 << 6,
        SizeChanged                 = 1 << 7,
        VSyncChanged                = 1 << 8
    };

    LBitset<ChangesToNotify> changesToNotify;

Вот это идёт первым членом в LPRIVATE_CLASS(LSurface) https://github.com/CuarzoSoftware/Louvre/blob/047a86659cc2a3...

Следом 32-х разрядный LBitset. Что бы экономить память, надо сортировать от большего к меньшему. В связи с чем возникают другие вопросы...

Ответить | Правка | Наверх | Cообщить модератору

94. "Новая версия Louvre 1.2, библиотеки для разработки композитн..."  +/
Сообщение от cheburnator9000 (ok), 18-Фев-24, 04:41 
https://github.com/CuarzoSoftware/Louvre/blob/main/src/lib/c... нигде, обычные списки для хранения указателей, он не хранит их копии, что разумно, тогда нафига ему битсет, я бы использовал обычный enum и не страдал садомазо.
Подобные вещи в будущем типичные источники проблем и уязвимостей, достаточно взглянуть на любую GNU библиотеку на языке Си, там что не разработчик то кадр, tar, gnupg и прочие, я многих из них читал исходный код и могу на 100% заявить что переписав их все на современном C++ без Си линукс как десктоп был в _разы_ лучше потому что пришли новые разработчики, но нет, нафига делиться кормушкой FSF с другими.
Но теперь у нас есть rust да, язык для таких же садомазо-нутых наркоманов. Лично, я жду carbon-lang, но понаблюдав кое-то время за ними на гитхабе и в дискорде пришел к выводу что еще лет 10 пройдет минимум, там у них проблемы важнее, самоидентификация, ЛГБТ, she/her под аватаркой мужчины ну вы поняли.
Ответить | Правка | Наверх | Cообщить модератору

96. "Новая версия Louvre 1.2, библиотеки для разработки композитн..."  +/
Сообщение от n00by (ok), 18-Фев-24, 10:50 
enum всё же изначально ориентирован на создание перечислений, а не набора флагов. Членов enum с именами вида BufferSizeAndScaleChanged не нашёл, зато вижу

stateFlags.check(ViewportIsScaled | ViewportIsCropped)

и

            stateFlags.remove(ViewportIsCropped);
            stateFlags.remove(ViewportIsScaled);

так что вроде подходит и bit-field вместо "голого" enum, если уж так хочется сэкономить место под bool.

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

                    size.setW(srcRect.w());      // эти два где-то вызываются раздельно?
                    size.setH(srcRect.h());      //
                    stateFlags.add(ViewportIsScaled);

а с другой стороны повсюду голые указатели. Например, мне не хочется вникать, уместны ли были там смартпоинтеры и зачем макрос LPRIVATE_CLASS меняет семантику class на struct (первой строкой там public:). По-моему, плюсы создавались с целью как раз вот такое свести к минимуму. Получается - вот  пример, почему C++ вызывает неодобрение, тогда как дело не в языке.

Ответить | Правка | Наверх | Cообщить модератору

103. "Новая версия Louvre 1.2, библиотеки для разработки композитн..."  +/
Сообщение от cheburnator9000 (ok), 18-Фев-24, 20:37 
Могу предположить что это все для удобства библиотеки, как раз чтобы разработчики в стиле Си не реализовывали одно и то же дважды и подозреваю на желание сделать PIMPL. С другой стороны если не использовать преимущество плюсов в виде ООП то получится очередное GTK.
Ответить | Правка | Наверх | Cообщить модератору

104. "Новая версия Louvre 1.2, библиотеки для разработки композитн..."  +/
Сообщение от n00by (ok), 19-Фев-24, 09:05 
Так вот pimpl вносит дополнительную косвенность и при этом обычно говорят "лишний указатель - разумная цена за ряд преимуществ", а не "мы снизили потребление памяти за счёт хранения полусотни бит". И Очень Опасная Парадигма потому так и названа, что её подчас принимаются применять ко всему подряд, а не только к тем объектам, меж которыми обмен сообщениями естественен. В случае тех прямоугольников кажется, что можно было менять сразу оба размера, поскольку когда есть два отдельных "метода", например я могу протупить и забыть написать вызов одного из них, или даже вызвать два одноимённых подряд - ищи потом эту опечатку в одной букве, подсунутой автодополнением.)
Ответить | Правка | Наверх | Cообщить модератору

97. "Новая версия Louvre 1.2, библиотеки для разработки композитн..."  +/
Сообщение от n00by (ok), 18-Фев-24, 11:01 
У плюсов по сравнению с Rust и прочими есть преимущество и оно достаточно объективно, то есть не зависит от чьего-то мнения: существует стандарт и несколько реализаций трансляторов. Что даёт некие гарантии и относительную независимость от трендов в фондах. Когда мне надо было драйвер для Windows на Си++, я никого не спрашивал и просто это делал несмотря на "невозможно" в DDK, и другие так делали. В Linux наблюдается занятная картина - тут вроде бы полная свобода, но почему-то религия не позволяет.
Ответить | Правка | К родителю #94 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру