Pergunta

Eu tenho trabalhado com o impulsionar C ++ Bibliotecas por algum tempo. Eu absolutamente amo o Asio C ++ biblioteca Boost para programação de rede. No entanto, fui apresentado a duas outras bibliotecas: POCO e Adaptive Communication Environment (ACE) quadro . Eu gostaria de saber o bom eo mau de cada um.

Foi útil?

Solução

Como rdbound disse, Impulso tem um status "perto STL". Portanto, não se você necessidade outra biblioteca, vara para Boost. No entanto, eu uso POCO porque tem algumas vantagens para a minha situação. As boas coisas sobre POCO IMO:

  • Melhor biblioteca de threads, especialmente a implementação do método ativo. Eu também gosto do fato de que você pode definir a prioridade segmento.

  • biblioteca de rede mais abrangente do que boost::asio. No entanto boost::asio também é uma boa biblioteca.

  • Inclui funcionalidade que não está em Boost, como XML e interface de banco de dados para citar alguns.

  • É mais integrado como uma biblioteca do que Boost.

  • Ele tem um código limpo, moderno e compreensível C ++. Acho que é muito mais fácil de entender do que a maioria das bibliotecas de impulso (mas eu não sou um especialista em programação de modelo:)).

  • Ele pode ser usado em um monte de plataformas.

Algumas desvantagens do POCO são:

  • Ele tem documentação limitada. Este um pouco compensado pelo fato de que a fonte é fácil de entender.

  • Ele tem uma base muito menor da comunidade e do usuário do que, digamos, Boost. Então, se você colocar uma pergunta sobre estouro de pilha por exemplo, suas chances de obter uma resposta são menos do que para impulso

  • Ele continua a ser visto o quão bem ele será integrado com o novo C ++ padrão. Você sabe com certeza que não vai ser um problema para Boost.

Eu nunca usei ACE, então eu realmente não posso comentar sobre isso. Pelo que tenho ouvido, as pessoas acham POCO mais moderna e mais fácil de usar do que ACE.

Algumas respostas aos comentários por Rahul:

  1. Eu não sei sobre versátil e avançada. A biblioteca de threads POCO fornece algumas funcionalidades que não está em Boost: ActiveMethod e Activity e ThreadPool. IMO tópicos POCO também são mais fáceis de usar e entender, mas esta é uma questão subjetiva.

  2. biblioteca de rede POCO também fornece suporte para protocolos de alto nível como HTTP e SSL (possivelmente também em boost::asio, mas eu não estou certo?).

  3. É justo.

  4. biblioteca integrado tem a vantagem de ter consistente a codificação, documentação e "look and feel" geral.

  5. Ser multi-plataforma é uma característica importante do POCO, esta não é uma vantagem em relação aos Boost.

Mais uma vez, você provavelmente deve considerar apenas POCO se ele fornece algumas funcionalidades que você precisa e que não está em Boost.

Outras dicas

Eu usei todos os três então aqui está o meu $ 0,02.

Eu realmente quero voto para Doug Schmidt e respeitar todo o trabalho que ele fez, mas para ser honesto eu acho ACE ligeiramente buggy e difícil de usar. Eu acho que a biblioteca precisa de uma reinicialização. É difícil dizer isso, mas eu coíbe de ACE por agora a menos que haja uma razão convincente para usar TAO, ou você precisa de uma única base de código para executar C ++ em ambos variantes Unix e Windows. TAO é fabuloso para uma série de problemas difíceis, mas a curva de aprendizagem é intensa, e há uma razão CORBA tem uma série de críticas. Eu acho que acabou de fazer sua lição de casa antes de tomar uma decisão de usar.

Se você está codificando em C ++, impulso está em minha mente um acéfalo. Eu uso uma série de bibliotecas de baixo nível e encontrá-los essencial. A grep rápida do meu código revela shared_ptr, program_options, regex, bind, serialização, foreach, property_tree, sistema de arquivos, tokenizer, várias extensões de iterador, alogrithm e mem_fn. Estes são principalmente a funcionalidade de baixo nível que realmente deveria ser no compilador. Algumas bibliotecas de impulso são muito genéricos; ele pode ser um trabalho para levá-los a fazer o que quiser, mas vale a pena.

Poco é uma coleção de classes de utilitários que fornecem funcionalidade para algumas tarefas comuns muito concretas. Acho que as bibliotecas são bem escritos e intuitiva. Eu não tenho que gastar muito tempo estudando documentação ou escrevendo programas de teste tolas. Atualmente estou usando Logger, XML, Zip, e Net / SMTP. Comecei a usar Poco quando libxml2 me irritou pela última vez. Existem outras classes que eu poderia usar, mas não tentei, por exemplo, Data :: MySQL (eu estou feliz com mysql ++) e Net :: HTTP (eu estou feliz com libcurl). Vou tentar o resto de Poco eventualmente, mas isso não é uma prioridade neste momento.

Muitos usuários POCO denunciar a usá-lo ao lado Boost, por isso é óbvio que existem incentivos para que as pessoas em ambos os projetos. Boost é uma coleção de bibliotecas de alta qualidade. Mas não é um quadro. Quanto a ACE, eu tê-lo usado no passado e não gostou do design. Além disso, o seu apoio compiladores não conformes antigos moldou a base de código de uma maneira feia.

O que realmente distingue POCO é um projeto que balança e uma interface com rica lembra disponibilidade biblioteca daqueles que se obtém com o Java ou C #. Neste momento, a coisa mais aguda falta de POCO é assíncrona IO.

Eu usei ACE para um desempenho de aplicativos muito elevado de aquisição de dados com limitações de tempo real. Uma única alças de fio I / O a partir de mais de trinta conexões de soquete TCP / IC e uma porta de série. O código é executado em ambos os 32 e 64 bits Linux. A algumas das muitas aulas ECA que tenho usado são a ACE_Reactor, ACE_Time_Value, ACE_Svc_Handler, ACE_Message_Queue, ACE_Connector. ACE foi um fator chave para o sucesso do nosso projeto. Ele faz demorar um esforço significativo para entender como usar as classes ECA. Eu tenho todos os livros escritos sobre ACE. Sempre que eu tive para estender a funcionalidade do nosso sistema que normalmente leva algum tempo para estudar o que fazer e, em seguida, a quantidade de código necessária é muito pequena. Eu descobri ACE para muito confiável. Eu também uso um pouco de código do Boost. Eu não vejo a mesma funcionalidade em Boost. Gostaria de usar uma ou ambas as bibliotecas.

Eu comecei recentemente um novo emprego e trabalhar em um projeto que usa ACE e TAO. Bem, o que posso dizer é que ACE e TAO trabalho e totalmente realizar suas tarefas. Mas a organização geral e design das bibliotecas são bastante assustadora ...

Por exemplo, a parte principal da ACE consiste em centenas de aulas que começam com "ACE_". Parece que eles têm ignorado namespaces por décadas.

Além disso, muitos dos nomes de classe da ACE não fornecem informações úteis também. Ou você pode adivinhar o que classes como ACE_Dev_Poll_Reactor_Notify ou ACE_Proactor_Handle_Timeout_Upcall pode ser usado para?

Additonally, a documentação da ACE é realmente falta, a menos que você quer aprender ACE da maneira mais difícil (é realmente difícil sem qualquer boa documentação ..), eu não recomendo o uso ACE, a menos que você realmente precisa de TAO para CORBA , Se você não precisa de CORBA, vá em frente e usar algumas bibliotecas modernas ..

O ECA tomada bibliotecas são sólidos. Se você está tentando porta uma implementação padrão de tomadas você não pode dar errado. As varas de código ACE para um paradigma de desenvolvimento rígida. Os contructs de nível superior são um pouco confuso para usar. O paradigma faz com que algumas anomalias rígida com excepção manuseamento. Há ou usado para haver situações em que pares de valores string que está sendo passados ??para uma exceção com um do par ser nulo provoca um lance exceção na exceção que irá confundir você. A profundidade da estratificação de classes é tedioso quando a depuração. Eu nunca tentei as outras bibliotecas, portanto, não pode fazer um comentário inteligente.

Aumento goza de um estatuto "perto STL", devido ao número de pessoas no comitê de padrões de C ++ que também estão Impulsione desenvolvedores. Poco e ACE não gozam desse benefício, e da minha experiência anedótica Boost é mais difundido.

No entanto, POCO como um todo está mais centrado em torno do tipo de rede material. Eu ficar para impulsionar então eu não posso ajudá-lo lá, mas a vantagem para Boost é sua (relativamente) uso difundido.

impulso é grande, eu só ouvi coisas boas sobre POCO (mas nunca utilizado), mas eu não gosto de ACE e evitaria-lo no futuro. Embora você vai encontrar fãs de ACE você também vai encontrar muitos detratores que você não tendem a ficar com reforço ou poco (IME),-me que envia um sinal claro de que ACE não é a melhor ferramenta (embora ele faz o que diz na lata).

Fora daqueles Eu só nunca realmente utilizado ACE. ACE é uma ótima estrutura para aplicações de networking empresarial multi-plataforma. É extremamente versátil e escalável e vem com TAO e JAWS para o desenvolvimento rápido e poderoso de ORB e / ou aplicações baseadas na Web.

Levantar-se à velocidade com que pode ser um pouco assustador, mas não há muita literatura sobre ele, e suporte comercial disponível.

É embora um pouco pesado, então para aplicações de menor escala pode ser um pouco de um exagero. Lendo o resumo para POCO parece que eles estão apontando para um sistema que pode ser executado em sistemas embarcados assim que eu estou supondo que ele pode ser usado de uma forma muito mais leve. Eu agora pode dar um giro: P

Eu acho que é realmente importante de um parecer, não há praticamente uma resposta certa.

Em minha experiência com a escrita de código do servidor Win32 / Linux portátil (15 + anos), eu pessoalmente acho boost / ACE desnecessariamente inchado e perigos introduz manutenção (também conhecido como "DLL Hell") para a pequena vantagem que eles dão.

ACE também parece estar terrivelmente ultrapassada, é uma "++ biblioteca c" escrito por "c programadores" no 90-S e ele realmente mostra em minha opinião. Acontece, agora estou re-engenharia do projeto escrito com o Pico, parece-me segue-se completamente a ideia de ACE, mas em termos mais contemporâneos, não muito melhor com isso.

Em qualquer caso, comunicações servidores de alto desempenho eficientes, elegantes que você pode ser melhor fora de não usar nenhum deles.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top