Avançar para o conteúdo principal

Compiladores (1) - Introdução

A informática saiu da sua "idade média" em parte ajudado pelo aparecimento de linguagens de programação de mais alto nível do que o assembler dos CPU(s).
Os computadores,no entanto, executam sequências de instruções muito particulares. Estas variam normalmente de versão para versão de um CPU e entre fabricantes de CPU(s).
Com as linguagens de programação consegue-se criar programas que funcionem em várias máquinas.

Para executar o código (normalmente textos numa linguagem com uma gramática bem definida) existem programas que convertem essa linguagem para a da máquina concreta. A esses programas chamam-se compiladores. Os compiladores fazem parte da computação desde os anos 50.

Um compilador é um programa complexo. Em 1958, um compilador de fortran demorava algo como 18 meses / homem a ser construído.

No inicio o maior problema dos compiladores era a quantidade de memória ram ou disco disponível. Por isso era tentava-se construir os compiladores em passo-único . Isto significa que o programa era lido e convertido apenas numa leitura do seu código fonte.

Nos últimos anos, o disco e a memória não são claramente um problema. Desta forma os compiladores evoluíram muito e a sua arquitectura actual é bastante completa, com fases bem divididas e com interfaces bem definidos entre fases.

Este post é uma introdução pois participo no desenvolvimento de um compilador da linguagem Informix 4gl. Já à algum tempo que iniciei uma mudança com os seguintes objectivos:
  • Aplicar uma arquitectura moderna (com separação clara e interfaces entre fases).
  • Atingir um nível de produtividade de produção e manutenção.
  • Criar um compilador cuja gramática (na altura da sua compilação) pode facilmente variar.

Comentários

  1. Ora aí está !
    Os compiladores evoluiram muito em termos de arquitectura e actualmente a sua arquitectura e ferramentas começam a ser tais que irão permitir a execução de tarefas em paralelo usando por exemplo multi-threading.
    Mas podia-se ir mais longe fazendo distribuição por várias máquinas.
    O meu próximo post será sobre as arquitecturas dos compiladores mais modernos.

    ResponderEliminar
  2. Entretanto estive a pensar.
    O compilador de Java sempre que precisa trata de compilar as classes Java que são referênciadas num módulo (o que faz com que se faça javac sobre um ficheiro e em vez de um .class apareçam vários).
    Não sei até que ponto o javac já funciona em multi-threading.
    Mas se não funciona podia bem funcionar.

    ResponderEliminar
  3. Boas,

    Realmente passam a estar disponíveis máquinas com 2 ou mais cores a bom preço, e os compiladores continuam a não tirar partido dos mesmos (http://www.linkedin.com/answers?viewQuestion=&questionID=7804&askerID=4194838&browseIdx=5&sik=1169463583475&goback=%2Eahp%2Eama).

    No projecto do compilador 4GL vão incorporar paralelismo ?

    ResponderEliminar
  4. Interessante! Onde é que está a continuação deste artigo? ;-)

    ResponderEliminar

Enviar um comentário

Mensagens populares deste blogue

[Off-topic] "Novas" tendências de gestão

Afinal as novas tendências de gestão não são de agora. E as suas consequências também já são conhecidas há muito. Vejam esta carta do Senhor Vauban , Engenheiro Militar e Marechal de França, dirigida ao Senhor Losvois, Ministro da Guerra de Luís XIV, datada de 17 de Julho de 1683. "Monsenhor: ... Há alguns trabalhos nos últimos anos que não acabaram e não acabarão nunca, e tudo isso, Monsenhor, porque a confusão que causam as frequentes baixas de preços que surgem nas suas obras só servem para atrair como empreiteiros os miseráveis, malandros ou ignorantes e afugentar aqueles que são capazes de conduzir uma empresa. Digo mais, deste modo eles só atrasam e encarecem as obras consideravelmente porque essas baixas de preços e economias tão procuradas são imaginárias, dado que um empreiteiro que perde, faz o mesmo que um náufrago que se afoga, agarra-se a tudo o que pode; e agarrar-se a tudo, no ofício de empreiteiro, é não pagar aos fornecedores, pagar baixos salários, ter os piores

Conferência Europeia da Comunidade Alfresco

Já foi há quase quinze dias, mas julgo que ainda será relevante abordar a Conferência Europeia da Comunidade Alfresco, que decorreu em Barcelona no dia 22 de Abril. Com uma audiência de mais de 200 pessoas (a sala reservada estava cheia) vindas de vários pontos da Europa, este evento serviu para que muita gente desta comunidade se encontrasse pela primeira vez face a face. A Alfresco Inc. é uma empresa recente, que apostou em criar uma solução de gestão documental de topo de gama usando o modelo open-source . Considerando que a empresa, no seu terceiro ano de actividade, já atingiu o break-even , parece ter sido uma boa aposta. No arranque da conferência esteve John Powell, CEO da empresa, que falou um bocado sobre a excelente evolução da empresa e abordou a "guerra" entre o modelo de negócios proprietário e o modelo de código aberto. Exemplificou este conflito com o Microsoft SharePoint, que ele designou como "a morte da escolha", justificando o epíteto pelo facto

O que é uma POOL ?

Tenho andado a fazer implementações de mecanismos de pooling em Java 2 Enterprise Edition. Como me parece um conceito algo lato tentei a abordagem do dicionário. Alguns mostram que de facto a palavra é usada para muita coisa. A definição mais comum é "piscina". A que mais me agradou foi o que descobri na wikipedia , onde pooling é apresentada como uma técnica para guardar qualquer coisa que já não é necessária em determinado sitio (a que se chama pool ) com o objectivo de a usar quando necessário optimizando assim a utilização de recursos disponíveis. Partindo para a computação, existem vários tipos de pools: Thread Pool - Conjunto de threads livres que se vão adicionando a um fifo quando não necessárias e retirando quando se quiserem usar. Memory Pool - Conjunto de blocos de memória, todos da mesma dimensão, que se alocam inicialmente e usam à medida que necessário garantindo que o tempo de alocação de memória é constante e a fragmentação minima. Connect