sábado, 27 de março de 2010

Metaprogramação com templates em C++

Conhecimento é poderImagem retirada do Danbooru (contém conteúdo NSFW)
Artista: ushi


Vocês já ouviram falar a respeito de metaprogramação com templates? Eu também não conhecia até começar a me preparar para uma das provas que iria fazer na universidade esses dias. Essa técnica traz a possibilidade de realizar computação em tempo de compilação usando o recurso de templates do C++. Alguns exemplos de cálculos possíveis são o fatorial e conversão de bases numéricas. Como isso funciona?

Uma das características poderosas do C++ é a possibilidade de criação de programas genéricos, através do uso de templates (o Java, entre outras linguagens, também tem esse recurso, com o nome de generics). Com eles, é possível desenvolver uma classe ou estrutura de dados genérica utilizando o tipo de dado que você necessitar facilmente. A Standard Template Library do C++ faz uso extensivo de templates.

Porém, os templates no C++ são muito flexíveis, podendo ser usados para definir muito mais do que apenas tipos de dados. A metaprogramação é feita através da definição de um template base e de sua instanciação. Acho que isso fica mais claro com um exemplo:

#include <iostream>
using namespace std;

template <int N> // Esta é a definição do template
struct Fatorial {
    static const int valor = N * Fatorial<N - 1>::valor;
};

template <> // Esta é a definição do caso base
struct Fatorial<0> {
    static const int valor = 1;
};

int main (int argc, char *argv[]) {
    cout << Fatorial<5>::valor << endl;
    cout << Fatorial<2>::valor << endl;
    return 0;
}


E pronto, temos o fatorial calculado em tempo de compilação. Essa técnica, se usada intensivamente, pode aumentar consideravelmente o tempo de compilação, em compensação a uma melhora no tempo de execução, portanto é aconselhável cautela.

Interessante né? Mas nunca ouvi falar de ninguém ou algum projeto que a utilizasse. Dei uma folheada pelo Como programar em C++ do Deitel, 5ª edição, e não vi nada falando sobre isso. Fica como curiosidade!

Para saber mais:

quinta-feira, 18 de março de 2010

Speedy da Telefônica

Ainda longe da WiredImagem retirada do Danbooru (contém conteúdo NSFW)
Artista: Yoshitoshi ABe


Que a Telefônica (prestadora de serviços de telefonia no estado de São Paulo) nunca teve uma boa reputação, todo mundo já sabe. O duro é que aqui onde estou morando, no interior do estado, não se tem muita escolha em questão de serviços de internet banda larga: ou é o Speedy da Telefônica, ou o Virtua da Net, ou algum provedor local à rádio.

Atualmente eu estou com o último, e devo dizer que o serviço está me atendendo muito bem. Lógico que, como para todo bom computeiro, a idéia de ter um acesso mais rápido à rede mundial é sempre tentadora. Sendo assim, fui ver as ofertas nas duas empresas.

Infelizmente, a Net não tem cabeamento em minha rua, então já ficou fora de questão. Sobrou a Telefônica.

Eu havia visto pela internet que poderia montar um plano de R$14,90 pela linha + R$54,90 pelo Speedy de 1MB, resultando em R$69,80 mensais, mais a taxa de habilitação da linha. Legal, o preço, considerando a velocidade e comparando com o que eu pago agora, iria compensar bastante.

Chegando lá, a atendente já me disse que essa linha de R$14,90 "não podia ser comercializada", sendo somente usada como contra-oferta quando algum cliente vai cancelar a linha. Poxa, então porque está no site? Mas tudo bem, enfim. A mais barata que ela tinha para me oferecer era uma de R$24,90, então o valor mensal que havia calculado iria para R$79,80. Já fiquei meio com o pé atrás, mas ainda assim o valor continuava mais ou menos em conta.

Então ela falou que, depois que a linha fosse instalada, viria um técnico para verificar se o Speedy poderia ser instalado em casa. Ou seja, não havia garantia de que o serviço poderia ser instalado. O motivo que ela alegou era que, depois que instalassem a linha, precisariam ver se haviam "portas disponíveis" para a região, ou algo assim. Quer dizer, se não desse certo, eu ficaria chupando o dedo com uma linha telefônica que não usaria pra nada.

Depois disso, liguei para a central de vendas da Telefônica e a atendente me confirmou que não havia como assegurar a instalação do Speedy.

Se houvesse a garantia do serviço, eu assinaria na hora. Eu não sei como funciona o sistema de internet deles, mas será possível que não há nenhuma forma de saber de antemão se poderá haver mais uma conexão ou não? Acho no mínimo um contra-senso falar para um potencial cliente que não se tem a garantia de que ele será atendido.

segunda-feira, 8 de março de 2010

Falhou!

Até mesmo os ⑨'s estudamImagem retirada do Danbooru (contém conteúdo NSFW)
Artista: matyinging

Peço desculpas aos leitores do blog, semana passada eu não postei nenhuma atualização. Tenho uma desculpa esfarrapada para essa falha: estou estudando para algumas provas da universidade, cujos conteúdos envolvem a teoria da computação, especialmente autômatos e linguagens formais; paradigmas de linguagens de programação; e arquitetura e redes de computadores.

Todos são disciplinas que vi no decorrer da graduação, embora a maioria tenha sido já há algum tempo. Portanto, apesar de estudá-las ser uma espécie de revisão, também não deixa de ser um aprendizado, pois muitas coisas haviam sido esquecidas.

Obrigado pela compreensão e podem contar com updates semanais daqui em diante.