Russian Qt Forum
Ноябрь 01, 2024, 17:38 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Досадная ошибка в Qt 4.6?  (Прочитано 15065 раз)
SimpleSunny
Гость
« Ответ #15 : Декабрь 07, 2009, 16:33 »

Вы забываете, что слово "keep" также переводится как: "придерживаться, соблюдать, поддерживать"

Да я и в дискуссию не вступал, просто привел ссылки, вдруг кто не знает Улыбающийся
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #16 : Декабрь 07, 2009, 21:56 »

Библиотека не должна менять своё поведение во время смены минорых версий. Иначе разработка преврватится в хаос #ifdef-ов. Я уже это встречал при работе с QScrollArea. Где это написано? Думаю нигде, это как правило хорошего тона. Подкладывание таких свиней во время смены минорных версий жутко бесит.
Записан
SABROG
Гость
« Ответ #17 : Декабрь 07, 2009, 23:13 »

Как бы там ни было если взять любой старенький проект на Qt, то там всё пестрит подобным:

Код
C++ (Qt)
#if (QT_VERSION >= QT_VERSION_CHECK(4, 3, 0))
 
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #18 : Декабрь 08, 2009, 00:25 »

Как бы там ни было если взять любой старенький проект на Qt, то там всё пестрит подобным:

Код
C++ (Qt)
#if (QT_VERSION >= QT_VERSION_CHECK(4, 3, 0))
 

Это смотря что следует далее. Может там испольуется класс или метод который только в 4.3 появился. Ещё бывает Qt класс работает неправильно в 4.3, а в 4.4 - правильно. Это уж бог ним, обернуть в #ifdef можно, рабочий момент так сказать.
« Последнее редактирование: Декабрь 08, 2009, 00:34 от Alex Custov » Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #19 : Декабрь 08, 2009, 01:22 »

Где это написано?

В Changes в отдельном разделе.

Киньте в меня линком, где написано что недолжно меняться в минорном релизе в контексте Qt. Если такового нет, это превращается в холивар, и спор, как результат, бессмыслен. Ктомуже троли не усугубили производительность, а напротив - улучшили. И то что немного изменился функуионал, честно описано в логе, кто не читает - его проблемы.

ЗЫ: я не понимаю предмет спора в контексте перемены минорного релиза. Вот если было это в patch релизе, я бы молча согласился и принял как баг.

ЗЗЫ: Вы вот некотрые говорите "Qt класс работает неправильно в 4.3, а в 4.4 - правильно. Это уж бог ним, обернуть в #ifdef можно". А паршивая производительность это не баг? И что плохого что этот баг устранен? (покрайней мере произведена попытка улучшения)
« Последнее редактирование: Декабрь 08, 2009, 01:31 от pastor » Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #20 : Декабрь 08, 2009, 03:23 »

В Changes в отдельном разделе.

Changes минует некоторое количество изменений. Например "Porting to Qt4" до сих пор неполон. Изменений по поводу QScrollArea я не видел, а они были. И узнавал я об этом только когда видел что программа перестала работать.

И то что немного изменился функуионал, честно описано в логе, кто не читает - его проблемы.

И пользователи тоже должны читать логи библиотек, когда делают aptitude update? Или программисты должны постоянно следить за минорными изменениями? И тут дело не в компиляции, API/ABI совместимости, а в том что такой баг можно будет поймать только во время полного тестирования программы, которое обычно не делают при смене минорной версии.

К тому же, почему опять же тема паршивой производительности пофиксена только в 4.6? Ну в 4.1, 4.2, бог с ним, пока устаканится переход на новую мажорную ветку... Но 4.6 Непонимающий
Записан
kamre
Частый гость
***
Offline Offline

Сообщений: 233


Просмотр профиля
« Ответ #21 : Декабрь 08, 2009, 16:15 »

И пользователи тоже должны читать логи библиотек, когда делают aptitude update?
А как же еще, конечно, должны. Тут два варианта - либо таскать проверенные библиотеки с собой как в винде, либо зависеть от системных и ловить глюки при их update. Вон недавно Opera с Qt 4.5.3 не работала в линуксе, или в куче приложений использующих GTK+ перестали кнопки нажиматься из-за изменений в GTK+ 2.18. Так что читайте change logs и тестируйте приложения с каждым апдейтом системных библиотек.
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #22 : Декабрь 08, 2009, 20:28 »

Вон недавно Opera с Qt 4.5.3 не работала в линуксе, или в куче приложений использующих GTK+ перестали кнопки нажиматься из-за изменений в GTK+ 2.18. Так что читайте change logs и тестируйте приложения с каждым апдейтом системных библиотек.

Если я правильно помню, Опера с Qt4 не имеет статуса стабильной. С GTK - я именно об этом и говорю, и Торвальдс если помните также неплохо посрался насчёт close(2). Библиотека не должна менять поведение в минорных версиях, а поведение - это торчащий наружу функционал (сигналы, визуальные изменения, вызовы виртуальных методов и т.д.). За подклыдывание таких сюрпризов с авторами нужно делать что-нибудь противоестественное.  Строит глазки
Записан
OS2
Самовар
**
Offline Offline

Сообщений: 186



Просмотр профиля WWW
« Ответ #23 : Декабрь 08, 2009, 22:24 »

Alex Custov
Согласен с тобой.
Записан
Dendy
Гость
« Ответ #24 : Декабрь 09, 2009, 01:15 »

Согласен с Alex Custov. "Назвался груздём - полезай в кузов."

Не стоит забывать, что бинарная совместимость Qt - не самоцель, а всего-лишь инструмент. Заявленая бинарная совместимость преследует две цели:

1. Обновление шаровой библиотеки Qt для всей системы без обновления самих программ.
2. Ликвидирование Legacy-кода и бекпортирования.

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

Теперь пункт второй, legacy-код. Как видим Trolltech добился своего - параллельные ветки Qt существуют только для экспериментов. Весь код в релизе сливается в один тег, после чего он не развивается самостоятельно. Никакого бекпортирования, никаких фиксов отдельно для старой версии и для новой - мажорная версия Qt является баг-фиксом к последней минорной. Так что забудьте про аргумент "Так это ведь они в мажорной версии что-то сменили, в мажорной-то можно" . У Qt нет отдельного багфикса к предыдущей минорной версии, им является следующая мажорная версия, эта схема была принята на этапе дизайна библиотеки. Следовательно сохранение поведения библиотеки обязано присутствовать не только между минорными версиями, но и между мажорными.

На вопрос, чем же вообще отличаются мажорные и минорные версии ответ прост: прямой бинарной совместимостью (forward binary compatibility). Когда программа, собранная с Qt 4.5.3 будет работать в системе у пользователя, где стоит Qt 4.5.0.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #25 : Декабрь 09, 2009, 01:35 »

Dendy, небольшие коррективы к сказанному тобой, ты перепутал имена релизов:
"Мажорный", следует читать "минорный"
"Минорный" - "патч" (исправление)

Т.к. 4.5.3:
4 - Мажорная версия (ни о какой совместимости речь может вообще не идти)
5 - Минорная
3 - исправление

В остальном полностью с тобой солидарен.
Записан

Юра.
Dendy
Гость
« Ответ #26 : Декабрь 09, 2009, 01:38 »

Да, спасибо. Конечно же под мажорной версией имелась в виду вторая цифра, а под минорной - третья.
Записан
Dendy
Гость
« Ответ #27 : Декабрь 09, 2009, 02:19 »

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

Для ответа прийдётся забраться ещё на ступеньку выше, чтобы вспомнить, что и Qt - не самоцель. Цель - задача, которую Qt помогает выполнить.

Под Windows никто не ориентируется на шаровые библиотеки Qt в системе, а ложат их прямо в пакет программы. Таким образом Qt обновляется вместе с самой программой и сюрприз от Троллей будет предупреждён зоркими глазами разработчика, вычитывающего ченжлог.

В Линуксе же обратная бинарная совместимость теоретически должна иметь плачевные последствия, ибо разработчик вынужден линковать программу к Qt*.so.4 без указания подверсии, которая может быть удалена в будущем. Держать на системе отдельно Qt 4.5 и Qt 4.6 технически можно, но этого никто не делает из-за отсутствия бекпорта с багфиксами. Но и здесь никто не рвёт волосы из-за сломаных программ. Мейнтейнеры дистрибутивов не набрасываются на свежий билд, а терпеливо ждут вестей с поля боя. А разработчики популярных программ - те и так впереди паровоза, уже давно оттестировали свои детища на релиз кандидатах и сборках с git.

Вот так семимильными шагами пишется библиотека, и взглянем правде в глаза - развивается достаточно живо. И надо отдать должное - багов могло бы быть на порядок больше. А те что есть - поправим по ходу дела. Все на броневичок!
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.089 секунд. Запросов: 23.