Tipos

Linguagens de programação podem ser divididas em dois grupos: estáticas e dinâmicas.

Em geral, linguagens dinâmicas são mais lentas que estáticas, pois fornecem menos informações que possam ser usadas para otimização, e são, em geral, interpretadas.

Porém, principalmente graças ao enorme aumento de desempenho dos computadores, linguagens dinâmicas interpretadas estão se tornando cada vez mais populares, e tomando o lugar das estáticas em muitas áreas, principalmente nas que exigem rapidez e facilidade de desenvolvimento (Internet), já que nestes aspectos são bastante superiores.

Estáticas

Nestas linguagens, as variáveis e funções têm um tipo fixo, mas os objetos armazenados/apontados pelas variáveis não necessariamente têm tipo. Exemplos bem conhecidos deste grupo são Pascal, C, C++* e Java*. Qualquer valor/objeto "armazenado" na variável será tratado como sendo do tipo da variável. Caso o programador "force" (typecast) um tipo a uma variável, seu conteúdo será tratado como sendo deste tipo, não do seu tipo real/original.

Além de poderem ser mais otimizadas, linguagens estáticas também tem a vantagem de encontrar certos erros, relativos à incompatibilidade de tipos, em tempo de compilação, antes do programa rodar. Em uma linguagen dinâmica muitos destes erros só podem ser verificados durante a execução do programa.

Dinâmicas

Em linguagens dinâmicas as variáveis não necessariamente têm tipo, sendo apenas "etiquetas" que podem se referir a qualquer objeto/valor, e estes têm um tipo. Alguns exemplos deste grupo são Lisp, Python, Smalltalk e Ruby.

Isto significa que é possível fazer algo como:

a = 123; a = "abc"

Uma forma simplificada de visualizar a relação de classes, objetos e variáveis em uma linguagem dinâmica, como Ruby, pode ser a seguinte:

Classe, objetos e variáveis em linguagem dinâmica
Diagrama original (dia)

Isto permite uma grande flexibilidade. Em um exemplo simples, pode-se criar uma lista de itens, e nela armazenar-se quaisquer objetos de diferentes tipos.

Observações:

  • Existem compiladores para linguagens dinâmicas que geram código muito eficiente, comparável ao de linguagens estáticas, fazendo uso de inferência de tipo e outras técnicas.
  • Os sistemas de tipos como das linguagens C e Pascal são bastante ultrapassados e simples, fornecendo pouca ajuda ao programador, principalmente quando comparados a linguagens com inferência de tipos, ou mesmo com sistemas como os templates de C++, e genéricos de Ada.
Nota: C++ e Java possuem RTTI (Run Time Type Information, informações de tipos em tempo de execução; cada objeto "sabe" o seu tipo, como nas linguagens dinâmicas), mas as variáveis são estáticas (só podem apontar para/armazenar objetos de um tipo específico).
Nota: Atualmente os interpretadores Java fazem uso de compiladores JIT (Just In Time), que, em tempo de execução, compilam o código para o processador da máquina, fazendo otimizações e ganhando muita performance em relação à interpretação pura.

Referências:

topo da página

<< Página Anterior | índice | Próxima Página >>
Apostilas de Ruby e RGSS

nossos tutoriais

navegue

livros recomendados