ACE vs Boost vs POCO [закрыто]
Я работаю с Повысить Библиотеки C++ уже довольно давно. Я очень люблю импульс библиотека Asio C++ для сетевого программирования. Однако меня познакомили с двумя другими библиотеками:POCO и Adaptive Communication Environment (ACE) framework. Я хотел бы знать хорошее и плохое каждого из них.
10 ответов:
как сказал rdbound, Boost имеет статус "рядом с STL". Так что если вы не нужно другая библиотека, палка для повышения. Однако, я использую POCO потому что это имеет некоторые преимущества для моей ситуации. Хорошие вещи о POCO IMO:
Лучшая библиотека потоков, особенно активная реализация метода. Мне также нравится тот факт, что вы можете установить приоритет потока.
более полная сетевая библиотека, чем
boost::asio. Однакоboost::asioтоже очень хорошая библиотека.включает в себя функциональность, которая не находится в Boost, как XML и интерфейс базы данных, чтобы назвать несколько.
он более интегрирован как одна библиотека, чем Boost.
он имеет чистый, современный и понятный код на C++. Я считаю, что это гораздо проще понять, чем большинство библиотек Boost (но я не эксперт по программированию шаблонов :)).
это может использоваться на многих платформах.
некоторые недостатки POCO являются:
он имеет ограниченную документацию. Это несколько компенсируется тем, что источник легко понять.
у него гораздо меньше сообщества и пользовательской базы, чем, скажем, Boost. Поэтому, если вы зададите вопрос о переполнении стека, например, ваши шансы получить ответ меньше, чем для Boost
это еще предстоит увидеть, насколько хорошо он будет интегрирован с новым стандартом c++. Вы точно знаете, что это не будет проблемой для Boost.
Я никогда не использовал ACE,поэтому я не могу это комментировать. Из того, что я слышал, люди находят POCO более современным и простым в использовании, чем ACE.
некоторые ответы на комментарии Рахул:
Я не знаю о разносторонней и развитой. Библиотека потоков POCO предоставляет некоторые функциональные возможности, которые не в Boost:
ActiveMethodиActivityиThreadPool. IMO Poco threads также проще в использовании и понимании, но это субъективный вопрос.сетевая библиотека POCO также обеспечивает поддержку протоколов более высокого уровня, таких как HTTP и SSL (возможно, также в
boost::asio, но я не уверен?).
Я использовал все три, так вот мои $0.02.
Я действительно хочу голосовать за Дуга Шмидта и уважать всю работу, которую он сделал, но, честно говоря, я нахожу ACE мягко багги и трудно использовать. Я думаю, что библиотека нуждается в перезагрузке. Трудно сказать это, но я бы сейчас уклонялся от ACE, если нет веской причины использовать TAO, или вам нужна одна база кода для запуска C++ как на вариантах Unix, так и на Windows. Дао является сказочным для ряда сложных проблем, но кривая обучения это интенсивно, и есть причина, по которой у КОРБЫ есть ряд критиков. Я думаю просто сделать свою домашнюю работу, прежде чем принимать решение использовать один.
Если вы не занимаетесь программированием на C++, Boost-это в моей голове и ежу понятно. Я использую ряд библиотек низкого уровня и считаю их необходимыми. Быстрый grep мой код показывает shared_ptr, program_options, регулярное выражение, персонализация, сериализация, по каждому элементу, property_tree, файловой системы, разметки, различных итератор расширения, alogrithm и дополнения. Они в основном низкого уровня функциональность, которая действительно должна быть в компиляторе. Некоторые библиотеки boost очень универсальны; это может быть работа, чтобы заставить их делать то, что вы хотите, но это стоит того.
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. Туз был ключевым фактором успеха нашего проекта. Это требует значительных усилий, чтобы понять, как использовать Классы туза. У меня есть все книги, написанные об Эйсе. Всякий раз, когда мне приходилось расширять функциональность нашей системы, обычно требуется некоторое время, чтобы изучить, что делать, а затем количество требуемого кода очень мало. Я нашел туз очень надежным. Я также использую немного кода из Boost. Я не вижу такой же функциональности в Boost. Я бы использовал одну или обе библиотеки.
недавно я получил новую работу и работаю над проектом, который использует ACE и TAO. Ну, я могу сказать, что эйс и Тао работают и полностью выполняют свои задачи. Но общая организация и дизайн библиотек довольно сложны...
кроме того, многие имена классов ACE также не предоставляют полезной информации. Или вы можете догадаться, какие классы, как
ACE_Dev_Poll_Reactor_NotifyилиACE_Proactor_Handle_Timeout_Upcallможно использовать для?кроме того, документация ACE действительно отсутствует, поэтому, если вы не хотите изучать ACE на жестком пути (это действительно сложно без какой-либо хорошей документации..), Я бы не рекомендовал использовать ACE, если вам действительно не нужно Дао на описание, Если вам не нужна CORBA, идите вперед и используйте некоторые современные библиотеки..
библиотеки сокетов ACE являются твердыми. Если вы пытаетесь портировать стандартную реализацию сокетов, вы не можете ошибиться. Код ACE придерживается жесткой парадигмы развития. Высшего уровня выступают заказчиками являются немного запутанным, чтобы использовать. Жесткая парадигма вызывает некоторые аномалии с обработкой исключений. Есть или раньше были ситуации, когда пары строковых значений, передаваемые в исключение с одним из пары, являющейся null, вызывают исключение, которое будет ошеломлять вас. Глубина наслоения класса утомительна при отладке. Я никогда не пробовал другие библиотеки, поэтому не могу сделать умный комментарий.
Boost имеет статус "рядом с STL" из-за количества людей в комитете по стандартам C++, которые также являются разработчиками Boost. Poco и ACE не пользуются этой выгодой, и из моего анекдотического опыта Boost более распространен.
тем не менее, POCO в целом больше сосредоточен на сетевых материалах. Я придерживаюсь Boost, поэтому я не могу вам помочь, но плюсом для Boost является его (относительно) широкое использование.
Boost-это здорово, я слышал только хорошие вещи о POCO (но никогда не использовал), но мне не нравится ACE и я бы избегал его в будущем. Хотя вы найдете поклонников ACE, вы также найдете много недоброжелателей, которых вы не склонны получать с помощью boost или poco (IME), для меня это посылает четкий сигнал о том, что ACE не лучший инструмент (хотя он делает то, что говорит на олове).
из них я только когда-либо действительно использовал ACE. ACE-это отличная платформа для кросс-платформенных корпоративных сетевых приложений. Оно весьма разносторонне и масштабируемо и приходит с TAO и челюстями для быстрого, мощного развития сферы и/или основанных паутиной применений.
добраться до скорости с ним может быть несколько сложной, но есть много литературы по нему и коммерческой поддержки.
Это несколько тяжело, хотя, так что для небольших приложений это может быть немного перебор. Чтение резюме для POCO похоже, что они нацелены на систему, которая может работать на встроенных системах, поэтому я предполагаю, что ее можно использовать гораздо легче. Теперь я могу дать ему вихрь: P
Я думаю, что это действительно вопрос мнения, вряд ли есть правильный ответ.
в моем опыте написания переносимого кода сервера Win32/Linux (15+ лет) я лично нахожу boost / ACE излишне раздутым и вводит опасности обслуживания (иначе известные как "dll hell") для небольшого преимущества, которое они дают.
ACE также кажется ужасно устаревшим, это "библиотека c++", написанная "программистами c" в 90-х годах, и это действительно показывает, на мой взгляд. Это так бывает, сейчас я реинжинирингу проект, написанный с пико, мне кажется, вполне соответствует идее туз, но в более современных терминах, не намного лучше в этом.
в любом случае для высокопроизводительных, эффективных, элегантных серверных коммуникаций вам может быть лучше не использовать ни один из них.
Comments