# Autor

Caloni, 2005-05-16 <computer> <draft> <veryold> [up] [copy]

Compulsive programmer. Wanderley Caloni Jr, brasileiro de nascença e programador por paixão, começou a se divertir aos 17 anos com seu Microsoft Quick BASIC recém baixado da internet. Depois que fez seu primeiro programa - uma calculadora - e saiu pulando pela casa feliz da vida, nunca mais parou de programar. Após dominar as técnicas básicas do if, while e for (ohhhhh...) passou a estudar uma tal de C, linguagem que o faria ficar mais doidão ainda por programação. Seu primeiro programa in(útil) foi o jogo genius, o único no mundo (que eu conheço) que guardava recordes no próprio executável! Depois que gabaritou no C passou a desenvolver classes templates com funções polimórficas e herança múltipla em C++.

Seu primeiro emprego na área de informática foi em uma empresa de tecnologia, a SCUA Segurança da Informação SA, onde desenvolveu software por 4 anos. Foi responsável direto pelos aplicativos de interface com o usuário dos produtos SCUA, como SCUA Security 2000, SCUA Security Suite e SCUA Finger True. Foi mantenedor da infraestrutura desses produtos por todo esse período.

Atualmente é sócio da DevSolution, um grupo de desenvolvedores de software de tecnologia. Presta serviços para a Open Communications Security SA, uma das empresas líderes em segurança da informação no mercado nacional. Seu envolvimento resume-se em análise de trojans e desenvolvimento de detecção e proteção contra fraudes eletrônicas.

Fora do trabalho, adquire novos conhecimentos no Instituto Brasileiro de Tecnologia Avançada, onde estuda arquitetura de redes. Nas horas vagas, mantém um blog sobre programação C/C++ e Windows, onde tenta organizar seu conhecimento aprendido nesses anos. Atualmente mantém residência em São Bernardo do Campo, São Paulo. Pode ser contatado através de seu e-mail ou em seu próprio site.

A idéia do blog é tentar disseminar e esclarecer detalhes no uso das linguagens C e C++ - com uma pitada de Windows, que é o ambiente em que o autor atualmente trabalha. C++ já é uma linguagem bastante usada e difundida no mundo todo, mas em território nacional ainda falta muito interesse de conhecer e usar essa poderosa linguagem nos projetos do dia-a-dia.


# A inteligência do if (primeira versão)

Caloni, 2005-05-29 <computer> <draft> <veryold> [up] [copy]

Estava outro dia filosofando com meu amigo sobre o funcionamento do conceito mais poderoso em programação de computadores: o if. E me perguntava como que o computador consegue tomar uma decisão a partir de uma comparação. É o tipo de problema cuja resposta parece óbvia mas enquanto você não se aprofunda no tema nunca fica satisfeito de fato (mesmo sabendo a teoria). Após quebrar a cabeça por algum tempo, encontrei uma solução no mínimo interessante.

Computadores lêem e escrevem na memória, e é isso. Uma instrução é uma leitura de bits da memória para o circuito lógico que altera o estado da máquina. Uma comparação é uma escrita em flags depois da entrada ter passado por um filtro de portas lógicas. Um salto é a escrita do endereço da próxima instrução no program counter. Quando uma função é chamada seus parâmetros e o endereço de retorno são escritos na pilha (uma área da memória). Para retornar, uma instrução lê o endereço da pilha e o coloca no program counter.

Sendo assim, confirmado que Von Neumann e Turing ainda não morreram, nada mais justo supor que um if é um salto automaticamente calculado através do resultado de uma comparação feita imediatamente antes. Isso traduzindo em código de alto nível:

#include <stdio.h>

void True()
{
   printf("Verdadeiro\n");
}

void False()
{
   printf("Falso\n");
}

typedef void (*Jump)();
Jump If[2] = { False, True };

int main(int argc, char* argv[])
{
   If[2 > 3]();
   If[3 > 2]();
}

Eis um código que executa um salto condicional sem o uso do if que vem de fábrica. Na verdade, o if emulado acima constitui conceitualmente o que imagino que ocorra nas entranhas de um PC. Imagino, pois não fui a fundo o suficiente para vasculhar os documentos da Intel. Para mim, a mágica foi desvendada. O deslumbramento é que continua...

Comentários

  • [2/1/07 22:41] Anonymous:

Bom, quando tu falou que as instruções alteram o registrador program counter (registrador que indica qual é a próxima instrução), pra mim já ficou claro como os jumps funcionam... Mas se esse código deixa as coisas mais claras pra ti, seja feliz :-p

  • [4/1/07 00:48] Wanderley Caloni Jr:

Sim, essa explicação por si só já explica como os jumps funcionam. Porém , o que queria na verdade explicar com o código de exemplo é como os jumps condicionais funcionam, ou seja, aquele salto que depende de uma condição prévia, que pode ou não existir.


[next: index] [prev: 2006-04]