resumovinculacao-aulalp110a-120404204243-phpapp02
7 pág.

resumovinculacao-aulalp110a-120404204243-phpapp02


DisciplinaProgramação I21.837 materiais250.076 seguidores
Pré-visualização2 páginas
flexível para subprogramas, 
incentivando portanto o uso de variáveis externas. É um custo 
alto, pois o escopo dinâmico prejudica a legibilidade do código, 
já que o ambiente de referenciamento muda - o que faz o 
escopo estático mais interessante - , torna os programas mais 
lentos, pois a resolução dos nomes ocorre em tempo de 
execução, e além disso impossibilita verificação de tipos das 
variáveis externas. 
A implementação do escopo dinâmico é mais fácil que do 
escopo estático, e por isso, era comum nas linguagens mais 
antigas. Mas a partir do ALGOL, as linguagens aderiram ao 
escopo estático. Perl a partir de sua vs. 5 permite que o 
programador escolha com qual dos 2 deseja trabalhar.
\uf0f0 Vinculação de tipo
Pode ser estática \u2013 sempre desde tipo \u2013 ou dinâmica \u2013 decidida 
em tempo de execução. Assim como explícita \u2013 define o tipo \u2013 ou 
implícita \u2013 não define o tipo. Geralmente explicita é estática e 
dinâmica é implícita.
Com a vinculação dinâmica de tipos, é comum que o tipo de 
uma variável possa ser alterado a qualquer hora, em tempo de 
execução, o que torna inviável a detecção de erros de tipo em tempo 
de compilação, fazendo que os erros sejam encontrados em tempo de 
execução. Esse problema pode ser amenizado exigindo caracteres 
especiais \u2013 marcadores \u2013 que indicam tipos, como em Perl, no qual 
temos $a para escalar(tipo primitivo), @a aglomerado(vetor/lista), #a 
vetor associativo(hash), &a função. Isso exige atenção do 
programador, pois se os marcadores forem diferentes e os nomes 
iguais, isto irá diminuir a capacidade de detecção de erros. 
Algumas linguagens tem vinculação estática de tipos, mas 
fazem conversão automática (em muitos casos), gerando problemas 
parecidos de detecção de erros (ex.: C). Nesse caso, se é esperado b, 
e passa tipo a, ele converte a no formato de b, dando mais liberdade 
ao programador mas prejudicando a detecção. 
 (?)A vinculação dinâmica facilita a criação do compilador, que 
não precisa conhecer o tipo de uma variável durante o seu uso, ela é 
mais comum nas linguagens interpretadas, nas linguagens antigas e 
nas linguagens para web. Tais compiladores são eficientes para 
celulares. Enquanto os compiladores com vinculação estática são 
mais eficientes mais são mais pesados, úteis para programas web.
(?)A vinculação estática proporciona maior velocidade de 
execução por dois motivos: (a) não é preciso gerar código para 
sistema de tipos, pois o compilador já verificou a validade de todas as 
operações e já determinou quais são as operações usadas (ver 
sobrecarga de operadores) e (b) as informações sobre os tipos 
permitem ao compilador fazer otimizações no código gerado. 
Há uma variação entre estática e implícita, no qual mesmo 
tendo vinculação estática não é necessário dizer qual é o tipo pois o 
compilador o irá deduzir. Isto é conhecido com inferência de tipos, 
na onde a dedução acontece em tempo de compilação. O que 
possibilita checagem do erro de tipo com a facilidade de não exigir 
declaração. Mas essa declaração, as vezes pode servir como 
documentação para melhorar a legibilidade do programa. Essa 
inferência nem sempre funciona, o que faz com que as linguagens 
com esse recurso ofereçam a possibilidade de declaração, para que o 
programador resolva esses casos especiais (Exe.: Python?).
Obs : Quanto a parte de verificação de erros e compatibilidade 
de tipos as notas de aula são claras. 
\uf0f0 Vinculação de armazenamento
O tempo de vida de uma variável é o tempo durante o qual ela 
está vinculada à uma célula de armazenamento (um endereço).
Em função do tempo de vida, uma variável pode ser classificada 
como:
 estática: a vinculação existe durante toda a execução do\u2022 
programa e não muda; tem endereçamento direto (mais rápido); não 
existe overhead para alocar e desalocar; permitem criar variáveis 
\u201csensíveis à história\u201d; podem ser um desperdício de espaço se não 
forem usadas ao longo de toda a execução; podem conflitar com a 
recursividade.
 stack-dinâmica: a vinculação é criada quando a execução\u2022 
atinge a declaração da variável e deixa de existir quando o bloco de 
código termina sua execução; as vinculação de tipo são estáticas; 
funciona como uma forma de compartilhar memória entre os vários 
subprogramas. - pilha
 heap-dinâmica explícita: são criadas (sem nome) por\u2022 
operadores e funções de alocação de memória e são acessadas por 
meio de referências; tem vinculação estática de tipo;apresentam o 
overhead do acesso indireto. Ex.: objetos em Java.
 heap-dinâmica implícita: são vinculadas ao armazenamento e\u2022 
ao tipo durante uma atribuição; são muito flexíveis; reduzem a 
capacidade do compilador de encontrar erros. 
O gerenciamento do heap pode ser feito por algoritmos de 
garbage collection.
O tempo de vida de uma variável geralmente é tempo de 
execução de um bloco. Várias linguagens oferecem formas de 
vinculação estática ao armazenamento, o que permite a criação de 
um tipo de memória em subprogramas.
Nem sempre uma variável vinculada a um armazenamento é 
acessível, o que é desejável, seguindo o princípio do escopo mínimo.
Vinculação dinâmica ao armazenamento é uma propriedade que 
conflita com instruções tipo \u201cgoto\u201d. (?)
 - Inicialização 
Inicialização é a vinculação ao valor no momento da vinculação 
ao armazenamento.Recurso que não é oferecido por toda linguagem. 
(ex.: Pascal)