Portanto, se você gastar algum tempo visualizando / respondendo perguntas no Stack Overflow sob a tag C ++, notará rapidamente que quase todo mundo usa a biblioteca de impulso ; alguns até diriam que, se você não o está usando, não está escrevendo C ++ "real" (discordo, mas esse não é o ponto).
Mas há a indústria de jogos, que é bem conhecida por usar C ++ e não por impulso. Não posso deixar de me perguntar por que isso acontece. Não me preocupo em usar o boost porque escrevo jogos (agora) como um hobby, e parte desse hobby é implementar o que preciso quando posso e usar bibliotecas disponíveis quando não posso. Mas isso sou só eu.
Por que os desenvolvedores de jogos, em geral, não usam a biblioteca de impulso? Trata-se de problemas de desempenho ou memória? Estilo? Algo mais?
Eu estava prestes a perguntar isso no estouro de pilha, mas achei que a pergunta seria melhor aqui.
EDIT:
Sei que não posso falar por todos os programadores de jogos e não vi todos os projetos, por isso não posso dizer que os desenvolvedores de jogos nunca usem boost; esta é simplesmente a minha experiência.
Permita-me editar minha pergunta para perguntar também, se você usa o boost, por que você optou por usá-lo?
Respostas:
Alguns desenvolvedores, outros não (em jogos e em outros lugares). Depende de quais são as necessidades / requisitos desses desenvolvedores e de qual tecnologia existente eles precisam alavancar.
Biblioteca padrão do C ++ muitas vezes é dado o mesmo tratamento, e as pessoas muitas vezes me pergunto a mesma coisa que você está se perguntando sobre isso , também. A maioria dos motivos é semelhante, por exemplo:
Um desenvolvedor já pode ter uma biblioteca interna de funcionalidades que fornece os mesmos serviços que a biblioteca padrão ou o Boost fornece. Essas bibliotecas internas costumavam ser escritas há muito tempo, quando o suporte à implementação da biblioteca padrão era fraco e o Boost era basicamente inexistente; portanto, mais ou menos tinham que ser escritos. Nesse cenário, geralmente não vale a pena fazer a transição da funcionalidade interna - seria um grande esforço de portabilidade que desestabilizaria muito código e não proporcionaria quase nenhum benefício.
Um desenvolvedor pode estar trabalhando em plataformas nas quais o suporte ao compilador para as técnicas avançadas de C ++ alavancadas pelo Boost não é bem suportado, de modo que o código do Boost não seja compilado ou tenha um desempenho ruim. Isso também se aplica à biblioteca padrão, embora muito menos atualmente.
O Boost e a biblioteca padrão da linguagem são de uso geral e, embora isso seja bom e bom para a maioria dos aplicativos, às vezes um desenvolvedor tem necessidades específicas que podem ser melhor atendidas por contêineres mais especializados.
Penso que o que precede são duas razões razoáveis, embora certamente existam outras. Você precisa ter cuidado, porque muitas razões para evitar o Boost, as bibliotecas padrão ou qualquer outra coisa se resumem à síndrome do "não inventado aqui", o que pode ser uma indicação de que o motivo não está muito bem fundamentado nas realidades práticas.
Lembre-se também de que as necessidades de um estúdio grande geralmente são muito diferentes das necessidades de um desenvolvedor individual. Por exemplo, um desenvolvedor individual provavelmente tem menos código legado flutuando para manter e, portanto, talvez a transferência de uma versão doméstica do Boost ou da funcionalidade de biblioteca padrão não seja tão demorada e poupa esse desenvolvedor de ter que manter esse código extensivamente no futuro - invalidando assim meu primeiro ponto.
No final, trata-se de avaliar suas necessidades e tempo investido contra o objetivo desejado e determinar qual opção atende melhor às suas necessidades. Os desenvolvedores que não estão usando o Boost ou a biblioteca padrão geralmente o fazem e chegaram a essa conclusão - talvez você também, e talvez não.
fonte
Editar Voltando a esta pergunta após alguns anos
Tendo continuado a usar cada vez mais bibliotecas de reforço, pensei em atualizar essa pergunta para apresentar um argumento sólido sobre por que você deve usar o impulso quando a descrição do produto corresponde à funcionalidade desejada. Isso convencerá até negativistas. Baixe o openSSL, tente criar um aplicativo cliente e servidor com ele. Agora tente fazer isso funcionar em todas as plataformas. Em seguida, faça o download e use o boost :: asio :: ssl para criar o mesmo aplicativo. Se você não está convencido de que o impulso é o lugar certo para procurar código de plataforma cruzada limpo, bem otimizado e com revisão por pares, este exercício simples o converterá.
Tl; dr versão:
Na minha opinião, você não vê uma tonelada de empresas de desenvolvimento indie ou de pequeno e médio porte usando o boost porque é uma fera maciça e poderosa que não é fácil de domar e você está basicamente sozinho quando tenta aprender como para usá-lo. A documentação está faltando de algumas maneiras (veja a versão longa) e a "comunidade" em torno do projeto parece estar ausente, dispersa ou inativa (em comparação com outros projetos).
Versão muito longa:
sei que já existe uma resposta aceita, mas como alguém que realmente usa o impulso em quase todos os projetos que eu faço, pensei em publicar uma resposta.
Lembro-me de quando comecei a bisbilhotar e, honestamente, não fazia ideia do que estava acontecendo. O impulso não está muito bem documentado. As pessoas podem discordar de mim porque tenho certeza de que há muitos trechos de código de exemplo, comentários e afins, mas tudo é muito frio, vago e difícil de navegar.
Também parece difícil encontrar qualquer lugar em que você sinta que encontrou "a comunidade" ao redor do projeto. De fato, a comunidade parece inexistente ou nômade. Infelizmente, até a lista de e-mails deles foi vasculhada por tantos sites de sanguessugas que você pode descer por essa toca de coelho sempre voltando para onde você começou.
Esses dois fatores tornam o aprendizado do uso de bibliotecas de impulso uma tarefa bastante assustadora. Mesmo que os detalhes técnicos do uso do impulso não sejam excessivamente complexos, é um conjunto enorme de bibliotecas e o encaramos quando tudo o que você está armado são alguns trechos de código e partes dispersas da lista de discussão dos cantos mais sombrios da Internet ... bem, você entendeu a idéia.
Eu comecei a mexer com o boost na versão 1.45 e é só agora na versão 1.52 / 1.53 que me sinto confortável o suficiente para usá-lo na produção. Há tantas coisas para se acostumar e lembrar, até coisas simples, como você configurou o boost e a lembrança dessa configuração, porque a forma como as bibliotecas são construídas e as funções podem variar bastante com base nas suas preferências no momento da compilação, devido à personalização das coisas estão.
No entanto , não se engane , uma vez que você pode usar o impulso, você ganhou uma arma poderosa para criar rapidamente programas sólidos e multiplataforma. Pegue
boost::asio
por exemplo. Você pode escrever um servidor Web assíncrono de plataforma cruzada imensamente poderoso, escalonável e sólido em apenas algumas centenas de linhas. Escrevi vários clientes, servidores, proxies etc. ao longo dos anos, com apenas algumas centenas de linhas de código cada uma que ainda não me falharam, e posso portá-las de plataforma para plataforma em minutos.Como outros já apontaram, as empresas maiores geralmente ficam presas a coisas antigas ou gostam de criar suas próprias, o que eu entendo completamente. Também há uma coisa realmente boba que eu ouvi e descobri onde os líderes de desenvolvimento e / ou os gerentes de projeto proíbem o uso do boost porque é "muito grande". Meu palpite é que eles acreditam que o impulso é uma única biblioteca ou nunca ouviram falar do BCP .
Quanto a POR QUE eu escolho usar o impulso
Eu diria que o uso porque, como você sugere na sua pergunta, é "a" biblioteca C ++. O Boost é visto no mundo C ++ como o canivete suíço de coisas que eventualmente você precisará usar. Portanto, a idéia é que, se houver uma necessidade, deve haver uma versão com alto desempenho e portátil dela em impulso. As grandes empresas contribuem para impulsionar , pessoas muito instruídas com currículos impressionantes contribuem e mantêm-no , e quando um novo padrão de C ++ está sendo desenvolvido, as pessoas geralmente procuram aumentar para ver quais partes dele devem se tornar C ++ padronizadas pela ISO.
Portanto, se eu precisar adicionar alguma funcionalidade para a qual provavelmente exista uma biblioteca existente, o primeiro lugar que procurarei será o aumento apenas porque tenho certeza de que é bastante otimizado, portátil, que será suportado e mantido por muito tempo e erros serão encontrados e solucionados. No mundo do código aberto, essas qualidades podem ser muito difíceis de encontrar.
fonte
Usamos um pouco de Boost em nosso antigo local de trabalho. Os principais motivos para evitá-lo e limitar seu uso foram:
fonte
A mesma coisa está sendo dita para o STL "mais padrão". Este artigo fala sobre o EASTL, uma reescrita interna de (partes de) STL pela Electronic Arts para acomodar as necessidades de desenvolvimento de jogos que são bastante diferentes daquelas do desenvolvimento de aplicativos "mais genéricos".
Então, talvez alguém em algum lugar esteja reescrevendo (partes de) impulso para acomodar suas necessidades no desenvolvimento de jogos!
fonte
Quem disse que eles não usam impulso? Conheço um ou dois mecanismos C ++ que usaram boost. Eu nunca trabalhei diretamente com eles; mas isso é principalmente porque a minha experiência está no Unreal.
Por motivos que encontrei por não usar o impulso, e estes são subjetivos:
Basicamente, tudo se resume a: uma solução geral nem sempre é o "ajuste certo".
Tenho certeza de que alguém que realmente trabalhou com a biblioteca poderia comentar melhor.
fonte
Eu saio no StackOverflow e não uso o boost. Acrescentarei minha razão, porque ainda não foi mencionada.
O Boost tem muitas ótimas idéias, realmente. Eu gosto de ver o que eles fizeram e experimentar coisas e idéias novas. Eles são ótimos, porque é um terreno fértil para muitas melhorias em C ++.
Mas o impulso é um animal muito pesado por muitas razões. Um dos motivos é que eles precisam (querem) ser compatíveis com praticamente qualquer compilador com qualquer peculiaridade. Como resultado, eles precisam empregar muitos truques, como o MPL para executá-lo. Por exemplo (há muito tempo) eu queria usar o shared_ptr, fazer com que funcionasse significa que preciso das fontes e bibliotecas do que pareciam 90% de impulso. Acabei escrevendo o meu; 50 linhas de código legíveis. (Meus requisitos eram mais rigorosos, como no fraco_ptr ou na segurança de threads).
Muitas vezes, você precisa de um subconjunto muito pequeno de impulso, mas a integração de todo o impulso simplesmente não vale a pena.
Editar :
Só para deixar claro, uma vez que parece não ter vindo claramente (ou seja, voto negativo). Eu uso não usar bibliotecas de terceiros. Mas, na maioria dos casos, tudo igual, integrando uma biblioteca de terceiros ou aprimorada, a outra biblioteca de terceiros é mais rápida e limpa. O restante é feito no exercício com os dedos "2h". Eu dou uma olhada muito na questão de compilar ou comprar.
fonte
No nosso caso (não nos jogos), temos um ótimo motivo para não usar o boost (nem o std): temos muitos códigos que datam de uma década. De acordo com os idosos, std e boost estavam incompletos, cheios de bugs ou muito lentos para as coisas de alto desempenho que precisamos. Portanto, algumas classes base foram implementadas, usando os mesmos conceitos (como iteradores) e frequentemente otimizadas para nossos algoritmos. Atualmente, todas as três bibliotecas (nossa, std e boost) são muito semelhantes.
Mas queremos portar todo o nosso código? Na verdade não. Presumo que muitas outras empresas enfrentem o mesmo dilema. Reescreva muitos códigos testados e funcionando ou não use std / boost.
fonte
Pessoalmente, não uso boost ou qualquer outro código de uso geral ao criar jogos, porque os jogos geralmente não são de uso geral. O tipo de código que você pode precisar para implementar um jogo geralmente é específico para o desenvolvimento do jogo, nem sempre, mas como 98% (figura aleatória) do tempo. Você pode seguir esses últimos bits de código do boost ou de alguma outra biblioteca, mas provavelmente é melhor apenas escrever a pequena parte que você precisa aqui e ali.
Em uma nota lateral, acho que é bastante divertido escrever seu próprio código em c ++, e é por isso que nunca uso boost ou algo parecido.
fonte
o legado nas bibliotecas domésticas não é um fator ... a principal razão pela qual alguém não deve usar o boost u de outra biblioteca de uso geral é porque eles não têm velocidade e memória otimizadas, por isso devo mencionar que o Cryengine usa o STL, mas compila contra uma versão de código aberto chamada STLPort, portanto, não tenha medo de usar o STL, basta implementar seus alocadores personalizados e você ficará bem. não use impulso tho.
fonte