quinta-feira, 21 de agosto de 2008

manuscrito ACM. bytecode.

Aqui está o manuscrito ACM do bytecode.
Abordando o que foi explicado nesse blog e nas apresentações em sala, o manuscrito vai documentar tudo que nós pesquisamos e aprendemos com esse traballho. ele pode ser visto aqui mesmo no blog, como também pode ser feito o download, via SlideShare.


sábado, 9 de agosto de 2008

Estudo de Caso

O presente estudo de caso abordará a utilização de um dos tipos de tradutores – compilador – pela tecnologia Framework.Net e um exemplo de aplicação prática desse modelo através da ferramenta Asp.Net.
O Framework.Net é uma tecnologia utilizada para se construir e executar aplicações .Net (ponto Net) e possui a seguinte estrutura:

Figura1: Estrutura do Framework.Net (esta figura encontra-se na apresentação)

A partir da figura, pode-se observar que esta tecnologia faz uso de duas camadas de compiladores para implementar o mecanismo de tradução, o que revela a existência de um duplo processo de geração de código: o primeiro, composto pela camada de compiladores específicos (Compiler) de cada linguagem de programação, visto que, cada compilador só consegue traduzir um conjunto específico de regras de sintaxe, é responsável por receber o código fonte escrito em uma dada linguagem de programação e convertê-lo para um código intermediário que, no caso em questão, será padronizado; o segundo, composto por um compilador chamado JIT (Just in Time Compiler), tem por finalidade traduzir o código intermediário vindo da camada de compiladores específicos em código objeto, representado pela camada Native Code, que estará pronto para ser executado pelo sistema operacional (Operating System Services).
Um bom exemplo de utilização desse modelo é encontrado no Asp.Net. Asp.Net é um ambiente de desenvolvimento para aplicações .Net. Este ambiente possui uma característica muito importante, o suporte a diversas linguagens de programação, ou seja, um programador poderá escolher a linguagem de programação em que o mesmo usará para codificar um site. Isso é possível devido à utilização do Framework.Net por parte do Asp.Net, pois a capacidade de suportar diversas linguagens e conseguir executar um site após ser construído está relacionada ao duplo processo de geração de código existente no Framework.Net, que já foi exposto anteriormente.

Perspectivas sobre o futuro dos tradutores...

O caminho a ser seguido no campo dos tradutores de linguagens de programação dependerá tanto do que já é necessário para os desenvolvedores de aplicativos (software básico que possibilita a construção de outros programas) como também do que ainda está por vir.
No entanto, pelo contexto atual, verifica-se a utilização em expansão de um tipo de tradutor, a máquina virtual, para suprir um ponto negativo do processo de geração de código encontrado nos compiladores, que é a dependência do código objeto em relação ao sistema operacional. Um bom exemplo desse ponto é a máquina virtual Java.
O interpretador continuará sendo usado pela internet, que é um grande exemplo de utilização desse tradutor, e poderá se desenvolver ainda mais.
Além disso, está ocorrendo uma maior utilização dos compiladores, principalmente no que se refere ao duplo processo de geração de código, ou seja, uso de vários compiladores para a obtenção do código objeto, fato encontrado no Framework.Net que possui diversos compiladores (apenas um é usado para a escrita de um programa) para se produzir o código intermediário e um compilador geral responsável pela geração do código objeto final.
Diante do que foi exposto, percebe-se que os tipos de tradutores atuais (compiladores, interpretadores e máquina virtual) continuarão sendo utilizados, o que poderá ocorrer é o que já foi mencionado: a expansão, diminuição de alguns e até a criação de novas formas de tradução.

Diferenças entre compiladores e interpretadores (vantagens e desvantagens)

Compiladores são tipos de tradutores que possuem uma forma específica de conversão, visto que, atuam na transformação de uma linguagem de alto nível para uma linguagem de baixo nível – linguagem de máquina. Assim como o compilador, um interpretador analisa sintática e semanticamente um programa escrito em uma determinada linguagem de programação, no entanto, segundo [1], algumas diferenças são observadas, principalmente no que se refere à forma de se executar o programa em questão: o compilador executa o programa somente após ter traduzido o mesmo por inteiro; já o interpretador, lê, traduz e executa cada linha de código sequencialmente, ou seja, passo a passo; no compilador, há geração de um código de máquina ao final do processo de tradução; já no interpretador, não existe a criação de código executável;

Vantagens e Desvantagens

Compiladores
- Vantagens:
1) A execução do programa é mais rápida.
2) Estruturas de dados mais completas;
3) Permitem a otimização de código fonte.
- Desvantagens:
1) Várias etapas de tradução;
2) Processo de correção de erro e de depuração é mais demorado;
3) Programação final é maior, o que gera a necessidade de mais memória;

Interpretadores
- Vantagens:
1) Depuração é mais simples;
2) Consomem menos memória;
3) Resultado imediato do programa ou rotina desenvolvida.
- Desvantagem:
1) A execução do programa é mais lenta.
2) Estrutura de dados demasiadamente simples;
3) Necessário fornecer o programa fonte ao utilizador;


Referência

[1] Como Funcionam os Compiladores e Interpretadores. Disponível em:
http://www.mat.ua.pt/lap/Teoricas/CompvsInterp.ppt. Acessado em: 20 mai 2008.

sábado, 2 de agosto de 2008

Apresentação Final - Compiladores vs Interpretadores

Aqui está a versão final da nossa apresentação, que foi vista na aula do dia 31/07/2008. Agora dá pra ver quantas vezes quiser, e o melhor de tudo, sem aquele VERDE. :P