Вопрос

Я работал с Повышение библиотеки C++ в течение довольно долгого времени.Мне очень нравится Boost Библиотека Asio C++ для сетевого программирования.Однако меня познакомили с двумя другими библиотеками: ПОКО и Структура адаптивной коммуникационной среды (ACE).Я хотел бы знать хорошие и плохие стороны каждого.

Это было полезно?

Решение

Как сказал rdbound, Boost имеет статус «около STL».Так что, если вы этого не сделаете нуждаться другая библиотека, придерживайтесь Boost.Однако я использую ПОКО потому что это имеет некоторые преимущества для моей ситуации.Плюсы POCO IMO:

  • Улучшенная библиотека потоков, особенно реализация активного метода.Мне также нравится тот факт, что вы можете установить приоритет потока.

  • Более обширная сетевая библиотека, чем boost::asio.Однако boost::asio это также очень хорошая библиотека.

  • Включает в себя функции, которых нет в Boost, такие как XML и интерфейс базы данных, и это лишь некоторые из них.

  • Он более интегрирован как одна библиотека, чем Boost.

  • Он имеет чистый, современный и понятный код C++.Мне это гораздо проще понять, чем большинство библиотек Boost (но я не эксперт по программированию шаблонов :)).

  • Его можно использовать на многих платформах.

Некоторые недостатки POCO:

  • Он имеет ограниченную документацию.Это несколько компенсируется тем, что источник легко понять.

  • У него гораздо меньшее сообщество и база пользователей, чем, скажем, у Boost.Поэтому, если вы зададите вопрос, например, в Stack Overflow, ваши шансы получить ответ меньше, чем в Boost.

  • Еще неизвестно, насколько хорошо он будет интегрирован с новым стандартом C++.Вы точно знаете, что для Boost это не будет проблемой.

Я никогда не использовал ACE, поэтому не могу ничего прокомментировать.Насколько я слышал, люди считают POCO более современным и простым в использовании, чем ACE.

Некоторые ответы на комментарии Рахула:

  1. Не знаю насчет универсальных и продвинутых.Библиотека потоков POCO предоставляет некоторые функции, которых нет в Boost: ActiveMethod и Activity, и ThreadPool.Темы IMO POCO также проще в использовании и понимании, но это субъективный вопрос.

  2. Сетевая библиотека POCO также обеспечивает поддержку протоколов более высокого уровня, таких как HTTP и SSL (возможно, также в boost::asio, но я не уверен?).

  3. Справедливо.

  4. Преимущество интегрированной библиотеки состоит в том, что она имеет согласованное кодирование, документацию и общий внешний вид.

  5. Кроссплатформенность — важная особенность POCO, но не преимущество по сравнению с Boost.

Опять же, вам, вероятно, следует рассматривать POCO только в том случае, если он предоставляет некоторые необходимые вам функции, которых нет в Boost.

Другие советы

Я использовал все три, и вот мои 0,02 доллара.

Я действительно хочу проголосовать за Дуга Шмидта и уважаю всю его работу, но, честно говоря, я нахожу ACE слегка глючным и сложным в использовании.Я думаю, что библиотеке нужна перезагрузка.Трудно сказать это, но я бы пока отказался от ACE, если только нет веских причин использовать TAO или вам не нужна единая база кода для запуска C++ как в вариантах Unix, так и в Windows.TAO великолепно подходит для решения ряда сложных задач, но кривая обучения требует интенсивного обучения, и есть причина, по которой CORBA имеет множество критиков.Я думаю, просто сделайте домашнюю работу, прежде чем принимать решение об использовании любого из них.

Если вы пишете код на C++, то, на мой взгляд, Boost не представляет никакой сложности.Я использую ряд библиотек низкого уровня и считаю их необходимыми.Быстрый просмотр моего кода позволяет обнаружить: Shared_ptr, program_options, regex,bind, сериализацию, foreach, property_tree, файловую систему, токенизатор, различные расширения итераторов, alogrithm и mem_fn.В основном это низкоуровневые функции, которые действительно должны быть в компиляторе.Некоторые библиотеки повышения являются очень общими;Заставить их делать то, что вы хотите, может оказаться непростой задачей, но оно того стоит.

Poco — это набор служебных классов, которые обеспечивают функциональность для некоторых очень конкретных распространенных задач.Я считаю, что библиотеки хорошо написаны и интуитивно понятны.Мне не нужно тратить много времени на изучение документации или написание глупых тестовых программ.В настоящее время я использую Logger, XML, Zip и Net/SMTP.Я начал использовать Poco, когда libxml2 в последний раз меня раздражал.Есть и другие классы, которые я мог бы использовать, но еще не пробовал, например.Data::MySQL (мне нравится mysql++) и Net::HTTP (мне нравится libCURL).Со временем я опробую остальную часть Poco, но на данный момент это не является приоритетом.

Многие пользователи POCO сообщают об использовании его вместе с Boost, поэтому очевидно, что в обоих проектах есть стимулы для людей.Boost — это коллекция высококачественных библиотек.Но это не рамки.Что касается ACE, я использовал его раньше, и мне не понравился дизайн.Кроме того, поддержка древних несовместимых компиляторов привела к уродливому формированию базы кода.

Что действительно отличает POCO, так это масштабируемый дизайн и интерфейс с богатым набором библиотек, напоминающий интерфейс Java или C#.На данный момент больше всего в POCO остро не хватает асинхронного ввода-вывода.

Я использовал ACE для очень высокопроизводительного приложения по сбору данных с ограничениями в реальном времени.Один поток обрабатывает ввод-вывод из более чем тридцати соединений сокетов TCP/IC и последовательного порта.Код работает как на 32-, так и на 64-битной версии Linux.Некоторые из многих классов ACE, которые я использовал, — это ACE_Reactor, ACE_Time_Value, ACE_Svc_Handler, ACE_Message_Queue, ACE_Connector.ACE стал ключевым фактором успеха нашего проекта.Чтобы понять, как использовать классы ACE, требуются значительные усилия.У меня есть все книги, написанные об ACE.Всякий раз, когда мне приходилось расширять функциональность нашей системы, обычно требовалось некоторое время, чтобы понять, что делать, а затем объем требуемого кода был очень небольшим.Я нашел ACE очень надежным.Я также использую немного кода из Boost.Я не вижу такой же функциональности в Boost.Я бы использовал одну или обе библиотеки.

Недавно я получил новую работу и работаю над проектом, использующим ACE и TAO.Что могу сказать, так это то, что ACE и TAO работают и полностью выполняют свои задачи.Но общая организация и дизайн библиотек весьма устрашающи...

Например, основная часть ACE состоит из сотен классов, начинающихся с «ACE_».Похоже, они десятилетиями игнорировали пространства имен.

Кроме того, многие имена классов ACE также не несут полезной информации.Или вы можете догадаться, какие классы любят ACE_Dev_Poll_Reactor_Notify или ACE_Proactor_Handle_Timeout_Upcall можно использовать для?

Кроме того, документации по ACE действительно не хватает, поэтому, если вы не хотите изучать ACE на собственном горьком опыте (это действительно сложно без хорошей документации), я бы НЕ рекомендовал использовать ACE, если только вам это действительно не нужно. ТАО для КОРБА, Если вам не нужен CORBA, используйте современные библиотеки..

Библиотеки сокетов ACE надежны.Если вы пытаетесь портировать стандартную реализацию сокетов, вы не ошибетесь.Код ACE придерживается жесткой парадигмы разработки.Конструкции более высокого уровня немного сбивают с толку в использовании.Жесткая парадигма вызывает некоторые аномалии при обработке исключений.Бывают или были ситуации, когда пары строковых значений, передаваемые в исключение, при этом одна из пар имеет нулевое значение, вызывает выдачу исключения в исключении, которое вас удивит.Глубина иерархии классов утомительна при отладке.Я никогда не пробовал другие библиотеки, поэтому не могу дать разумный комментарий.

Boost имеет статус «близкий к STL» из-за большого количества людей в комитете по стандартизации C++, которые также являются разработчиками Boost.Poco и ACE не пользуются этим преимуществом, и, судя по моему опыту, Boost более широко распространен.

Однако POCO в целом больше сосредоточен на вещах сетевого типа.Я придерживаюсь Boost, поэтому не могу вам в этом помочь, но плюсом Boost является его (относительно) широкое использование.

Boost — это здорово, я слышал только хорошие отзывы о POCO (но никогда не использовал), но мне не нравится ACE, и я бы избегал его в будущем.Хотя вы найдете поклонников ACE, вы также найдете много недоброжелателей, которых вы не склонны встречать с помощью boost или poco (IME), для меня это дает четкий сигнал о том, что ACE - не лучший инструмент (хотя он делает то, что говорит). на жестяной банке).

Из них я действительно использовал только ACE.ACE — отличная платформа для кроссплатформенных корпоративных сетевых приложений.Он чрезвычайно универсален и масштабируем и поставляется с TAO и JAWS для быстрой и мощной разработки ORB и/или веб-приложений.

Освоиться с ним может быть несколько сложно, но по нему существует много литературы и доступна коммерческая поддержка.

Однако он несколько тяжелый, поэтому для небольших приложений это может быть излишним.Читая краткое описание POCO, кажется, что они стремятся к системе, которую можно будет запускать на встроенных системах, поэтому я предполагаю, что ее можно использовать гораздо более простым способом.Теперь я могу попробовать :P

Я думаю, что это действительно вопрос мнения, правильного ответа вряд ли существует.

По моему опыту написания переносимого серверного кода Win32/Linux (более 15 лет) я лично считаю, что boost/ACE излишне раздут и создает опасности при обслуживании (также известные как «ад dll») из-за небольшого преимущества, которое они дают.

ACE также кажется ужасно устаревшей, это «библиотека C++», написанная «программистами C» в 90-х годах, и, на мой взгляд, это действительно заметно.Так получилось, сейчас я реинжиниринг проекта написанного на Пико, мне кажется он полностью следует идее ACE, но если говорить более современным языком, то не намного лучше.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top