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

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 ...

Backup automático de disco USB (pen drive)

Hoje em dia toda a gente tem uma pen drive para levar os seus ficheiros de um lado para o outro. E muitas vezes está lá trabalho importante. Mas impõe-se uma pergunta: o que acontece se se perde a pen drive ? Ou se esta se avaria? Quem é que faz backups regulares da pen drive ? Muito pouca gente! Pessoalmente tenho por hábito fazer um backup cerca de uma vez por semana. Quando o trabalho é muito, faço backup mais vezes. Mas já por duas vezes as avarias me fizeram perder as versões mais recentes. E isto chateia. Por isso aqui há uns dias decidi "coçar esta comichão" e resolver o problema de forma mais sistemática: arranjei maneira de fazer um backup automático cada vez que ligo a pen drive a um computador. (sim, eu sei que há software específico para isto, mas que querem, apeteceu-me fazer mais um) A receita é relativamente simples: um script (DOS batch file ) que faz o backup , um ficheiro de definição de autorun e já está. 1. O script de backup - Basta instalar, na roo...

Horário de trabalho

A trabalhar há dois meses na Irlanda, ando para escrever alguns apontamentos daqui de Dublin, mas são tantos e tão diversos que há matéria aqui para escrever um blog inteiro (e talvez ainda o faca se a inspiração vier em meu auxílio). Há no entanto uma diferença que encontrei por aqui que é muito mais marcante do que eu poderia supor poder ser, e lembrei-me deste ponto que talvez se acomode bem neste blog e no tipo de posts que por aqui há. Falo do horário de trabalho . O horário que por aqui se pratica, e que suponho generalizado, é de entrar as 9h e sair as 17h, com meia-hora de almoço. Ou seja, 7 horas e meia. Ou seja, meia-hora de diferença para o horário "normal" de Portugal. E que diferença que essa diferença faz... Os irlandeses não são muito "fanáticos" com o trabalho e os horários, não se trata de regimes "autoritários" como parece ser em Inglaterra ou na Alemanha - a propósito, sabem que os alemães dizem que na Alemanha a taxa de criminalidade é ...