Realidades Paralelas

Monday, February 28, 2005

Olhando por aí...

O blog do Google.

A página de Steven Pinker.

Uma matéria no MathWorld sobre os testes de aptidão para candidatos a um emprego no Google.

Um artigo antigo de Bill Joy na Wired sobre o avanço da tecnologia e uma possível extinção da raça humana.

Um ensaio de Thomas Pynchon sobre os "Luddites" (existe tradução para o termo?).

Saturday, February 26, 2005

Connection Machine

Tentando reduzir a pilha de leitura, terminei hoje o The Connection Machine de Daniel Hillis. A connection machine é um misto de computador maciçamente paralelo e "memória ativa", no sentido que apesar da máquina ter poder de processamento, ela não é um sistema computacional completo; é preciso um computador host para comandar a máquina, que fica funcionando praticamente como uma memória. De qualquer forma, é uma arquitetura completamente diferente das máquinas de von Neumann que usamos até hoje.

O livro é baseado na tese de doutorado de Hillis no MIT; não sei o quanto mudou da tese para o livro, porque o texto em geral entra em poucos detalhes para uma tese (na minha opinião). O mais interessante é o primeiro capítulo, onde ele explica as motivações para fazer uma máquina dessa forma, a idéia principal sendo replicar o modelo de processamento do cérebro humano: ao invés de ter um grande processador central, ter milhares, ou talvez milhões, de pequenos processadores simples. Além disso, se aproveitar do fato de que processadores e memória hoje em dia são feitos do mesmo material para "esquecer" a barreira que os separa na arquitetura tradicional de von Neumann. Assim, o componente principal da máquina é uma célula processador/memória, que é agrupada pelo programador em "estruturas de dados ativos", ou seja, estruturas que possuem o próprio poder de processamento. O processamento não está apenas nas células em si, mas também na comunicação (ou conexão) entre elas; daí o nome "máquina de conexões".

Os capítulos seguintes tratam de como programar a máquina (usando um dialeto Lisp), considerações sobre o projeto de uma máquina real seguindo esses princípios arquitetonicos, alocação de memória e uma visão geral sobre o protótipo da máquina que estava sendo construída na época. Acho que faltaram mais detalhes nesses capítulos, exceto o sobre programação. O último capítulo é um sermão confuso sobre como as ciências da computação deveriam se parecer mais com a física; não entendi muito bem onde o autor queria chegar, mas não concordo com a maioria do que entendi. Esse capítulo provavelmente foi resultado da influência de Richard Feynman sobre o pessoal da Thinking Machines (a empresa criada por Hillis para construir e vender a Connection Machine).

Enfim, o mercado dos supercomputadores afundou, a Thinking Machines foi pro saco, e a Connection Machine não existe mais. Fico pensando se essa arquitetura era realmente vantajosa em relação ao que ainda usamos hoje em dia; se sim, porque ninguém mais tentou algo do tipo. Parece que vivemos condenados à arquitetura de von Neumann, criada quando os computadores eram feitos com válvulas e memórias de núcleos magnéticos. Uma arquitetura que, por sinal, favorece as linguagens imperativas... as pessoas acham que a computação, como um campo do conhecimento humano, avança muito rápido; eu já acho, às vezes, que ela avança devagar demais.

Friday, February 11, 2005

Aliás...

Qualquer pessoa aprende em poucos minutos o que é um isomorfismo. O nome parece feio mas a idéia é simples, basta explicar de uma forma adequada ao contexto. Pouca gente vai absorver uma definição formal: "dado um morfismo f de A para B, diz-se que f é um isomorfismo se existe um morfismo g de B para A tal que g o f = I(A) e f o g = I(B)".

A notação matemática, assim como o jargão especializado e convenções de qualquer área, é ao mesmo tempo uma poderosa ferramenta de comunicação e uma ótima forma de esconder das pessoas "de fora" o significado do discurso.

O que é "natural" ?

Estou lendo o "Conceptual Mathematics: A First Introduction to Categories" de Lawvere e Schanuel; postarei uma resenha depois, mas em suma o livro tem a intenção de ensinar teoria das categorias para qualquer pessoa que tenha tido uma exposição mínima às idéias da teoria dos conjuntos e funções, incluindo aí gente do ensino médio. É uma exposição totalmente voltada para as categorias, desde o começo, com muitos exemplos ilustrativos que ajudam muito na formação de uma intuição sobre o assunto. Na minha opinião muitas idéias do livro poderiam ser aproveitadas para reformulações futuras dos cursos de matemática no ensino básico, mas aí é história para outro dia.

O que eu achei interessante é que na discussão sobre isomorfismos os autores mencionam os conceitos primitivos de contagem (coisa que eu já considerei muito, principalmente quando estudava sobre Cantor, diagonalização e álgebra transfinita), e chamam a atenção para algo que eu não tinha pensado: isomorfismo é o conceito primitivo, número é o conceito abstrato derivado dele. O engraçado é que se você chegar para alguma pessoa na rua falando sobre isomorfismo, é capaz dela sair correndo com medo, ou ficar olhando pra você estranho, pensando se foi um xingamento. Mas número todo mundo conhece, todo mundo sabe.

Pra quê eu comentei isso tudo mesmo ? Ah, sim, para falar sobre linguagens de programação. De vez em quando aparece alguém que fala que "o estilo interativo é mais natural para as pessoas", afirmação puramente baseada nos seus próprios pré-conceitos: claro, para qualquer programador que tenha sido educado em um paradigma imperativo, linguagens imperativas parecem mais naturais. Não necessariamente que seja mais natural do que uma linguagem funcional para alguém que nunca aprendeu nada sobre programação. O exemplo mostra que algumas idéias que parecem mais 'complicadas' ou 'abstratas' são, na verdade, mais fundamentais, por sua própria generalidade.

Wednesday, February 02, 2005

Links e a volta dos que não foram

O projeto Links pretende criar uma nova linguagem funcional, voltada para aplicações Web. À frente estão Philip Wadler e outros nomes importantes (Xavier Leroy, Benjamin Pierce, Simon P-J).

Wadler explica melhor do que eu. Vejam a introdução e os slides, ou antes, veja a mensagem introdutória no newsgroup comp.lang.functional.

Mas a idéia de ter uma linguagem puramente funcional largamente usada é muito interessante, e pode ajudar a mudar algumas coisas nessa indústria. Sem falar que o projeto promete trazer inovações interessantes, numa linguagem que deve misturar aspectos de ML e Haskell. Mais ou menos como seria minha linguagem dos sonhos atualmente.

(Ah, e o artigo que ele cita sobre efeitos e mônadas é o primeiro nesta página)

Tuesday, February 01, 2005

Compiladores

Primeiro estava olhando a documentação do projeto Tree SSA do GCC, que consiste na geração de código na forma Static Single Assignment para o suporte a passes de otimização. O interessante é que a árvore SSA é processada sem efeitos colaterais; ou seja, é uma parte funcional do compilador GCC que está entrando em operação agora nas versões a partir da 3.4. Parece que o mainstream está aprendendo algo com a comunidade funcional.

E por falar em GCC, descobri que eles estão com um Wiki, incluindo informações sobre a estrutura do compilador e outras informações interessantes.

E sim, ainda estou com meu projeto de compilador. Terminei o parser, tarefa mais agradável do que eu esperava, já que o MLYacc é menos "imperativo" que o ML-Lex; agora estou fazendo parte da análise semântica, mais especificamente a verificação de tipos. Nada difícil, nem inferência de tipos tem, mas é meio trabalhoso. A análise semântica trabalha em cima da árvore sintática gerada pelo parser, e aí é só fazer um punhado de funções recursivas e tá tudo resolvido. Quando isso estiver terminado, vai ser a vez da geração de código intermediário. Daí pra frente, não sei se vou ter paciência para fazer geração de código nativo não; há muito o que fazer e o tempo é curto.

Em breve: semântica e formalismos para concorrência.