anonymous@RULINUX.NET~# Last login: 2024-04-20 00:28:33
Регистрация Вход Новости | Разметка | Пользователи | Галерея | Форум | Статьи | Неподтвержденное | Трекер | Правила форума | F.A.Q. | Ссылки | Поиск
[#] [Добавить метку] [Редактировать] Фильтры
  • матерные выражения
  • торсионщина
  • нацпол
  • флуд
  • порно
Скрыть

А почему Qt company такое УГ?

В общем, мои сладенькие, сей фреймворк решил потыкать палочкой я. Оно и очевидно. GKT уже воняет, а тут вроде плюсцы и всё такое... Но сразу наткнулся на неприятный баг, связанный с QStringLiteral. В общем смотрим код:

cpp

#  define QStringLiteral(str) \
    ([]() -> QString { \
        enum { Size = sizeof(QT_UNICODE_LITERAL(str))/2 - 1 }; \
        static const QStaticStringData<Size> qstring_literal = { \
            Q_STATIC_STRING_DATA_HEADER_INITIALIZER(Size), \
            QT_UNICODE_LITERAL(str) }; \
        QStringDataPtr holder = { qstring_literal.data_ptr() }; \
        const QString qstring_literal_temp(holder); \
        return qstring_literal_temp; \
    }()) \
    /**/

 


Видим, что вся оптимизация сводится к созданию статической переменной qstring_literal для каждой строки. А дальше начинается самое весёлое. Эти перцы взяли, да и тупо заменили все сроки на QStringLiteral. Меня, конечно, спросят. А ололо? А не похуй ли? Но тут начинается веселуха. Посоны и не знали, что куйтя грузит плагинчики через dlopen. И если два разных автора написали два разных плагина для одной программы, то есть вероятность, что какой-то из классов у них будет с одинаковым именем. В общем мну в ахуе, но одинаковые статические переменные конфликтуют между собой, даже если их распихать по плагинам и использовать dlopen. Вероятность этого, конечно, не велика и редко когда реально вылазит, но, блджал, у нас есть uic, который генерит ui_*.h с кучей этих ваших QStringLiteral. Так что не удивляйтесь, если в формочке вдруг вылезли левые названия. Скорее всего дело в этом.

Но сия проблема, конечно, легко обходится посредством переименования формочек, ну или с -fvisivility=hidden поиграться, как вариант. Но дальше ещё интереснее. Если мы выгрузим плугин, то можем схватить сегфолт по причине того, что где-то используется указатель на этот ваш сраный QStringLiteral. Но, видим, что команда занята поиском таких вот багов уже на протяжении нескольких лет. Что я могу сказать? Каждый дрочит как хочет:

git log | grep QStringLiteral | wc -l

124


Ну а дальше ололо, мои сраные товарищи.

Один из главных индусов предлагает вообще не выгружать плагины. Пруф http://lists.qt-project.org/pipermail/development/2016-October/027476.html Речь идёт про внутренние плагины Qt, если что. А тут чувак просто охуевает от такого решения http://lists.qt-project.org/pipermail/development/2016-October/027483.html Так что, мои любители подрочить на Qt, попрошу забыть про valgrind. Он не нужен.



В общем мну бешено негодует и думает таки написать жалобу Линусу. Ололол, дискас.

Silvy(*) (2016-10-13 22:13:43)
Отредактировано Silvy по причине Грамар хуяр!
Mozilla/5.0 (X11; Linux i686; rv:45.0) Gecko/20100101 Firefox/45.0

[Ответить на это сообщение]
[#] [Добавить метку] [Редактировать] Ответ на: А почему Qt company такое УГ? от Silvy 2016-10-13 22:13:43Фильтры
avatar
  • матерные выражения
Скрыть

Re:А почему Qt company такое УГ?

Сладенькая, поздно в твоем возрасте Кутю на пару с С++ осваивать)))
Катайся на тракторе, не еби мозги)))

anonymous(*)(2016-10-14 00:28:57)

Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36
[#] [Добавить метку] [Редактировать] Ответ на: Re:А почему Qt company такое УГ? от anonymous 2016-10-14 00:28:57
avatar
Скрыть

Re:А почему Qt company такое УГ?

А ты у нас молодой розовопопенький? Тогда полезай на трактор. Хотя не, после тебя говно опять вычищать.

Silvy(*)(2016-10-14 00:35:45)

Mozilla/5.0 (X11; Linux i686; rv:45.0) Gecko/20100101 Firefox/45.0
Этот тред читают 1 пользователь:
Анонимных: 1
Зарегистрированных: 0




(c) 2010-2020 LOR-NG Developers Group
Powered by TimeMachine

Valid HTML 4.01 Transitional Правильный CSS!