Como você modelaria macros procedurais do Rust?

Oct 21 2020

Na linguagem de programação Rust, pode-se escrever uma função de extensão do compilador que funciona na árvore de sintaxe abstrata, modificando efetivamente o código-fonte antes de ser convertido em instruções de máquina. Em outras palavras, a função macro tem assinatura

 Abstract Syntax Tree -> Abstract Syntax Tree 

Podem ser consideradas funções de ordem superior? Normalmente, as funções de ordem superior usam composição de função para produzir sua saída, não manipulação de código-fonte.

Respostas

2 D.W. Oct 21 2020 at 12:59

Eu não consideraria uma função de ordem superior. Uma função de ordem superior assume uma função como entrada ou produz uma função como sua saída. Em contraste, parece-me que a extensão do compilador está aceitando dados como entrada (a árvore de sintaxe abstrata) e produzindo dados em sua saída.

Suponho que você possa considerar o AST uma especificação de uma função, mas isso parece um exagero para mim.

Não tenho certeza se o nome que você atribui a ele importa muito, do ponto de vista da ciência da computação. Uma rosa com qualquer outro nome e tudo mais.