Você está na página 1de 7

Vinculao

As vinculaes so as associaes feitas para permitir que o compilador tenha controle entre a abstrao feita no cdigo e a entidade manipulada pelo hardware, e so caracterizadas por 4 atributos: nome (ligado a escopo), tipo, armazenamento (ligado ao tempo de vida) e valor. Nem todos os atributos precisam existir podemos ter, por exemplo, variveis sem nome ou sem valor. As variveis, que so exemplos de abstraes, e ajudam na legibilidade do cdigo. As vinculaes podem ser estticas(no mudam durante o programa) ou dinmicas(mudam durante o programa). Elas podem ocorrer durante: - tempo de projeto da linguagem: aquele no qual decide como a linguagem vai ser. Algumas vinculaes so definidas, por exemplo, o operador := para vinculao de nome . - tempo de implementao da linguagem: trata-se do tempo de construo do compilador. Aqui se define por exemplo o tamanho dos inteiros, mas no h exemplos de vinculao. - tempo de compilao: no qual se traduz o cdigo fonte em cdigo de mquina, e geralmente feito em conjunto com o tempo de ligao. - tempo de ligao: o cdigo fonte incrementado com cdigos da biblioteca, como para o writeln por exemplo. - tempo de carregamento: se tem a reserva de memria e definio de endereos, isto , Dados e instrues so copiados do arquivo (no disco rgido) para essa poro de memria (fica sobrando uma parte cujo uso decidido durante a execuo). Quando o programa comear as ligaes j estaro feitas - tempo de execuo: instante em que o programa comea a ser executado

Vinculao de nomes

Como j tido, nem toda vinculao necessita de um nome, sendo comum que o programador ou o compilador faam isso. As variveis podem ser criadas pelo programador, como os ponteiros (que no possuem nome), ou pelo prprio compilador, como quando

ele cria uma varivel temporria sem nome com o valor de um resultado para depois passa-lo a outra varivel. Exemplo x = a + b > temos uma varivel sem nome com o tipo do resultado de (a+b), que receber esse valor para que depois seja passado a x. Antigamente os nomes eram formados por apenas uma nica letra. Agora as linguagens podem delimitar seu tamanho por 8, 16, 255, etc. Esse tamanho pode ser definido tanto em tempo de projeto quanto em tempo de compilao. Quanto aos nomes tambm importante lembrar que as linguagens podem fazer distino entre maisculas e minsculas. Isso prejudica na hora de lembrar o nome da varivel e tambm em questo de legibilidade porque podemos ter nomes considerados idnticos (como Rosa e rosa em C) e que representam coisas diferentes. Mas quando a linguagem nos impe este tipo de notao, nos proporciona colocarmos mais significado ao nome somos levados a isso. Por exemplo, junto com o nome, podemos colocar o tipo da varivel. Um exemplo de notao dessa forma a notao camelo. Alguns nomes so especiais numa linguagem de programao. Existem as palavras reservadas, cujo significado o mesmo em qualquer contexto e as palavras-chave, cujo significado especial em algum contexto. As palavras reservadas limitam o programador principalmente se ele programar na lngua de origem linguagem, como o ingls. As palavras-chave variam seu sentido de acordo com o significado. Exemplo: real em Fortran pode significar tanto um tipo como uma varivel qualquer dependendo de como usado. Muitas vezes, palavras especiais so apenas pr-definidas, podendo ser redefinidas pelo programador. Neste caso, a linguagem provavelmente exige uma biblioteca padro que includa automaticamente no programa, na qual o nome definido.(Exemplo: writeln). tambm comum encontrarmos mesmo nome para entidades diferentes. Por exemplo, quando temos uma varivel local em um subprograma que representa um coisa, e , uma varivel de mesmo nome em outro subprograma que ser usada para outra coisa(problema que ser resolvido por questo de escopo explicado adiante). Assim tambm como possvel termos nomes diferentes para uma mesma entidades conhecido como apelidos (aliases) - como

no caso das unies (exemplo da aula: valor e endereo so chamados de valor). Nesse exemplo a criao feita de forma implcita, mas tambm podemos ter de forma explcita, como ocorre no caso dos ponteiros. As aliases tem como desvantagem a legibilidade do cdigo, porque necessrio que o programador se lembre a todo momento que elas indicam o mesma clula de memria, e alterar uma, altera a outra. Antigamente, as aliases eram justificadas porque economizavam memria - pensando aqui em unies pois permitiam que uma mesma localizao fosse usada para diferentes tipos de dados em diferentes tempos. Mas com a evoluo dos computadores, e aumento de memria, tal justificativa se tornou infundada.

- Escopo (notas de aula so claras) O escopo de uma varivel o trecho de cdigo no qual seu nome pode ser usado, ou melhor, existe um nome vinculado ela. Para que um nome esteja vinculado uma nica entidade (varivel ou subprograma), numa dada instruo, comum que as linguagens de programao determinem que uma vinculao de um nome uma entidade, invalida as vinculaes anteriores para uma determinada parte do programa. Neste caso, dizemos que uma vinculao oculta a outra, num sistema de controle que lembra uma pilha. Isto leva ao conceito informal de que "o nome que vale o da declarao mais interna". O problema com essa afirmao que o conceito de "interno" bastante flexvel. Ainda assim, nem sempre uma vinculao de nome oculta as vinculaes anteriores. Dependendo do conceito de "interno" na linguagem de programao, a nova vinculao pode simplesmente ser um erro. Os namespaces so uma forma de manter os vrios nomes disponveis. Esse sistema nos leva ao conceito de varivel local (aquela cujo nome foi declarado no prprio bloco de cdigo em questo) e varivel externa (aquela cujo nome foi declarado fora do bloco em questo). O conceito de local/externo sempre relativo algo. Uma varivel pode ser local a um bloco ao mesmo tempo que externa a outro. O conceito de varivel global deve ser evitado, visto que um conceito absoluto e frequentemente mal usado. Por exemplo: variveis cujo escopo se estende por um arquivo inteiro so frequentemente chamadas de globais, quando na verdade esto fora de escopo em outros arquivos do mesmo programa.

A alterao de uma varivel externa chamada de efeito colateral. Efeitos colaterais so perigosos e devem ser evitados sempre que possvel. O conjunto de nomes que podem ser usados numa determinada instruo chamado de ambiente de referenciamento da instruo. desejvel restringir tanto quanto possvel o escopo das variveis e procedimentos, para que no haja mltiplos nomes disponveis um bloco de cdigo sem necessidade. Esse conceito frequentemente chamado de diretriz do escopo mnimo.

Conceito da localidade: o programa com mais variveis locais mais legvel que aquele em que as variveis ficam todas espalhadas, e por isso e que algumas linguagens possuem recursos prprios para auxiliar nesse quesito de diminuio do escopo.

Escopo Esttico A vinculao feita no inicio do programa permanece at o fim. As variveis declaradas num bloco podem ser usadas em seus sub-blocos desde que no haja uma nova vinculao daquele mesmo nome. Escopo Dinmico O escopo muda dependendo de onde se chama o subprograma. Ou seja, as variveis disponveis mudam de acordo com onde chamamos o subprograma. Isso permite programas mais fceis de reusar, pois torna a passagem de informaes flexvel para subprogramas, incentivando portanto o uso de variveis externas. um custo alto, pois o escopo dinmico prejudica a legibilidade do cdigo, j que o ambiente de referenciamento muda - o que faz o escopo esttico mais interessante - , torna os programas mais lentos, pois a resoluo dos nomes ocorre em tempo de execuo, e alm disso impossibilita verificao de tipos das variveis externas. A implementao do escopo dinmico mais fcil que do escopo esttico, e por isso, era comum nas linguagens mais antigas. Mas a partir do ALGOL, as linguagens aderiram ao

escopo esttico. Perl a partir de sua vs. 5 permite que o programador escolha com qual dos 2 deseja trabalhar.

Vinculao de tipo

Pode ser esttica sempre desde tipo ou dinmica decidida em tempo de execuo. Assim como explcita define o tipo ou implcita no define o tipo. Geralmente explicita esttica e dinmica implcita. Com a vinculao dinmica de tipos, comum que o tipo de uma varivel possa ser alterado a qualquer hora, em tempo de execuo, o que torna invivel a deteco de erros de tipo em tempo de compilao, fazendo que os erros sejam encontrados em tempo de execuo. Esse problema pode ser amenizado exigindo caracteres especiais marcadores que indicam tipos, como em Perl, no qual temos $a para escalar(tipo primitivo), @a aglomerado(vetor/lista), #a vetor associativo(hash), &a funo. Isso exige ateno do programador, pois se os marcadores forem diferentes e os nomes iguais, isto ir diminuir a capacidade de deteco de erros. Algumas linguagens tem vinculao esttica de tipos, mas fazem converso automtica (em muitos casos), gerando problemas parecidos de deteco 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 deteco. (?)A vinculao dinmica facilita a criao do compilador, que no precisa conhecer o tipo de uma varivel durante o seu uso, ela mais comum nas linguagens interpretadas, nas linguagens antigas e nas linguagens para web. Tais compiladores so eficientes para celulares. Enquanto os compiladores com vinculao esttica so mais eficientes mais so mais pesados, teis para programas web. (?)A vinculao esttica proporciona maior velocidade de execuo por dois motivos: (a) no preciso gerar cdigo para sistema de tipos, pois o compilador j verificou a validade de todas as operaes e j determinou quais so as operaes usadas (ver sobrecarga de operadores) e (b) as informaes sobre os tipos permitem ao compilador fazer otimizaes no cdigo gerado. H uma variao entre esttica e implcita, no qual mesmo tendo vinculao esttica no necessrio dizer qual o tipo pois o

compilador o ir deduzir. Isto conhecido com inferncia de tipos, na onde a deduo acontece em tempo de compilao. O que possibilita checagem do erro de tipo com a facilidade de no exigir declarao. Mas essa declarao, as vezes pode servir como documentao para melhorar a legibilidade do programa. Essa inferncia nem sempre funciona, o que faz com que as linguagens com esse recurso ofeream a possibilidade de declarao, para que o programador resolva esses casos especiais (Exe.: Python?). Obs : Quanto a parte de verificao de erros e compatibilidade de tipos as notas de aula so claras.

Vinculao de armazenamento

O tempo de vida de uma varivel o tempo durante o qual ela est vinculada uma clula de armazenamento (um endereo). Em funo do tempo de vida, uma varivel pode ser classificada como: esttica: a vinculao existe durante toda a execuo do programa e no muda; tem endereamento direto (mais rpido); no existe overhead para alocar e desalocar; permitem criar variveis sensveis histria; podem ser um desperdcio de espao se no forem usadas ao longo de toda a execuo; podem conflitar com a recursividade. stack-dinmica: a vinculao criada quando a execuo atinge a declarao da varivel e deixa de existir quando o bloco de cdigo termina sua execuo; as vinculao de tipo so estticas; funciona como uma forma de compartilhar memria entre os vrios subprogramas. - pilha heap-dinmica explcita: so criadas (sem nome) por operadores e funes de alocao de memria e so acessadas por meio de referncias; tem vinculao esttica de tipo;apresentam o overhead do acesso indireto. Ex.: objetos em Java. heap-dinmica implcita: so vinculadas ao armazenamento e ao tipo durante uma atribuio; so muito flexveis; 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 varivel geralmente tempo de execuo de um bloco. Vrias linguagens oferecem formas de

vinculao esttica ao armazenamento, o que permite a criao de um tipo de memria em subprogramas. Nem sempre uma varivel vinculada a um armazenamento acessvel, o que desejvel, seguindo o princpio do escopo mnimo. Vinculao dinmica ao armazenamento uma propriedade que conflita com instrues tipo goto. (?) - Inicializao Inicializao a vinculao ao valor no momento da vinculao ao armazenamento.Recurso que no oferecido por toda linguagem. (ex.: Pascal)

Você também pode gostar