Outras relações
Ainda sobre o artigo de Reynolds, algumas observações adicionais.
O método de usar interpretadores meta-circulares na definição de linguagens de programação começa, como é conhecido, com John McCarthy e o artigo original sobre a linguagem Lisp. A mesma abordagem é utilizada em um dos capítulos do influente livro "Structure and Interpretation of Computer Programs" de Abelson e Sussman; o uso de interpretadores para explicar características de linguagens de programação também é a idéia central no livro Essentials of Programming Languages de Friedman, Wand e Haynes.
Steele e Sussman definem, em Scheme, um conceito similar ao escape de Reynolds no artigo Lambda, the Ultimate Imperative. Ambos são muito parecidos ao operador J de Peter Landin. A mesma idéia aparece no operador call-with-current-continuation, ou call/cc, das versões recentes da linguagem Scheme.
A notação utilizada, sendo influenciada pelos trabalhos de Landin, lembra uma forma primitiva da linguagem ML. O uso de referências como entidades explicitamente separadas dos outros tipos de variáveis também apareceu em ML.
A adaptação do interpretador para incluir atribuições de variáveis, com o estado sendo propagado por todas as funções, lembra o uso de mônadas na linguagem Haskell.
O artigo de follow-up "Definitional Interpreters Revisited" fala sobre essas relações também (ainda não tinha lido quando escrevi isso aqui).
Enfim, é fácil de ver o quanto esse artigo foi bem sucedido em reunir uma série de idéias fundamentais da área; e a abordagem de mostrar as idéias construtivamente, a partir de interpretadores para elas, foi a maior inovação dele.
O método de usar interpretadores meta-circulares na definição de linguagens de programação começa, como é conhecido, com John McCarthy e o artigo original sobre a linguagem Lisp. A mesma abordagem é utilizada em um dos capítulos do influente livro "Structure and Interpretation of Computer Programs" de Abelson e Sussman; o uso de interpretadores para explicar características de linguagens de programação também é a idéia central no livro Essentials of Programming Languages de Friedman, Wand e Haynes.
Steele e Sussman definem, em Scheme, um conceito similar ao escape de Reynolds no artigo Lambda, the Ultimate Imperative. Ambos são muito parecidos ao operador J de Peter Landin. A mesma idéia aparece no operador call-with-current-continuation, ou call/cc, das versões recentes da linguagem Scheme.
A notação utilizada, sendo influenciada pelos trabalhos de Landin, lembra uma forma primitiva da linguagem ML. O uso de referências como entidades explicitamente separadas dos outros tipos de variáveis também apareceu em ML.
A adaptação do interpretador para incluir atribuições de variáveis, com o estado sendo propagado por todas as funções, lembra o uso de mônadas na linguagem Haskell.
O artigo de follow-up "Definitional Interpreters Revisited" fala sobre essas relações também (ainda não tinha lido quando escrevi isso aqui).
Enfim, é fácil de ver o quanto esse artigo foi bem sucedido em reunir uma série de idéias fundamentais da área; e a abordagem de mostrar as idéias construtivamente, a partir de interpretadores para elas, foi a maior inovação dele.
0 Comments:
Post a Comment
<< Home