Подтвердить что ты не робот

ACE против Boost против POCO

Я довольно долго работал с Boost С++ Libraries. Мне очень нравится Boost библиотека Asio С++ для сетевого программирования. Однако я познакомился с двумя другими библиотеками: POCO и Адаптивная среда связи (ACE). Я хотел бы знать все хорошее и плохое.

4b9b3361

Ответ 1

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

  • Лучшая библиотека потоков, особенно реализация Active Method. Мне также нравится, что вы можете установить приоритет потока.

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

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

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

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

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

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

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

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

  • Пока неясно, насколько он будет интегрирован с новым стандартом С++. Вы точно знаете, что это не проблема для Boost.

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

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

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

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

  • Достаточно честный.

  • Интегрированная библиотека имеет то преимущество, что имеет согласованное кодирование, документацию и общий "внешний вид".

  • Быть кросс-платформенным является важной особенностью POCO, это не является преимуществом по отношению к Boost.

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

Ответ 2

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

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

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

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

Ответ 3

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

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

Ответ 4

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

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

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

Кроме того, документация ACE на самом деле отсутствует, поэтому, если вы не хотите изучать ACE с трудом (это действительно сложно без какой-либо хорошей документации..), я бы не рекомендовал использовать ACE, если вам действительно не нужен TAO для CORBA, если вам не нужна CORBA, идите вперед и использовать некоторые современные библиотеки.

Ответ 5

Я использовал ACE для приложения с высокой производительностью для сбора данных с ограничениями в реальном времени. Один поток обрабатывает операции ввода-вывода из более чем 30 соединений сокетов 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. Я бы использовал одну или обе библиотеки.

Ответ 6

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

Ответ 7

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

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

Ответ 8

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

Ответ 9

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

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

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

Ответ 10

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

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

ACE также кажется ужасно устаревшим, это "библиотека С++", написанная программистами "c" в 90-х годах, и это действительно показывает, на мой взгляд. Так получилось, что сейчас я перепроектирую проект, написанный с помощью Pico, мне кажется, что он полностью следует за идеей ACE, но в более современных условиях, не намного лучше.

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