• Nenhum resultado encontrado

Trata-se de um sistema de gera¸c˜ao que permite a constru¸c˜ao integral de compiladores. Para tal, faz uso de uma linguagem de alto n´ıvel com a qual se especificam os compiladores. O GENTLE utiliza essa especifica¸c˜ao para gerar todas as rotinas necess´arias `a constru¸c˜ao do compilador.

Esta solu¸c˜ao, que tem por base um processo de reconhecimento e reescrita de padr˜oes e que funciona de forma integrada com o Lex e o Yacc, permite (com algumas limita¸c˜oes) construir as principais tarefas do processo de compila¸c˜ao, nomeadamente de s´ıntese, trans- forma¸c˜ao, optimiza¸c˜ao e gera¸c˜ao de c´odigo.

A mestria desta solu¸c˜ao reside na uniformidade com que encara o problema da constru- ¸

c˜ao de compiladores. ´E terrivelmente simples a abordagem utilizada (o que de forma alguma significa que a implementa¸c˜ao do GENTLE tenha sido trivial), e permite especificar todas as opera¸c˜oes com base numa ´unica linguagem.

´

E no entanto na metodologia utilizada, que garante a uniformidade e a simplicidade da solu¸c˜ao, que est´a a sua principal desvantagem. No sentido de simplificar a pr´opria especifi- ca¸c˜ao e tornar mais simples a constru¸c˜ao dos compiladores, as t´ecnicas de reconhecimento e reescrita de express˜oes s˜ao normalmente aplicadas em contextos muito restritos. O que at´e pode ser adequado para simplificar a implementa¸c˜ao de determinadas tarefas, mas n˜ao para a implementa¸c˜ao das muitas rotinas de an´alise e de optimiza¸c˜ao de c´odigo de m´edio e alto n´ıvel, que normalmente requerem um contexto de execu¸c˜ao mais alargado. Mesmo permi- tindo integrar solu¸c˜oes implementadas directamente em linguagem C, que recorram a outras metodologias, as limita¸c˜oes do GENTLE mantˆem-se dada a forma como os compiladores s˜ao especificados.

N˜ao deixa no entanto de ser uma ferramenta interessante e especialmente adequada ao desenvolvimento de compiladores para arquitecturas espec´ıficas, como as DSP. O GEN- TLE surge assim no contexto deste doutoramento como prova do potencial das solu¸c˜oes de gera¸c˜ao, nomeadamente quando utilizadas na constru¸c˜ao dos geradores de c´odigo e de algu- mas optimiza¸c˜oes. Mas tamb´em como prova das limita¸c˜oes que esta abordagem tem para desenvolver ferramentas/sistemas que visem a constru¸c˜ao integral de compiladores.

2.3

CoSy

O CoSy [Exp03c] ´e uma referˆencia incontorn´avel no universo das ferramentas/sistemas para desenvolvimento de compiladores. Talvez represente mesmo o que de melhor se faz nesta ´area a n´ıvel europeu. O seu desenvolvimento, que foi feito com financiamento de v´arios programas comunit´arios, envolveu uma quantidade de recursos invulgar. Segundo documen- ta¸c˜ao do pr´oprio sistema, estima-se que mais de 120 pessoas/ano estiveram envolvidas neste projecto desde 1994. E envolveu algumas das mais sonantes institui¸c˜oes de investiga¸c˜ao europeias que fazem trabalho nesta ´area.

O CoSy ´e uma framework que cont´em um vasto conjunto de solu¸c˜oes pr´e-implementadas, que funcionam sob um modelo comum de representa¸c˜ao de c´odigo - oCCMIR[Exp03b], e in- tegra v´arias ferramentas que por si s´o s˜ao trabalhos de referˆencia. ´E o caso doPAG[Mar98], uma framework para desenvolvimento de rotinas de an´alise de fluxo de dados; do OP- TIMIX [Aßm00], um sistema que, atrav´es de t´ecnicas de reescrita de grafos, permite a constru¸c˜ao de rotinas de an´alise e de optimiza¸c˜ao de c´odigo; e do Back-End Generator- BEG [ESL89,Exp03a], uma ferramenta para gera¸c˜ao das rotinas de selec¸c˜ao de instru¸c˜oes e de atribui¸c˜ao de registos.

O CoSy pelo tipo de solu¸c˜ao que utiliza, que faz uso de uma framework cujos com- ponentes funcionam sob uma representa¸c˜ao comum de c´odigo, vulgarmente designada por Representa¸c˜ao Interm´edia do C´odigo (RIC), seria `a primeira vista o sistema que maiores

semelhan¸cas apresenta com a solu¸c˜ao utilizada na elabora¸c˜ao desta disserta¸c˜ao e, como tal, o trabalho a utilizar como referˆencia. Mas esse facto n˜ao se verifica por v´arios motivos. Um dos quais ´e que as semelhan¸cas ficam-se por aqui. O CoSy aborda o problema da constru¸c˜ao de ferramentas de compila¸c˜ao de forma ´unica. ´E uma framework no verdadeiro sentido da palavra, s´o que esta define um modelo de coopera¸c˜ao entre componentes, que se caracteriza por interac¸c˜oes que nada tˆem a ver com o modelo convencional (em que os componentes s˜ao executados sequencialmente). As v´arias formas de coopera¸c˜ao s˜ao asseguradas atrav´es dos seguintes mecanismos (componentes dedicados):

• Pipeline: mecanismos que permitem a execu¸c˜ao sequencial dos componentes (como vulgarmente acontece em outras solu¸c˜oes);

• Data-parallel : mecanismos que permitem colocar v´arios componentes do mesmo tipo, a operar sobre agrega¸c˜oes de elementos da RIC;

• Fork : mecanismos que permitem colocar componentes de tipos distintos a processar concorrentemente um determinado elemento ou conjunto de elementos da RIC;

• Loop: mecanismos que permitem pˆor um ou mais componentes a iterar sobre um elemento (ou conjunto de elementos) da RIC, at´e que se satisfa¸ca determinada condi¸c˜ao; • Speculative: mecanismos que permitem colocar v´arios componentes de tipos distintos a operarem concorrentemente sobre um elemento (ou conjunto de elementos) da RIC, mas em que apenas ser´a utilizado o resultado apurado por um dos componentes (os resultados apurados pelos demais componentes s˜ao desprezados);

• Optimistic: mecanismos que atrav´es de processos heur´ısticos permitem escolher, de entre v´arios componentes, aquele que potencialmente produzir´a os melhores resultados. Para al´em dos mecanismo anteriormente descritos, dos mecanismos convencionais (ta- refas convencionais de compila¸c˜ao), e dos mecanismos espec´ıficos para a comunica¸c˜ao entre componentes, o CoSy cont´em ainda um mecanismo especial, o supervisor, ao qual cabe efec- tuar a gest˜ao e garantir a utiliza¸c˜ao mais adequada dos restantes mecanismos.

Para que este modelo de compila¸c˜ao funcione, h´a que utilizar um modelo de represen- ta¸c˜ao de c´odigo que assegure a execu¸c˜ao dos v´arios tipos de mecanismos, atendendo para tal que h´a mecanismos que concorrem pelos recursos (RIC), outros que cooperam para efectuar determinadas opera¸c˜oes, outros que funcionam em “simultˆaneo” sobre a RIC, etc. O que requer que o modelo de representa¸c˜ao de c´odigo possua solu¸c˜oes de controlo de acesso `a RIC, de partilha de mem´oria, de replica¸c˜ao, etc. Solu¸c˜oes estas que n˜ao s˜ao utilizadas em mais nenhum modelo de representa¸c˜ao de c´odigo. Mas cuja implementa¸c˜ao no CoSy, apesar de acarretar alguma complexidade extraordin´aria, contribui para fazer deste um sistema extre- mamente vers´atil, capaz de explorar como nenhum outro a aplica¸c˜ao dos componentes. O que faz com que seja especialmente adequado para construir compiladores para arquitectu- ras mais exigentes, que envolvam mem´oria partilhada, computa¸c˜ao paralela ou concorrencial, processamento vectorial, etc.

A vers˜ao actual do CoSy, que ´e comercial, ´e utilizada por v´arias empresas ligadas `a constru¸c˜ao de computadores, de microprocessadores e de ferramentas de compila¸c˜ao. O que por si s´o prova a qualidade deste sistema. Foi j´a utilizado ou encontra-se a ser utilizado no desenvolvimento de compiladores para v´arios tipos de arquitectura: CISC,RISC,DSP,NPU e VLIW (ver gloss´ario).

Para o seu sucesso contribui, n˜ao s´o a abordagem utilizada, como tamb´em a versati- lidade da solu¸c˜ao e toda a log´ıstica envolvente, que faz com que este sistema disponibilize uma quantidade invulgar de recursos, dos quais se destacam os seguintes: