Linguagens de Programação. Nomes, Escopos e Vinculações (Bindings) Carlos Bazilio

Documentos relacionados
O que é uma variável?

Compiladores Ambiente de Execução

Linguagens de Programação Aula 11

Conceitos de Linguagens de Programação

Ambiente de tempo de Execução Cap. 7

Ambientes de Execução

Ambientes de Execução

Compiladores. Gerência de Memória

Variáveis. Prof. Alberto Costa Neto Linguagens de Programação. Departamento de Computação Universidade Federal de Sergipe

CAP. VI ANÁLISE SEMÂNTICA

Programação Imperativa. Lição n.º 16 A pilha de execução

Lista de Linguagens de Programação 14

Conceitos Básicos de Programação

Procedimentos. Sistemas de Computação

Persistência. Prof. Alberto Costa Neto Linguagens de Programação. Departamento de Computação Universidade Federal de Sergipe

Capítulo 6 Nível do Sistema Operacional

Linguagens de Programação Nomes, Amarrações e Escopo

Estudos de Linguagens de Programação - Revisão

Nomes, Vinculações, Verificação de Tipos e Escopos. George Darmiton da Cunha Cavalcanti

Paradigmas de Linguagens de Programação. Nomes, Vinculações, Verificação de Tipos e Escopos

Classes e Objetos. Sintaxe de classe em Java

Paradigmas de Programação

Estruturas de Dados Aulas 3 e 4: Uso da. 14/03/2011 e 16/03/2011

Paradigmas de Linguagem de. Programação Profª. Roberta B Tôrres de programação referem-se a:

Estruturas de Dados Aula 1: Introdução e conceitos básicos 28/02/2011

Fundamentos de Sistemas Operacionais

Tipos. O Conceito de Tipo

Paginação e Segmentação. Memória Principal

2º Estudo Dirigido CAP 3

Um Exemplo de Nível ISA: o IJVM. Pilhas. Pilhas. O Modelo de Memória da IJVM. Pilhas de Operandos. Nível ISA

Estrutura de Dados. Aula 07 Alocação Dinâmica

Fundamentos de Sistemas Operacionais. Gerência de Memória. Prof. Edwar Saliba Júnior Março de Unidade Gerência de Memória

Linguagens de Programação. Tipos. Carlos Bazilio

O que é um jogo digital?

Linguagens de Programação Conceitos e Técnicas. Amarrações

Algoritmos e Estruturas de Dados. Prof. Marcelo Zorzan Profa. Melissa Zanatta

Declarações. Variáveis e Classe de Memória

Sumário. Capítulo 1 Introdução 29. Capítulo 2 Utilizando Objetos 59

Linguagem de Maquina II. Visão Geral

SISTEMAS OPERACIONAIS. Gerência de Memória Apostila 7

Introdução à linguagem C++

Registradores. Os processadores possuem espaços específicos onde são guardados valores, os chamados registradores.

Tipos Abstratos de Dados. Estrutura de Dados

A Linguagem Lua Lua Puc-Rio

1.2 OPERAÇÕES BÁSICAS EM ALGORITMOS E PROGRAMAS 18

CONJUNTO DE INSTRUÇÕES

Tipos Básicos. Operadores de Incremento e Decremento. Operador Sizeof. Estruturas de Dados Aula 2: Estruturas Estáticas

Projeto de Compiladores

Estruturas de Dados Aula 2: Estruturas Estáticas 02/03/2011

Universidade Federal de Uberlândia Faculdade de Computação. Linguagem C: funções

Histórico. Perl (Practical Extraction and Report Language). Criada por Larry Wall em 1987.

Aula 10 Gerenciamento de Memória

Unidade Central de Processamento 2. Registradores

Curso Profissional de Gestão e Programação de Sistemas Informáticos. Programação e Sistemas de Informação. Módulo 1. 3ª Parte Prof. Sandra Pais Soares

#include <stdio.h> Void main() { printf( Cheguei!\n"); } INTRODUÇÃO A LINGUAGEM C

PARTE II - CONJUNTO DE INSTRUÇÕES ARQUITETURA DE COMPUTADORES ANTONIO RAMOS DE CARVALHO JÚNIOR

Processos. Nuno Ferreira Neves Faculdade de Ciências de Universidade de Lisboa. Fernando Ramos, Nuno Neves, Sistemas Operativos,

Arquitetura Von Neumann Dados e instruções são obtidos da mesma forma, simplificando o desenho do microprocessador;

Sistemas de Gerência de Bancos de Dados. Módulo 1 - Armazenamento

Aula 23: Noções de Compilação, Montagem, Link-edição, e Interpretação

Projeto de Linguagem. Linguagens de Programação

Árvores B (Parte III)

Gerência da Memória Memória Virtual. Adão de Melo Neto

Introdução à Programação em C. Prof. Ricardo Teixeira Tecnologia em Mecatrônica Industrial SENAI

Introdução à Programação em C

Métodos Computacionais. Funções, Escopo de Variáveis e Ponteiros

FACULDADE LEÃO SAMPAIO

Fundamentos de Programação. Linguagem C++ aula II - Variáveis e constantes. Prof.: Bruno Gomes

Sistemas Embebidos I , Tiago Miguel Dias ISEL, ADEETC - Secção de Electrónica e Telecomunicações e de Computadores

7 Mecanismos de gestão de memória. Prof. Ricardo Silva

Capítulo 8: Memória Principal. Operating System Concepts 8 th Edition

INF1337 LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS

14/3/2016. Prof. Evandro L. L. Rodrigues

Escola Politécnica da Universidade de São Paulo Departamento de Engenharia de Computação e Sistemas Digitais. PCS 0014: Linguagens de Programação

LABORATÓRIO DE SISTEMAS OPERACIONAIS. PROFª. M.Sc. JULIANA HOFFMANN QUINONEZ BENACCHIO

Gerência do Sistema de Arquivos. Adão de Melo Neto

Valores e Tipos de Dados Prof. Hudson Costa

Ambiente de desenvolvimento

AVALIAÇÃO DE CONHECIMENTO ESPECÍFICO

Gerência de Memória. Gerência de Memória Introdução e Particionamento. Novo capítulo. Aulas anteriores. Plano da aula. Memória lógica & física

Nível da Arquitetura do Conjunto de Instruções. Ronaldo de Freitas Zampolo

Alocação de Memória. Lucas Ferrari de Oliveira Professor Adjunto Universidade Federal do Paraná (UFPR)

Métodos Computacionais

1.1 o que é um algoritmo... 6

Arquitetura de Sistemas Operacionais

Paradigmas de Linguagens

INE5412 Sistemas Operacionais I

Trabalho Linguagem e Programação de Compiladores

PROGRAMAS BÁSICOS EM C++ Disciplina: Introdução à Ciência da Computação Prof. Modesto Antonio Chaves Universidade estadual do Sudoeste da Bahia

Gerenciamento de memória

SEL-433 APLICAÇÕES DE MICROPROCESSADORES I

Notas da Aula 7 - Fundamentos de Sistemas Operacionais

ao paradigma imperativo

Programação imperativa. 10. Pilha de execução

Curso : Tecnologia em Desenvolvimento de Sistemas - AEMS Série : 3 º Período - 1 º Semestre de 2011 Professora : Elzi Ap. Gil

Capítulo 7. Expressões e Sentenças de Atribuição

Programação Procedimental GBC /1 Prof. Renan Cattelan Prática 10. Estruturas e alocação dinâmica

Capítulo 4 Nível da microarquitetura

INE5421 LINGUAGENS FORMAIS E COMPILADORES

Ambientes de Execução Gerenciamento Pilha de Execução

Transcrição:

Linguagens de Programação Nomes, Escopos e Vinculações (Bindings) Carlos Bazilio carlosbazilio@id.uff.br http://www.ic.uff.br/~bazilio/cursos/lp

Nomes Forma mais simples de abstração Um nome é um caracter mnemônico que representa alguma coisa: Um endereço de memória Um valor, uma constante Uma operação Etc Se considerarmos o tempo, o período de existência desta associação entre nome e valor é chamado de tempo de vinculação (binding time)

Tipos de Vinculação de Tempo Tempo de projeto de linguagem Tempo de implementação da linguagem Tempo de escrita do programa Tempo de compilação Tempo de ligação Tempo de carga Tempo de execução Usualmente os termos estático e dinâmico se referem antes e durante o tempo de execução

Tempo de Vida de um Objeto e Armazenamento Eventos que sinalizam o tempo de vida de um objeto: Criação de objetos Criação de associações Referências à variáveis, rotinas, tipos, etc Remoção de associações Destruição de associações Destruição de objetos Exemplos fartos para isso são escontrados na manipulação de ponteiros

Tempo de Vida de um Objeto e Armazenamento O tempo de vida de um objeto geralmente está associado a 3 mecanismos distintos de armazenamento Objetos estáticos Objetos armazenados numa pilha Objetos armazenados num heap

Objetos Estáticos Exemplo imediato são variáveis globais Ou seja, possuem a característica de existirem durante toda a execução de um programa Instruções de um programa também podem ser consideradas objetos estáticos Outros exemplos são: Variáveis estáticas declaradas em rotinas Valores numéricos e strings Compiladores também geram estruturas auxiliares para auxílio na compilação e

Objetos Estáticos Em linguagens com alocação puramente estática, o compilador previamente reserva espaço para ativação de cada rotina existente Dados comumente armazenados nestes espaços (registros de ativação) Argumentos e valores de retorno Endereço de retorno Variáveis locais Temporárias, etc Com isso, não é possível haver recursão, seja esta direta ou indireta

Objetos armazenados numa Pilha O empilhamento de registros de ativação permite que a recursão possa ocorrer Entretanto, naturalmente, devemos abdicar da reserva estática de espaço para rotinas e fazermos alocação dinâmica destas É de responsabilidade das rotinas chamadora/chamada manter a pilha coerente com estado atual de execução A decisão de quem faz o que é questão de implementação da linguagem

Objetos armazenados numa Pilha Os registros de ativação são também chamados de frames Da mesma maneira que temos o registrado PC (Program Counter) que indica a próxima instrução a ser executada, temos um outro chamado FP (Frame Pointer) que aponta para o endereço base do registro de ativação da rotina corrente Os acessos aos campos de cada frame podem ser feitos somando incrementos (offsets) a este ponteiro

Objetos armazenados numa Pilha Outro ponteiro comum neste contexto é o SP (Stack Pointer) que sempre aponta para o primeiro endereço livre no topo da pilha (ou o endereço do último frame alocado, dependendo da máquina)

Objetos armazenado num Heap Heap é uma área de armazenamento onde blocos de memória podem ser alocados/desalocados muitas vezes Não há relação com o nome heap da implementação de fila de prioridades baseada em árvore É necessário para alocação de estruturas de dados dinâmicas como listas, filas, objetos redimensionáveis dinamicamente, etc

Objetos armazenado num Heap Há várias estratégias de manipulação de espaço num heap Estas estratégias levam em consideração 2 fatores: velocidade e espaço Dois problemas a serem tratados: Fragmentação Externa Fragmentação Interna Algoritmos de alocação no heap, visando amenizar o problema de fragmentação externa: First fit, Next fit, Best fit, Worst fit

Coleta Automática de Lixo Mecanismo pelo qual áreas de memória não mais utilizadas no heap são devolvidas de forma transparente (sem o auxílio do programador) para o S.O. 2 algoritmos representam boa parte das implementações de coletores de lixos: Contagem de referências e Mark-Sweep (Marca e Limpa)

Coleta de Lixo O algoritmo de contagem de referências é uma técnica básica para implementação da coleta de lixo Neste, um contador de referências é mantido para cada área de memória alocada no heap A cada alteração do número de referências a uma dada área, o contador é atualizado Coletores com estas características costumam ser classificados como gulosos

Coleta de Lixo O algoritmo mark-sweep pode ser dividido em 3 partes: O coletor marca todas as células como lixo Em seguida, todo ponteiro para o heap é percorrido e as células para os quais estes apontam são marcados como áreas úteis Finalmente, todas as áreas ainda marcadas como lixo são devolvidas para a lista de áreas livres Este processo só se inicia após o esgotamento do heap Algoritmos deste tipo são chamados de lazy

Escopo 2 divisões básicas: Estático (Léxico): refere-se à estrutura do programa; ou seja, a visibilidade dos objetos pode ser definida em tempo de compilação Dinâmico: a visibilidade depende da ordem de execução das instruções num programa; o efeito desse escopo é a sobrescrita do escopo global

Escopo a: integer procedure first a := 1 procedure second a: integer first() first() second() first() a := 2 if read_integer() > 0 second() // (1) else first() // (2) write_integer(a) main main (1) (2)

Escopo Perl Perl permite tanto tratamento estático quanto dinâmico no acesso à variáveis A diferenciação é feita pelos modificadores my (estático) e local (dinâmico) $x = 0; sub f { return $x; } sub g { my $x = 1; return f(); } print g()."\n"; $x = 0; sub f { return $x; } sub g { local $x = 1; return f(); } print g()."\n";

type tpessoa = record idade : integer limite : integer pessoas : collection Escopo function mais_antigo (p : tpessoa) : boolean return p.idade >= limite procedure imprime_pessoa (p : tpessoa) // Chamar rotinas apropriadas de I/O // Fazer uso da variável não local tamanho_linha procedure imprime_registros_selecionados (bd : collection, predicado, rotina_impressao : procedure) tamanho_linha : integer if device_type(stdout) = terminal tamanho_linha = 80 else tamanho_linha = 132 foreach record r in bd if predicado(r) rotina_impressao(r) limite := 35 imprime_registros_selecionados(pessoas, mais_antigo, imprime_pessoa)