A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Organização do Ambiente de Execução (Runtime System) gap semântico Geração de código Tipos e valores variáveis expressões procedimentos funções parâmetros.

Apresentações semelhantes


Apresentação em tema: "Organização do Ambiente de Execução (Runtime System) gap semântico Geração de código Tipos e valores variáveis expressões procedimentos funções parâmetros."— Transcrição da apresentação:

1 Organização do Ambiente de Execução (Runtime System) gap semântico Geração de código Tipos e valores variáveis expressões procedimentos funções parâmetros Linguagem de Programação bitsbytes words registradores pilhas endereços Sub-rotinas Arquitetura Física

2 Organização do Ambiente de Execução (Runtime System) Representação de dados Avaliação de expressões Alocação de memória Rotinas Objetos e métodos

3 Interesse Prático Todo programador deve ter uma idéia básica dos aspectos de eficiência de várias construções da linguagem. Exemplo: escolha de estruturas de dados

4 Organização do Ambiente de Execução (Runtime System) Representação de dados Avaliação de expressões Alocação de memória Rotinas Objetos e métodos HOJE !!!

5 Representação de Dados Linguagem: –Booleanos, Inteiros, Caracteres, Registros, Arrays etc. Arquitetura Física: –Bits, bytes, words, double words. Gap semântico;

6 Princípios Básicos Não confusão: –Valores diferentes (de um tipo) devem ter representações diferentes; –Evita problemas em operações de comparação; –Números Reais … (confusão é inevitável  ) Unicidade: –Cada valor deve ter a mesma representação. –Desejável, porém não essencial; –Representação de inteiros …

7 Questões Pragmáticas Representação em tamanho constante –Todos os valores de um tipo tem mesmo tamanho; –Compilador pode planejar alocação de espaço; Representação direta ou indireta –Direta: Pascal, C, etc. Tipos primitivos em JAVA ® ; –Indireta (apontadores): Linguagens Funcionais (Haskell, ML, …); Objetos em linguagens OO (Java ® ); Essencial para tipos cujos valores variam de tamanho;

8 Rep. Direta vs. Rep. Indireta x x y Representação direta de x Representação indireta de x Representação indireta de y, com mesmo tipo de x, mas requisitando maior espaço

9 Representação de tipos primitivos Booleanos –1 byte ou word; Caracteres –Tabelas de caracteres; –ISO-Latin1 (2 8 ), UNICODE (2 16 ), etc. Inteiros –Em geral, representado por 1 word; –-maxint, …, -1, 0, 1, …, +maxint; –Maxint = 2 w-1 – 1, onde w = size[[Integer]]; –Java: w = 32;

10 Representação de tipos primitivos Exemplo: Intel Pentium –1 word = 32 bits; –Armazenamento organizado em 8-bit (byte), 16-bit (half-word), 64-bit (double-word); TypeRepresentaçãoSize Booleano e byte CaractereASCII1 byte Inteirostwos-complement1 half-word ou word

11 Representação de Registros type Data = record y:Integer, m: Integer, d: Integer end; type Details = record female: Boolean, dob: Date, status: Char end; var today: Date; var her: Details;

12 Representação de Registros Representação direta; Simples justaposição dos campos; ‘u’ True today.y today.m today.d her.female her.dob her.status her.dob.y her.dob.m her.dob.d

13 Representação de união disjunta Representação matemática: T = T 1 + … + T n Tag (identifica o T i ) e parte variante (T i ); Valor do tag determina o tipo da parte variante; Operações: teste do tag e projeção da parte variante; Exemplos: –Registros variantes em Pascal e Ada; –Uniões em Algol-68; –Tipos Algébricos em Haskell e ML (funcionais); Tamanho da parte variante varia …  –Como manter requisito de tamanho constante ? –Aloque o máximo de bytes necessários;

14 Representação de união disjunta type Shape = (point, circle, box); Figure = record case s: Shape of point: () circle: (r: Integer) box: (h,w: Integer) end; var fig:Figure

15 Representação de União Disjunta point 5 circle 4 3 box fig.s fig.r fig.s fig.h fig.w

16 Representação de Arrays Arrays estáticos –Limites conhecidos em tempo de compilação; –Justaposição dos valores; var grade: array [-2..3] of Char gnp: array [ ] of Integer ‘A’ ‘B’ ‘C’ ‘N’ ‘F’ ‘G’ grade[-2] grade[-1] grade[0] grade[1] grade[2] grade[3] gnp[2000] gnp[2001] gnp[2002] gnp[2003] gnp[2004]

17 Representação de Arrays Arrays dinâmicos –Limites conhecidos em tempo de execução; –Representação indireta: –Manipulador (descritor de array): limites + ponteiro; –Exemplo em Ada: type String is array (Integer range <>) of Character d: String (1.. k) s: String (m.. n - 1)

18 Representação de Arrays Dinâmicos (Ada) ‘J’ ‘e’ ‘f’ k = 7 m = 0 n = 4 ‘e’ ‘n’ ‘a’ ‘s’ ‘u’ ‘S’ origem d[6] d[7] d[5] d[4] d[3] d[2] s[0] s[3] s[2] s[1] limite inferior limite superior origem limite inferior limite superior d s d[1]

19 Representação de Tipos Recursivos type IntList = ^IntNode; type IntNode = record head: Integer; tail: IntList; end; var primes: IntList; data IntList = Nil | Cons Int IntList primes :: IntList primes = Cons 2 (Cons 3 (Cons 5 (Cons 7 Nil)))

20 Representação de Tipos Recursivos primes manipulador

21 Avaliação de Expressões (Máquina de Registradores) (a * b) + (1 – (c * 2)) LOAD R1 a MULT R1 b LOAD R2 #1 LOAD R3 c MULT R3 #2 SUB R2 R3 ADD R1 R2

22 Avaliação de Expressões (Máquina de Pilha) (a * b) + (1 – (c * 2)) LOAD a LOAD b MULT LOADL 1 LOAD c LOADL 2 MULT SUB ADD


Carregar ppt "Organização do Ambiente de Execução (Runtime System) gap semântico Geração de código Tipos e valores variáveis expressões procedimentos funções parâmetros."

Apresentações semelhantes


Anúncios Google