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
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
Á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[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
- 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
- «Página oficial do Boost» (em English)
- «Lista das bibliotecas Boost» (em English)