2009-04-17 8 views
17

У меня есть большой опыт работы с ACE, Boost и wxWidgets. Недавно я нашел библиотеки POCO. У кого-нибудь есть опыт с ними и как они сравниваются с ACE, Boost и wxWidgets в отношении производительности и надежности?ACE vs Boost vs Poco vs wxWidgets

Я особенно заинтересован в замене ACE на POCO. Мне не удалось заставить ACE компилироваться с VS2008 с целью x64. В основном я использую ACE_Task, поэтому, я думаю, я могу заменить те, которые были связаны с потоками Poco и очередями сообщений.

Некоторые другие части POCO, которые меня интересуют, это HTTPServer, HTTPClient и LayeredConfiguration. Эти библиотеки аналогичны библиотекам в Boost и wxWidgets, но я стараюсь ограничить использование wxWidgets компонентами графического интерфейса, а сопоставимые библиотеки Boost ... сложны.

Я заинтересован в любом опыте, который любой может поделиться с POCO, хорошим или плохим.

+0

Если у вас возникли проблемы с ACE, свяжитесь со Стивом Хьюстоном по адресу http://www.riverace.com/ - он долгое время работал над ACE. Когда я работал с ACE в предыдущей компании, я говорил с ним о проблемах, которые у нас были, и он был приятным и чрезвычайно полезным. В конечном итоге мы получили поддержку от него, и это стоило каждого копейки. –

+0

Ваш заголовок вводит в заблуждение, как если бы вы пытались сравнить яблоки и апельсины. Я все еще не могу понять, почему вы упомянули wx и boost вообще? – mentat

+3

Существует значительное перекрытие между POCO и Boost (например, общие указатели, asio, program_options). Аналогично, POCO и wxWidgets перекрываются совсем немного. –

ответ

17

Я использовал части POCO снова и снова и нашел, что это очень хорошая библиотека. Я в значительной степени отказался от ACE несколько лет назад, но POCO содержит одни и те же шаблоны - Task, Reactor и т. Д. У меня никогда не было никаких проблем с этим, поэтому я должен предположить, что он стабилен.

Некоторые аспекты, которые мне нравятся:

  • это довольно хорошо интегрированная иерархия ООП поэтому компоненты хорошо работают друг с другом. У этого есть намного более сильное чувство, чем что-то вроде Boost, который скорее кусочек.

  • Исходный код доступен и очень прост. Вам не нужно выделять большие блоки времени, чтобы понять, что он делает (ACE, по крайней мере, последний раз я смотрел на источник) или быть мастером шаблонов (Boost).

  • Компоненты придерживаются близко к стандарту C++. Исключения выводятся из std :: exception; они не изобретали еще один класс-класс и т. д.

  • Удивительно всеобъемлющий. На первый взгляд намного больше, чем кажется на первый взгляд.

Обратной:

  • вопрос личных предпочтений, но авторы придерживаются довольно много на один класс в заголовке файла модели, так что вы в конечном итоге в том числе много различных файлов.

  • Ограниченная документация. В основном страницы API типа кислорода и несколько файлов PDF, указывающих на исходные примеры. Он полезен, но, учитывая размер lib, изначально трудно понять, используете ли вы самые лучшие компоненты.

  • Если вокруг него создано активное сообщество, я его так и не нашел. Пакет поддерживается некоторой европейской компанией, и у них есть wiki, но я не считаю ее активной или полезной.

С учетом всех обстоятельств, недостаток довольно незначительный. Я думаю, что это очень хорошая библиотека и определенно порекомендует ее.

6

Я никогда не использовал ACE, но использовал Boost и Poco. Мне очень нравится стиль кодирования Poco. Пакеты согласованы, и исходный код легко читается. Они не такие безумные, как boost. По моему опыту я часами читаю, как использовать пакет boost-serialization, контейнер указателей карт и т. Д., И мало читает, как использовать материал Poco. Я бы сказал, что они имеют хороший дизайн и используют шаблоны там, где это необходимо.

С отрицательной стороны у них есть документация по API, но у них нет обширной документации о том, как вы будете использовать пакет. Для этого вы обычно смотрите пример исходного кода или исходный код их модулей.

У меня HTTPServer работает на Windows/Linux без каких-либо очевидных ошибок.

Итак, сделайте так, чтобы 1 положительный опыт.

2

Для меня кажется, что boost имеет большую тягу к новым библиотекам C++, и тот факт, что многие из них приняты в предстоящий стандарт C++, говорит сам за себя.

Я использую ACE и Boost самостоятельно, и причины, по которым я их выбрал, состоят в том, что они зрелые (особенно ACE) имеют большое сильное сообщество пользователей, которое гарантирует, что они будут поддерживаться и улучшаться, и что я могу получить качественную профессиональную поддержку. Мы используем Remedy IT для нашей поддержки ACE/TAO и очень довольны.

Поскольку ACE представляет собой гораздо более старую библиотеку, чем Boost, и одна из ее целей - поддерживать более экзотические (например, встроенные) платформы, в ней не используется так много технологий C++, как у Boost. Я использую смесь ACE и Boost, и я очень доволен этой комбинацией.

Я не совсем понимаю, почему вы помещаете wxWidgets в игру, так как это в основном графическая библиотека пользовательского интерфейса. Но если мне нужно было сделать некоторые проекты на C++ UI, я бы пошел с QT, главным образом потому, что это также широко используемая библиотека (весь рабочий стол KDE построен поверх QT) и поэтому поддерживается в хорошем состоянии, и у меня будет доступ к большому пользовательская база для вопросов и поддержки.

+1

wxWidgets определяет собственные классы строк и коллекций, а также множество классов утилиты перекрестной платформы для файла/сокета и т. Д. Это наследие от дней, когда компиляторы C++ поддерживали STL (или шаблоны!) –

+0

Это распространенное заблуждение что wxWidgets - это только файл GUI, но есть еще много чего. –

+0

@ Jere.Jones Итак, QT, но это не значит, что я буду использовать его для не-UI-файлов :-) – lothar

Смежные вопросы