Pull to refresh

Comments 28

Прочиталось очень быстро, и история показалась какой-то коротко.
А читаю «кутЭ.»
Я сильно урезал только части, в которых рассказывалось об основах (QObject, сигналы/слоты, QML), потому что это известно всем, кто хотя бы немного программировал с Qt. Это просто конспект, а выступление было скучноватым. Немного подробнее об истории было на Хабре.
О, спасибо за ссылку.
Аналогично называем у меня в команде. Активно используем в разработке
Программирование на Qt отличается от программирования на C++. Что вы думаете о дублировании функционала — например QVector и многого другого? Планируете объединить или что?
Да, отличается, в лучшую сторону. Вот яркий пример: string replace. Хочется писать код не теряя мысль, а не офигевать от того, как сложно приходится делать простые вещи. ИМХО, но именно этим современный C++ (а если быть точным, то его стандартная библиотека) и не впечатляет. Qt на порядок удобнее.

Могли бы реализовать не функциями-членами, а внешними алгоритмами — как в бусте. Вроде бы это C++ way — делать алгоритмы обобщёнными (boost string algorithms вроде работает и не только с std::basic_string). Тогда не был бы нужен QString, дублирующий стандартную строку. Это я к тому, что всё относительно. Вопрос вкуса и философии языка в какой-то мере.

QString это не только алгоритмы над строками (append, prepend, replace, trimmed, split, etc), а встроенная поддержка форматирования (arg) и преобразования из/во что угодно (числа, латиница, string, wstring, nsstring, массивы, etc). Все это сделано методами, не нужно включать отдельные заголовочные или использовать итераторацию по строке для преобразования, однострочный код остается однострочным. Да он безусловно медленней — в Qt почти все классы построены по принципу паттерна мост (bridge, pimple, d-pointer), то есть любое использование подразумевает обращение по указателю, что не есть хорошо с т.з. локальности данных (data locality). Но удобство сопоставимо с C#, Java, Python и т.д., для разработки приложений это перевешивает.
C++ из-за своей ниши не может позволить себе из коробки никаких явных расходов, это понятно, но в том же Go такая же идеология (неявно, за кулисами ничего не происходит), и стандартная библиотека поудобнее будет, хоть она и в процедурном стиле. Поэтому по моему мнению не стоит распространять приемы чистого C++ на кроссплатформенный швейцарский (норвежский?) нож.
то есть любое использование подразумевает обращение по указателю, что не есть хорошо с т.з. локальности данных (data locality).

Но с другой стороны имеем implicit sharing.

QString это не только алгоритмы над строками (append, prepend, replace, trimmed, split, etc), а встроенная поддержка форматирования (arg) и преобразования из/во что угодно (числа, латиница, string, wstring, nsstring, массивы, etc).

Я бы отдельно и особо выделил: Unicode.

Хочется верить, что эта функция отсутствует не просто так, а для того что бы предостеречь программистов от неэффективного кода и направить в сторону эффективного.
Если как в том примере нужно форматированое генерирование строк, то stringstream вам в руки.

Ну то есть ужасно медленный stringstream мы оставляем для форматирования, а эффективную и типичную функцию replace не делаем. Типичный комитет по стандартизации.
эффективную функцию replace

По вашему replace быстрее <<?

С точки зрения С++ — и replace, и << — функции. Предполагаю, что их эффективность определяется их реализации. Угловые скобки не работаю быстрее только потому, что это не буквы.

Если рассматривать вашу фразу в контексте stringstream, то это очень медленная реализация по работе с форматированием строк. Ее можно использовать только в простых случаях. Первый загугленный пруф.

Я боюсь, что replace() сложнее реализовать более эффективно чем можно выжать из stringstream. Если stringstream со своей строкой и reserve() перед вызовом — то должна быть одна аллокация в куче и дальше только копирование выводимых фрагментов (заметьте, что в вашем же примере strinstream without construction в целом не сильно отстаёт от lexical_cast, а где-то и опережает). В случае же с replace() у вас в любом случае две аллокации в куче и вся стока копируется во время замены. Поэтому "типичная" replace() — возможно, а "эффективная" — сложно сказать.

Я предполагаю, что << должно работать быстрее, потому что это добавление в конец, а не удаление + вставка, в каком то месте в середине строки, которое ещё нужно найти.

Программирование на Qt отличается от программирования на C++

Qt — это не язык вообще, а библиотека к языку. Странное утверждение.

Да, конечно. Имелось в виду то, что концепции, заложенные в Qt, принципы использования Qt, отличаются от тех, которые нам знакомы по std, по рекомендациям программирования на чистом C++, по Core Guidelines.
Дополню Fil — Qt это фреймворк в самом каноническом значении этого слова, то есть не только набор функций и классов, а еще и преопределенных приемов по разработке. В русском переводе книги GoF про паттерны употребляется слово «каркас», и оно уместно для Qt, ибо это некоторый каркас (основной цикл обработки событий и инфрраструктурная система классов), который обвешивается функционалом.
Если еще немного филосовски поразмышлять, то можно обратить внимание на тот факт, что в любом Qt-приложении есть QApplication (QCoreApplication если быть точным). Это серьезная заявка на выход из статуса библиотеки в сторону фреймворка.
P.S. И если быть совсем точным, то Qt приносит некоторые новшества в сам язык, хоть и завуалированно. Поэтому утверждение не абсурдное.

Кютэ (наверное, изучение немецкого в школе сказывается).
Все жду от них готовой 64 бит сборки на mingw.

Это да.
Но когда на остаточное влияние немецкого слегонца накладывается английский, который изучался позже, то как раз и получается "ни туда, ни сюда". Еще не "кью", но уже и не "ку". Короче говоря, "Кин-дза-дза" какая-то получается.

Немецкий не учил, но произношу именно так :)

Все жду от них готовой 64 бит сборки на mingw.

Не факт, что вообще будет. Пробуйте MSYS2.

MSYS2 местами кривоват, лучше уж тогда поставить бинарную сборку Clang и собрать Qt им.

Qt звучит как cutie (читается "кьютИ" /ˈkjuːti/), так называют симпатичную милую девушку :)

Любая инфа по любимому Qt всегда полезна.) респекты и благодарности)
Многие используют ее для программирования на чистом C++, без Qt.

Не только на C++, но и на Plain C. А я ещё и для Baremetal разработки, тыц.

Sign up to leave a comment.

Articles