metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2009-02-13 12:55 am

qt

Наконец, вместо того, чтобы копировать qt с компа на комп и копаться в его исходниках, немного побаловался с написанием программ. Выводы:
1) qt creator (и возможно, сам qt) еще таки дорабатывать и дорабатывать. Глючит-с. Мне кажется, что это не уровень RC, это таки сырая бета.
2) qt не использует стандартных виндовских контролов вообще, судя по тому, что spyxx не видит ничего в проге кроме топ-левел окна.
3) Способ разработки гуя достаточно интересен, некоторые вещи интуитивно понятнее и удобнее дельфей и вижуал-студии.
4) Надо написать хотя бы одну полноценную прогу на этом деле, чтобы таки осознать, стоит дергаться ради галочки "можно писать кроссплатформенный GUI".

[identity profile] zamotivator.livejournal.com 2009-02-13 12:30 pm (UTC)(link)
Производительность фреймворка - недостаток?
В любом случае, готов обсуждать устриц лишь с тем, кто их ел.
+ биндинги никто не отменял. А хорошая архитектура ложится в любой язык. Огромное количество биндингов потверждает интепорабельность архитектуры и дизайна кути к любому языку программирования.

[identity profile] kiryl.livejournal.com 2009-02-13 12:35 pm (UTC)(link)
Для производительности придумали C.

[identity profile] max-posedon.livejournal.com 2009-02-13 12:36 pm (UTC)(link)
Увы, Qt работает быстрее gtk, и быстрее gtk+cairo.

[identity profile] max-posedon.livejournal.com 2009-02-13 12:53 pm (UTC)(link)
Да их же тысячи, + личный опыт + посмотрите на embedded, ну ладно, вот один:

http://zrusin.blogspot.com/2006/10/benchmarks.html

Тема обсасана была уже тысячу раз по этому поводу всюду.

[identity profile] kiryl.livejournal.com 2009-02-13 12:55 pm (UTC)(link)
Линк давно протух. Что-нибудь по-актуальней видели?

[identity profile] max-posedon.livejournal.com 2009-02-13 12:56 pm (UTC)(link)
Приведите хоть один обратный. Ну хотябы чтобы вам голословным не быть.

[identity profile] kiryl.livejournal.com 2009-02-13 12:58 pm (UTC)(link)
Я не утверждал, что gtk быстрее Qt. Это вы утверждали обратное.

[identity profile] max-posedon.livejournal.com 2009-02-13 01:27 pm (UTC)(link)
И привёл ссылку. А вы всё троллите,

[identity profile] zamotivator.livejournal.com 2009-02-13 01:28 pm (UTC)(link)
готов обсуждать устриц лишь с тем, кто их ел.
1) Более строгая типизация даёт более хорошие оптимизации
2) Константность даёт оптимизации
Во всём остальном производительность С и С++ совпадает. При условии нормального компилятора, естественно.

[identity profile] kiryl.livejournal.com 2009-02-13 01:43 pm (UTC)(link)
6-13% времени исполнения тратится на диспетчеризацию виртуальных функций. http://www.cs.ucsb.edu/~urs/oocsb/papers/oopsla96.pdf

[identity profile] metaclass.livejournal.com 2009-02-13 01:49 pm (UTC)(link)
Вот счас забиватор тебя на эту тему загнобит, готовься. :)

А вообще, там где есть надобность в виртуальных функциях, обычно не до производительности, скажем так. Там больше внимания уделяется кошерности архитектуры и ее поддерживаемости в будущем, нежели мелочам типа 6-13%

[identity profile] kiryl.livejournal.com 2009-02-13 02:11 pm (UTC)(link)
Если нужна кошерная объектно-ориентированная архитектура, есть более другие языки, позволяющие сделать это красивше.

К вопросу о длинне сиволов и дизайне: “well designed” C++ projects with many namespaces, templates, and nested classes can feature names with more than 1,000 characers. One plus point for design, but minus 100 points for performance." (C) Ulrich Drepper

[identity profile] metaclass.livejournal.com 2009-02-13 02:14 pm (UTC)(link)
Время компиляции, это да, конечно проблема, особенно если нужно срочно что-то фиксить.
А рунтайм перфоманс по моему не должен зависить от длины имен.

[identity profile] max-posedon.livejournal.com 2009-02-13 02:16 pm (UTC)(link)
И не будет, это тока время старта app.

[identity profile] kiryl.livejournal.com 2009-02-13 02:20 pm (UTC)(link)
Бывает ещё lazy relocations и dlopen().

[identity profile] zamotivator.livejournal.com 2009-02-13 02:44 pm (UTC)(link)
Бывает ещё boost::memory_pool, Loki::SmallObjectAllocator.

[identity profile] theiced.livejournal.com 2009-02-13 03:15 pm (UTC)(link)
Если бывает boost, то надо идти лечиться.

[identity profile] zamotivator.livejournal.com 2009-02-13 03:28 pm (UTC)(link)
Тролль? Понемаю.
Назови хоть одну кроссплатформенную библиотеку на Си, что покроет всю функциональность буста.

Interprocess, Threads, Filesystem для затравки.
Function, Bind для продолжения.
MPL на закуску.

[identity profile] kiryl.livejournal.com 2009-02-13 06:22 pm (UTC)(link)
Чисто виндовый подход. Главное найти библиотеку которая делает всё-всё-всё. И неважно, что это монстр.

[identity profile] zamotivator.livejournal.com 2009-02-13 06:25 pm (UTC)(link)
Смешно.
.NET Framework - помойка, это да. дотНетовский и Дельфятский подход - искать компоненты. Сам по себе подход неплох, реализация подкачала - это точно.
И boost, и qt мне нравятся как раз своей модульностью, продуманостью, и минималистичностью.
Я могу из boost'а собрать лишь один кусочек - boost.threads или boost.interprocess, и лишь его линковать/включать dll/so в сборку.

[identity profile] zamotivator.livejournal.com 2009-02-13 06:25 pm (UTC)(link)
В qt аналогично, кстати.
З.Ы. я линуксоид, если что =)

[identity profile] kiryl.livejournal.com 2009-02-13 02:17 pm (UTC)(link)
Если используется динамическая линковка, то длинна имён сказывается на времени запуска.

[identity profile] zamotivator.livejournal.com 2009-02-13 02:46 pm (UTC)(link)
А если выстроить правильный дизайн - т.е. минимизировать связи между модулями до необходимого минимума - то этих нужда в загрузке портянки символов станет не нужна.

И опять же, Qt работает гораздо быстрее - если вы дадите аппликуху, что очень быстро загружается (допустим, 1 миллисекунда против 5 секунд Qt) но работает в два раза медленней Qt, как вы думаете, что при этом выберет пользователь?

[identity profile] zamotivator.livejournal.com 2009-02-13 02:43 pm (UTC)(link)
В некотором сферическом тесте в вакууме - безусловно.
На моих тестах издержки динамической диспетчиризации в цикле доходили до 40-60% времени.

И ровно столько же времени будет тратиться в эквивалентном коде на Си. Не бывает прироста производительности "нахаляву" - не виртуальная функция, ну так косвенный вызов по указателю на функцию.

В проекте, где я работаю (разработка СУБД) мы отказываемся от динамической диспетчеризации в пользу статической.

На С++ мы это описываем при помощи шаблонов. На Си... На Си нас бы спас только кодогенератор.

И это сравнение не пользу Си, удобства разработки на нём.

Резимюруя: такие издержки будут в любом языке программирования. И их оптимизация - не смена языка, переписав код на другой язык вы получите ровно ту же картину с точностью до констант или погрешностей измерения. Прирост в разы будет если пересмотреть саму структуру решения.