Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > boost vs Qt


Автор: borisbn 16.9.2011, 08:45
Всем добрый QDateTime::currentDateTime().toString() smile
Сразу хочу сказать: это - НЕ holywar
Я хочу выяснить только функциональные различия библиотек. Какие подсистемы/классы/функции есть в одной и нет в другой. И всё.
Высказывания типа "в Qt есть XML, в boost нет" или "в boost есть статические regex'ы (spirit), в Qt - нет" - принимаются.
Высказывания типа "Qt весит 20 МБ, boost тупо прикомпиливается к exe-шнику" или "как можно сравнивать шаблоны и метаинформацию" - не принимаются.
Просьба к модераторам удалять высказывания, не относящиеся к сравнению функционала, а также любую попытку холивора.

Спасибо.

P.S. Про наличие в Qt (и отсутствие в boost) GUI и БД можно не писать. Знаю. smile

Автор: Alca 16.9.2011, 09:13
http://home.kde.org/~akademy10/slides/Boost_for_KDE_Developers-Volker_Krause.pdf

Автор: borisbn 16.9.2011, 09:47
Alca, спасибо, но кроме того, что в boost есть boost::bind и какие-то graph'ы (что такое - не понял) в документе больше ничего нет.
Да и странный он (документ) какой-то.
В начале говорится про boost
Цитата

Pushes C++ to its limits
...
More powerful than you might think...

а в конце
Цитата

But also keep in mind:
● Prefer equivalent Qt classes

smile 

Автор: Alca 16.9.2011, 09:50
Цитата

Prefer equivalent Qt classes

может кютешники ваяли эту доку   smile 

Автор: A5uKa 16.9.2011, 12:01
Qt->KDE

Добавлено через 41 секунду
(C.O. Mode off)

Автор: borisbn 16.9.2011, 12:31
A5uKa, крткст сстр тлнт ?

Автор: alexSl 16.9.2011, 14:57
В Qt отлично интегрирована интернационализация.  smile 
За бустом этого не замечено smile 

Автор: W4FhLF 16.9.2011, 17:08
В бусте есть очень гибкая и довольно развитая сериализация boost:serialization с поддержкой всех стандартных типов (STL в том числе). 
Сетевому функционалу Qt далеко до boost::asio. 

Автор: maydjin 16.9.2011, 18:59
Цитата(W4FhLF @  16.9.2011,  17:08 Найти цитируемый пост)
В бусте есть очень гибкая и довольно развитая сериализация boost:serialization с поддержкой всех стандартных типов (STL в том числе). Сетевому функционалу Qt далеко до boost::asio. 

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

От себя добавлю, в Qt множество удобных мини фреймворков, позволяющих быстро реализовать распостранненый функционал, например UndoRedo или виртуальную файловую систему.

А вообще , на мой взгляд, сравнивать Qt и boost не совсем правильно, т.к. Qt позиционируеться как фреймворк а boost как библиотека, точнее насколько я знаю набор библиотек.
По поводу последнего прошу заметить это just imho.

Автор: bsa 17.9.2011, 00:37
Цитата(W4FhLF @  16.9.2011,  17:08 Найти цитируемый пост)
В бусте есть очень гибкая и довольно развитая сериализация boost:serialization с поддержкой всех стандартных типов (STL в том числе). 

В Qt тоже есть сериализация. Правда, не такая гибкая... И только бинарная - QDataStream.

Автор: borisbn 17.9.2011, 09:14
Похоже нужно было сделать это сразу, но лучше поздно, чем никогда....
Поясню, зачем создал тему: я сейчас в своих проектах использую Qt, а boost - нет.
Так вот, хотелось узнать, что я приобрету, если буду использовать также и boost. И наоборот, uде я буду велосипедировать, что я буду делать "ручками", если не буду использовать boost. В общем, меня интересует функционал boost'а, которого нет ни под каким видом в Qt.
Спасибо всем отписавшимся. Жду продолжения smile

Автор: bsa 17.9.2011, 10:12
borisbn, ну смотри. Есть список библиотек, входящих в boost. Открываешь и смотришь.
В принципе, при работе с Qt нет необходимости в большинстве функционала из boost. Более того, некоторые вещи просто конфликтуют (boost::signals).
Хотя, boost::spirit вещь очень полезная в определенных случаях. Да и boost::serialization очень полезна, когда необходимо работать с текстовыми форматами (бинарные аппаратно-зависимы).

Автор: borisbn 17.9.2011, 12:50
Цитата(bsa @  17.9.2011,  10:12 Найти цитируемый пост)
Есть список библиотек, входящих в boost. Открываешь и смотришь.

Именно так и поступил перед тем, как создавать тему. Почувствовал себя советским гражданином 70-х годов, случайно попавшим за границей в супермаркет. Захотелось выяснить, что из всего этого стОит пробовать, а что и у нас не хуже.
Вот вы с W4FhLF сказали про serialization, asio и spirit - обязательно посмотрю. Спасибо. Something else ?

Автор: bsa 17.9.2011, 13:01
ASIO довольно низкоуровневая библиотека на мой взгляд. При наличии некоторого опыта работы с ней использовать ее становится довольно легко. Но, на мой взгляд, уж очень много кода писать надо. С другой стороны, у тебя есть возможность разруливать почти все ситуации.

Автор: mabrarov 19.9.2011, 13:58
Цитата(borisbn @ 17.9.2011,  09:14)
Поясню, зачем создал тему: я сейчас в своих проектах использую Qt, а boost - нет.

Сколько использую Qt - всегда с Boost.
Точнее так: сначала беру Standard C++ Library. Не хватает - добавляю Boost. Не хватает - добавляю Qt. На Qt стараюсь выносить только GUI/graphics, configuration, i18n, (иногда) plugin subsystem... эээ все, кроме самой логики (без фанатизма - зачастую стоит и для логики местами использовать Qt). 
Qt и Boost хороши по-своему. Вместе их готовить довольно легко. 
Да, Boost.Asio - низкоуровневая "штучка". На ней делают то, что некоторые до сих пор пишут на plain-old-C. Сравнив с Java, можно сказать так: Boost.Asio ~ Apache MINA (но Asio гораздо лучше), а QtNetwork ~ Apache HTTP Client (ну, в плане HTTP -  реально QtNetwork гораздо шире).


Автор: borisbn 19.9.2011, 16:40
mabrarov, спасибо за развёрнутый ответ, но хотелось бы знать, что, например, Вы используете такого в бусте, чего нет в Qt ?

Автор: mabrarov 19.9.2011, 17:40
borisbn, перечислю то, что использую совместно с Qt (а не то, что использую, и чего нет в Qt), начиная с наиболее частого:
  • Utility
  • SmartPtr (shared_ptr, weak_ptr, scoped_ptr, scoped_array, intrusive_ptr), 
  • Bind, 
  • Function, 
  • Array, 
  • DateTime, 
  • Tuple,
  • Boost.Asio,
  • Thread, 
  • System,
  • Integer,
  • MPL,
  • Intrusive, 
  • MultiIndex, 
  • Operators.
Что-то из этого списка можно было бы заменить аналогом из std:: но... MSVC 9 еще актуален, поэтому выбираю кросс-решение.

Автор: borisbn 19.9.2011, 18:00
mabrarov, спасибо. Плюсанул.
/me ушёл курить указанные мануалы.
Пока информации столько, что тему, пожалуй, закрываю, но ответы буду почитывать.


mabrarov, ещё раз спасибо.

Автор: mabrarov 20.9.2011, 10:04
Цитата(borisbn @ 19.9.2011,  18:00)
Плюсанул.
/me ушёл курить указанные мануалы.
Пока информации столько, что тему, пожалуй, закрываю, но ответы буду почитывать.

Это было просто IMHO smile 
Для меня C++ (к сожалению) почти хобби. Последние 2,5 года работы на Java.
Надеюсь, кто-то из C++-профи что-нибудь напишет/даст критику.

Автор: EnergoHokum 20.9.2011, 12:38
Профессионалом я себя не назову, но boost-ом пользуюсь очень часто. Вот основное, без чего жить трудно:
    http://www.boost.org/doc/libs/1_47_0/libs/bind/bind.html -- создавать из функций объекты, привязывать к входным параметрам функций требуемые значения. Header-only.
    http://www.boost.org/doc/libs/1_47_0/libs/crc/index.html -- CRC он и в Африке CRC. Header-only
    http://www.boost.org/doc/libs/1_47_0/doc/html/date_time.html -- работа с датами и временем, с временными интервалами. Может потребовать линковки к проекту.
    http://www.boost.org/doc/libs/1_47_0/libs/utility/enable_if.html -- выбор "как быть дальше" на этапе компиляции, а не в runtime. Header-only.
    http://www.boost.org/doc/libs/1_47_0/libs/filesystem/index.html -- работа с файлами, каталогами, путями к ним. Требует линковки к проекту.
    http://www.boost.org/doc/libs/1_47_0/doc/html/function.html -- функциональные объекты, созданные bind-ом можно сохранять. Header-only.
    http://www.boost.org/doc/libs/1_47_0/doc/html/lambda.html -- создание безымянных функций, с введением C++0x теряет актуальность. Header-only.
    http://www.boost.org/doc/libs/1_47_0/libs/property_tree/index.html -- удобно использовать для работы с конфигурационными файлами *.ini, XML, JSON, INFO. Header-only.
    http://www.boost.org/doc/libs/1_47_0/libs/signals2/ -- реализация механизма сигнал-слот, потокобезопасная, типобезопасная, проверки типов в compile-time. Header-only.
    http://www.boost.org/doc/libs/1_47_0/libs/smart_ptr/smart_ptr.htm -- умные указатели. Header-only.
    http://www.boost.org/doc/libs/1_47_0/libs/spirit/index.html -- фреймворк, вкючающий в себя лексический анализатор (Lex), генератор LL-парсеров (Qi), генератор генераторов (Karma). Header-only.
    http://www.boost.org/doc/libs/1_47_0/doc/html/boost_staticassert.html -- предупреждения времени компиляции, очень полезная штука. Header-only.
    http://www.boost.org/doc/libs/1_47_0/libs/system/doc/index.html -- обёртки над системозависимыми кодами ошибок. Требует линковки к проекту.
    http://www.boost.org/doc/libs/1_47_0/doc/html/thread.html -- потоки, на пару с bind заруливают все прочие реализации (как пример, Qt-шные потоки) в минуса, можно создать поток внутри экземпляра класса, привязанный к произвольной его (класса) функции, с передачей функции этого потока нужного количества входных параметров. Header-only.
    http://www.boost.org/doc/libs/1_47_0/doc/html/xpressive.html -- регулярные выражения. Header-only.
Вот, пожалуй, пока и всё.

Автор: borisbn 20.9.2011, 13:57
EnergoHokum, спасибо. Я так скурюсь
Цитата(borisbn @  19.9.2011,  18:00 Найти цитируемый пост)
/me ушёл курить указанные мануалы.

 smile 
Голова уже кругом от такого:
Цитата(http://www.boost.org/doc/libs/1_47_0/libs/filesystem/v3/doc/tutorial.html)

path p;  // compose a path from the command line arguments

for (; argc > 1; --argc, ++argv)
  p /= argv[1];

Я, конечно, понимаю, что там делается, однако... И это - ещё, пожалуй, самое простое...  smile 

А если серьёзно, то спасибо большое. Буду изучать.
Плюсанул (теперь я обязан - как честный человек)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)