organização do ambiente de execução (runtime system) gap semântico geração de código tipos e...

22
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 bits bytes words registradores pilhas endereços Sub-rotinas Arquitetura Física

Upload: internet

Post on 19-Apr-2015

113 views

Category:

Documents


0 download

TRANSCRIPT

Page 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

Organização do Ambiente de Execução (Runtime System)

gap semânticoGeração de código

Tipos e valoresvariáveis expressões

procedimentosfunções

parâmetros

Linguagem deProgramação

bits byteswordsregistradores

pilhasendereços

Sub-rotinas

ArquiteturaFísica

Page 2: 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

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

Page 3: 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

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

Page 4: 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

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

Page 5: 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

Representação de Dados

• Linguagem:– Booleanos, Inteiros, Caracteres, Registros,

Arrays etc.

• Arquitetura Física: – Bits, bytes, words, double words.

• Gap semântico;

Page 6: 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

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 …

Page 7: 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

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;

Page 8: 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

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

Page 9: 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

Representação de tipos primitivos

• Booleanos– 1 byte ou word;

• Caracteres– Tabelas de caracteres;

– ISO-Latin1 (28), UNICODE (216), etc.

• Inteiros– Em geral, representado por 1 word;

– -maxint, …, -1, 0, 1, …, +maxint;

– Maxint = 2w-1 – 1, onde w = size[[Integer]];

– Java: w = 32;

Page 10: 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

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);

Type Representação Size

Booleano 000000002 e 111111112 1 byte

Caractere ASCII 1 byte

Inteiros twos-complement 1 half-word ou word

Page 11: 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

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;

Page 12: 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

Representação de Registros

• Representação direta;

• Simples justaposição dos campos;

1

1

2000

‘u’

5

5

1978

Truetoday.y

today.m

today.d

her.female

her.dob

her.status

her.dob.y

her.dob.m

her.dob.d

Page 13: 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

Representação de união disjunta

• Representação matemática: T = T1 + … + Tn

• Tag (identifica o Ti) e parte variante (Ti);

• 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;

Page 14: 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

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

Page 15: 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

Representação de União Disjunta

point

5

circle

4

3

boxfig.s fig.s

fig.r

fig.s

fig.h

fig.w

Page 16: 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

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 [2000..2004] of Integer

‘A’

‘B’

‘C’

‘N’

‘F’

‘G’

15100

15200

15000

14200

13500grade[-2]

grade[-1]

grade[0]

grade[1]

grade[2]

grade[3]

gnp[2000]

gnp[2001]

gnp[2002]

gnp[2003]

gnp[2004]

Page 17: 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

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)

Page 18: 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

Representação de Arrays Dinâmicos (Ada)

1

7

0

4

‘J’

‘e’

‘f’

‘f’

k = 7m = 0n = 4 ‘e’

‘n’

‘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]

Page 19: 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

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

Page 20: 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

Representação de Tipos Recursivos

2

3

5

7

primes

manipulador

Page 21: 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

Avaliação de Expressões (Máquina de Registradores)

• (a * b) + (1 – (c * 2))

• LOAD R1 aMULT R1 bLOAD R2 #1LOAD R3 cMULT R3 #2SUB R2 R3ADD R1 R2

Page 22: 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

Avaliação de Expressões (Máquina de Pilha)

• (a * b) + (1 – (c * 2))• LOAD a

LOAD bMULTLOADL 1LOAD cLOADL 2MULTSUBADD