• Nenhum resultado encontrado

ORTL System[JML91,MRS90a] surge com o objectivo de optimizar o c´odigo gerado pelo Typed Smalltalk [JGZ88] (um compilador para Smalltalk). Mais tarde evolui para uma

4E de real¸´ car que este projecto envolve investigadores que foram respons´aveis por algumas das mais im-

portantes contribui¸c˜oes cient´ıficas desta ´area (PO [FD80],IBURG[FHP92], NJMCT [RF95], lcc [FH95], etc).

2.7. RTL System 23

solu¸c˜ao independente que visa suportar o desenvolvimento de compiladores, mas especial- mente das tarefas relacionadas com a optimiza¸c˜ao de c´odigo.

Desde in´ıcio que o RTL System abordou o problema do desenvolvimento de compi- ladores de forma substancialmente distinta do que at´e a´ı era feito. A grande maioria dos sistemas pautava-se pelo uso de t´ecnicas de gera¸c˜ao e por reduzir a estrutura dos compila- dores `as tarefas de front-end e de back-end, n˜ao potenciando assim a simples reutiliza¸c˜ao do c´odigo. As poucas excep¸c˜oes resultavam do trabalho desenvolvido `a volta do PO (e mais tarde do VPO). O RTL System parte desta base para se impor como solu¸c˜ao claramente orientada `a reutiliza¸c˜ao de c´odigo, vinculando-se como nenhum outro sistema o tinha feito at´e a´ı aos conceitos de medium-level e de RIC. Aproveita tamb´em os conceitos inerentes `a RTL, nomeadamente a utiliza¸c˜ao de operadores e modos de endere¸camento gen´ericos, f´aceis de “mapear” em instru¸c˜oes de uma qualquer arquitectura de computa¸c˜ao; mas tamb´em o con- ceito de pseudo-registo, como forma abstracta e sem restri¸c˜oes de representar um qualquer registo f´ısico do microprocessador.

A principal inova¸c˜ao do RTL System est´a na forma como implementa a RTL, que faz uso de uma linguagem orientada por objectos (o Smalltalk). Significa isto, que os elementos inerentes `a RTL se encontram definidos como classes. ´E atrav´es da instancia¸c˜ao dessas classes que se constr´oi a RIC. As pr´oprias rotinas que fazem parte das v´arias tarefas do processo de compila¸c˜ao s˜ao implementadas como classes/m´etodos.

A utiliza¸c˜ao de um paradigma de programa¸c˜ao orientado por objectos altera de forma dr´astica e permanente o conceito de RIC, dando-lhe uma importˆancia nunca at´e a´ı conferida. Os atributos que classificam um modelo de RIC, como ´e o caso da flexibilidade e da capacidade semˆantica da linguagem, passam a ter outra dimens˜ao e novos atributos s˜ao introduzidos.

Em termos de flexibilidade ´e poss´ıvel fazer tudo o que se faz com modelos e implemen- ta¸c˜oes mais convencionais. Passa no entanto a ser poss´ıvel: especializar o tipo de operadores atrav´es de uma simples deriva¸c˜ao de classes; e acrescentar novos operadores atrav´es da de- fini¸c˜ao de novas classes. ´E tamb´em mais acess´ıvel: associar ou acrescentar informa¸c˜ao aos elementos da RIC; e introduzir elementos abstractos, quer para descrever opera¸c˜oes fict´ı- cias (puramente para consumo do pr´oprio processo de compila¸c˜ao), quer para facilitar o acesso/visibilidade a entidades que est˜ao implicitamente caracterizadas na RIC. Por exem- plo, oGrafo de Fluxo de Controlo (GFC) ´e uma entidade abstracta que est´a implicitamente representada nos modelos mais convencionais de RIC e que ´e suficiente para a implementa- ¸

c˜ao/execu¸c˜ao de muitas rotinas de an´alise e de optimiza¸c˜ao de c´odigo. Aceder ao GFC num modelo de RIC mais convencional, como no caso das listas de tuplos ou de ´arvores de expres- s˜oes, nem sempre ´e uma opera¸c˜ao trivial. O RTL System facilita esta tarefa fazendo do GFC uma entidade expl´ıcita da RIC. Para tal, define um conjunto de classes, os RTLFlowNodes, que servem para descrever o GFC.

O contributo mais importante ´e que, atrav´es da implementa¸c˜ao de m´etodos, a RIC deixa de ser uma estrutura de dados est´atica e adquire dinˆamica pr´opria. Isto ´e aproveitado no RTL System para associar aos elementos da RIC mecanismos que permitem, por exem- plo, optimizar os pr´oprios elementos ou manter a consistˆencia entre os diferentes n´ıveis de abstrac¸c˜ao.

O RTL System resulta assim numa framework que, para l´a de disponibilizar um con- junto representativo de rotinas de compila¸c˜ao, nomeadamente de optimiza¸c˜ao de c´odigo, define um modelo de RIC (que tem por base a RTL) e implicitamente um modelo de compi- la¸c˜ao. A utiliza¸c˜ao desta framework faz-se segundo dois princ´ıpios: deriva¸c˜ao e instancia¸c˜ao. A simples utiliza¸c˜ao das rotinas ou das classes que definem o modelo de RIC, apenas requer a instancia¸c˜ao das classes. J´a a implementa¸c˜ao de novas rotinas ou a defini¸c˜ao de novos ele- mentos para o modelo de RIC, requer a implementa¸c˜ao de raiz de novas classes ou a deriva¸c˜ao

a partir das que j´a existem.

O RTL System ´e tamb´em uma das mais importantes referˆencias para o trabalho de- senvolvido na prepara¸c˜ao desta disserta¸c˜ao, o qual faz uso de uma abordagem semelhante (reutiliza¸c˜ao com base numa framework ). O pr´oprio modelo de RIC que ´e proposto (ver Cap´ıtulo4) descende do modelo utilizado no RTL System, que para l´a das diferen¸cas de im- plementa¸c˜ao e de estrutura, difere essencialmente na maturidade da solu¸c˜ao e na clarifica¸c˜ao de conceitos.

O RTL System ´e tamb´em uma das primeiras e poucas solu¸c˜oes que abordam o desenvol- vimento de ferramentas para constru¸c˜ao de compiladores numa perspectiva de engenharia de software. O que refor¸ca a sua importˆancia como referˆencia, dado que a grande contribui¸c˜ao deste doutoramento ´e, essencialmente, uma solu¸c˜ao de engenharia.