Boost (bibliotecas de C++)

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, 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 e abstrações do sistema operacional como o filesystem a bibliotecas para usuários avançados como a MPL.

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

O Boost fornece bibliotecas nas seguintes áreas:

Exemplos

Álgebra linear

É 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>
 
using namespace boost::numeric::ublas;
 
/* "y = Ax" */
int main ()
{
 	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;
 	return 0;
}

Geração de números aleatórios

É 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>
 
using namespace boost;
 
double SampleNormal (double mean, double sigma)
{
     // seleciona o gerador de número aleatório
     mt19937 rng;
     // 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
     return normal_sampler();
}

Multiprocessamento

Segue abaixo exemplo de criação de threads:

#include <boost/thread/thread.hpp>
#include <iostream>

using namespace std; 
 
void ola_mundo()
{
   cout << "Ola mundo, sou uma thread!" << endl;
}
 
int main(int argc, char* argv[])
{
   // inicia uma nova thread que chama a função ola_mundo
   boost::thread minha_thread( &ola_mundo );
   // espera a thread finalizar
   minha_thread.join();
  
   return 0;
}

Pessoas associadas ao Boost

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 e David Abrahams.

Referências

  1. ↑ «Library Technical Report» (em inglês). Comitê de padronização do C++. 2 de julho de 2003. Consultado em 18 de outubro de 2008
  2. ↑ 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
  3. ↑ «Boost: Smart Pointers» (em inglês). Sítio oficial da Boost. 25 de setembro de 2005. Consultado em 17 de fevereiro de 2008
  4. ↑ «Boost: Boost Filesystem Library» (em inglês). Sítio oficial da Boost. 3 de junho de 2007. Consultado em 17 de fevereiro de 2008
  5. ↑ «THE BOOST MPL LIBRARY» (em inglês). Sítio oficial da Boost. 15 de novembro de 2004. Consultado em 17 de fevereiro de 2008
  6. ↑ «Beman Dawes» (em inglês). Sítio oficial da Boost. 23 de abril de 2008. Consultado em 18 de outubro de 2008
  7. ↑ «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

Ligações externas