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

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

Categoria:Bibliotecas de rotinas Categoria:C++ Categoria:Software livre programado em C++