Boost é uma coleção de bibliotecas que estendem a funcionalidade da linguagem de programação C++. Possui uma licença especial, desenvolvida para ser utilizada em qualquer projeto. Várias bibliotecas presentes na Boost já foram aceitas no TR1 do C++11[1][2], sendo que vários dos fundadores da Boost estão no próprio comitê de padronização da linguagem.
Devido à ampla revisão e controle de qualidade, as bibliotecas incluídas possuem grande qualidade, sendo destinadas a uma vasta gama de usuários do C++, em diversos domínios. As possibilidades passam desde bibliotecas gerais como smart_ptr[3] e abstrações do sistema operacional como o filesystem[4] a bibliotecas para usuários avançados como a MPL[5].
Para garantir eficiência e flexibilidade, o Boost faz uso extensivo de templates, tornando-se uma fonte de pesquisa para o desenvolvimento de programação genérica e metaprogramação em C++. Para utilizá-la, o desenvolvedor deve estar familiarizado com o estilo C++, isto é, a tendência em utilizar o C++ como um linguagem própria ao invés de uma extensão do C.
Bibliotecas
[editar | editar código]O Boost fornece bibliotecas nas seguintes áreas:
- Algoritmos
- Auxiliares para compiladores que não seguem o padrão
- Programação concorrente (utilização de threads)
- Containers
- Codificação correta e teste
- Estrutura de dados
- Funções-objeto e programação de alta-ordem
- Programação genérica
- Grafos
- Entrada/Saída de dados
- Suporte inter-linguagem
- Iteradores
- Matemática e sistemas numéricos
- Utilização e gerenciamento de memória
- Análise sintática (através da plataforma Spirit)
- Meta-programação de pré-processadores
- Meta-programação de templates
- Ponteiros inteligentes
- Processamento de cadeias de caracteres
Exemplos
[editar | editar código]Álgebra linear
[editar | editar código]É incluída uma biblioteca de álgebra linear chamada uBLAS, com suporte BLAS para arranjos e matrizes. Abaixo segue um exemplo de uso:
// exemplo mostrando como multiplicar um vetor por uma matriz #include<boost/numeric/ublas/vector.hpp> #include<boost/numeric/ublas/matrix.hpp> #include<boost/numeric/ublas/io.hpp> usingnamespaceboost::numeric::ublas; /* "y = Ax" */ intmain() { vector<double>x(2); x(0)=1;x(1)=2; matrix<double>A(2,2); A(0,0)=0;A(0,1)=1; A(1,0)=2;A(1,1)=3; vector<double>y=prod(A,x); std::cout<<y<<std::endl; return0; }
Geração de números aleatórios
[editar | editar código]É incluída uma biblioteca para a geração de vários números pseudo-aleatórios. Abaixo segue um exemplo de uso:
// exemplo mostrando como obter uma distribuição normal #include<boost/random.hpp> #include<ctime> usingnamespaceboost; doubleSampleNormal(doublemean,doublesigma) { // seleciona o gerador de número aleatório mt19937rng; // gerador padrão com o número de segundos desde 1970 rng.seed(static_cast<unsigned>(std::time(0))); // escolha da distribuição de probabilidade desejada normal_distribution<double>norm_dist(mean,sigma); // relaciona o gerador de número aleatório à distribuição, formando uma função variate_generator<mt19937&,normal_distribution<double>>normal_sampler(rng,norm_dist); // obtendo um valor da distribuição returnnormal_sampler(); }
Multiprocessamento
[editar | editar código]Segue abaixo exemplo de criação de threads:
#include<boost/thread/thread.hpp> #include<iostream> usingnamespacestd; voidola_mundo() { cout<<"Ola mundo, sou uma thread!"<<endl; } intmain(intargc,char*argv[]) { // inicia uma nova thread que chama a função ola_mundo boost::threadminha_thread(&ola_mundo); // espera a thread finalizar minha_thread.join(); return0; }
Pessoas associadas ao Boost
[editar | editar código]Autor de vários livros sobre o C++, Nicolai Josuttis contribuiu com a biblioteca de arranjos do Boost em 2001. Fundadores do grupo ainda ativos na comunidade incluem Beman Dawes[6] e David Abrahams[7].
Referências
- ↑ «Library Technical Report» (em inglês). Comitê de padronização do C++. 2 de julho de 2003. Consultado em 18 de outubro de 2008
- ↑ Bjarne Stroustrup (maio de 2005). «The Design of C++0x» (PDF) (em inglês). C/C++ Users Journal. Consultado em 17 de fevereiro de 2008
- ↑ «Boost: Smart Pointers» (em inglês). Sítio oficial da Boost. 25 de setembro de 2005. Consultado em 17 de fevereiro de 2008
- ↑ «Boost: Boost Filesystem Library» (em inglês). Sítio oficial da Boost. 3 de junho de 2007. Consultado em 17 de fevereiro de 2008
- ↑ «THE BOOST MPL LIBRARY» (em inglês). Sítio oficial da Boost. 15 de novembro de 2004. Consultado em 17 de fevereiro de 2008
- ↑ «Beman Dawes» (em inglês). Sítio oficial da Boost. 23 de abril de 2008. Consultado em 18 de outubro de 2008
- ↑ «Dave Abrahams» (em inglês). Sítio oficial da Boost. 26 de junho de 2008. Consultado em 18 de outubro de 2008
Ver também
[editar | editar código]- C++ - linguagem da biblioteca
- Standard Template Library - parte da biblioteca padrão do C++ que possui grande relação com a Boost.
Ligações externas
[editar | editar código]- «Página oficial do Boost» (em inglês)
- «Lista das bibliotecas Boost» (em inglês)
