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:
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.
Ora aí está !
ResponderEliminarOs 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.
Entretanto estive a pensar.
ResponderEliminarO 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.
Boas,
ResponderEliminarRealmente 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 ?
Interessante! Onde é que está a continuação deste artigo? ;-)
ResponderEliminar