qt

Feb. 13th, 2009 12:55 am
metaclass: (Default)
[personal profile] metaclass
Наконец, вместо того, чтобы копировать qt с компа на комп и копаться в его исходниках, немного побаловался с написанием программ. Выводы:
1) qt creator (и возможно, сам qt) еще таки дорабатывать и дорабатывать. Глючит-с. Мне кажется, что это не уровень RC, это таки сырая бета.
2) qt не использует стандартных виндовских контролов вообще, судя по тому, что spyxx не видит ничего в проге кроме топ-левел окна.
3) Способ разработки гуя достаточно интересен, некоторые вещи интуитивно понятнее и удобнее дельфей и вижуал-студии.
4) Надо написать хотя бы одну полноценную прогу на этом деле, чтобы таки осознать, стоит дергаться ради галочки "можно писать кроссплатформенный GUI".

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

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

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

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

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

К вопросу о длинне сиволов и дизайне: “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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Profile

metaclass: (Default)
metaclass

April 2017

S M T W T F S
      1
2345678
9101112 131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Nov. 4th, 2025 01:04 am
Powered by Dreamwidth Studios