08.02.2015 Views

Programação Funcional e Concorrente com Scheme

Programação Funcional e Concorrente com Scheme

Programação Funcional e Concorrente com Scheme

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

notas de aula - Jerônimo C. Pellegrini<br />

6.3.3 Discussão<br />

Um interpretador de uma linguagem escrito nela mesma é chamado de meta-interpretador<br />

circular 2 .<br />

É evidente que um meta-interpretador circular não será normalmente usado para<br />

a prática <strong>com</strong>um de programação, e pode por isso parecer inútil. No entanto, metainterpretadores<br />

são muito valiosos em algumas situações: uma delas é a prototipagem<br />

de variantes da linguagem. Por exemplo, se quisermos implementar uma versão de<br />

<strong>Scheme</strong> <strong>com</strong> tipagem forte, ou <strong>com</strong> avaliação preguiçosa por default, podemos criar um<br />

meta-interpretador ao invés de construir um núcleo <strong>Scheme</strong> em C.<br />

Outra situação onde meta-interpretadores são importantes é na discussão das características<br />

de linguagens de programação. Como exemplos disso há o livro introdutório de<br />

programação de Abelson e Sussman[10], que descreve meta-interpretadores circulares e<br />

criam variantes deles a fim de ilustrar o funcionamento de diferentes características de<br />

linguagens; o livro de Friedman e Wand[33] sobre linguagens de programação, que aos<br />

poucos constrói diferentes linguages de programação, todas <strong>com</strong> alguma similaridade<br />

<strong>com</strong> <strong>Scheme</strong>; e finalmente o artigo de 1978 de Guy Steele e Gerald Sussman[34], que usa<br />

meta-interpretadores <strong>Scheme</strong> na discussão de alguns aspectos de linguagens, dentre eles<br />

a diferença entre escopo estático e dinâmico.<br />

6.4 ambiente de primeira classe<br />

6.5 quando usar eval<br />

Da mesma forma que macros e continuações, o uso de eval é normalmente desencorajado.<br />

O primeiro (e mais importante) motivo para evitar eval está relacionado a segurança<br />

de aplicações: quando dados entrados pelo usuário são passados para eval, o programa<br />

torna-se vulnerável a ataques (o usuário pode passar qualquer forma <strong>Scheme</strong> para ser<br />

interpretada, e não apenas aquelas imaginadas pelo programador). Este problema pode<br />

ser minimizado se filtrarmos as formas passadas para eval, mas isto não é simples. No<br />

Versão Preliminar<br />

2 A idéia de meta-interpretador já estava presente no trabalho de Alan Turing, que descreveu uma “Máquina de<br />

Turing Universal”, capaz de ler a descrição de outra Máquina de Turing e simular seu funcionamento[31, 32].<br />

O primeiro interpretador implementado de fato em <strong>com</strong>putadores e amplamente usado foi o do LISP de<br />

John McCarthy.<br />

156<br />

[ 27 de outubro de 2010 at 15:47 ]

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!