Pergunta

Como você chama uma linguagem de programação que pode executar seu próprio código (aprovado como uma string literal)? A configuração em minha mente é algo semelhante a isso (esquecendo por um momento digitação de código, resultados etc.):

string eight = "5+3"
int result = run(eight)

Onde run é palavra -chave. Isso é uma linguagem de programação reflexiva?

Foi útil?

Solução

Eu acho que você está falando sobre Avaliadores meta-circulares. Sua run Comando é o aval no ciclo de avaliação de avaliação, descrito na estrutura e implementação de programas de computador.

Outras dicas

O melhor que você pode criar é exatamente o que você pede é "tem uma função de avaliação" (como mencionado por Javier em seu comentário em sua pergunta).

A auto-hospedagem não é necessária nem necessariamente faz o que você deseja. Dois exemplos são: C é um idioma auto -hospedado que não pode executar seu próprio código em uma string, mas o TCL não é um idioma auto -hospedado que pode executar seu próprio código fornecido em uma string.

  • Como nota lateral, metade do tempo C é executado em ambientes onde não há API para executar processos externos. Portanto, enquanto em alguns ambientes você pode configurar seu sistema para tornar o C capaz de executar seu próprio complier e executar seu próprio código em geral, não é realmente o que você está pedindo.

  • Nota do lado lateral. Se pudermos trapacear e usar a rota "Executar compilador externo" para fazer isso, um idioma não precisa se hospedar para fazer o que você deseja. Ele só precisa de uma função EXEC para chamar seu próprio compilador (que é frequentemente escrito em c).

O mesmo com a reflexão/introspecção, ter a capacidade de fazer a si mesmo não significa que você pode executar o código em uma string. Dois exemplos de idiomas que refletem, mas não têm uma avaliação interna, são C# e Java.

  • Como nota lateral, depois de ter uma função de avaliação, você geralmente pode refletir/introspecção, embora de maneira desajeitada.

A auto-interpretativa tem o mesmo problema com sua definição que auto-hospedagem. O TCL é um idioma em que sua função de avaliação não é escrita por si só - apenas expõe o avaliador de código TCL implementado em C.

À primeira vista, os avaliadores meta-circulares se parecem com o que você deseja. É definido como auto-interpretativo quando a função de avaliação é construída em vez de implementada no próprio idioma. Mas, olhando mais, você notará que ele é definido pelo mecanismo usado para atingir o recurso, em vez de o próprio recurso. O TCL é novamente uma exceção em que não atende a todas as definições do que os avaliadores meta-circulares são, mas possuem uma função de avaliação (sem aplicar, não é necessário). Portanto, parece-me que um avaliador meta-circular é uma implementação específica do recurso "tem uma função de avaliação".

Então, eu diria simplesmente que qualquer idioma que "tenha uma função de avaliação" pode fazer o que você está pedindo.

A classe de idiomas que você pergunta é equivalente a "auto-hospedagem"Idiomas. Uma linguagem de auto-hospedagem é aquela, para a qual existe uma implementação de compilador ou intérprete no mesmo idioma.

Aqui está uma prova.

Cada linguagem auto-hospedagem é capaz de executar seus próprios programas. Se você passar, por exemplo, código C para um programa C, esse programa pode incluir um compilador (escrito em C) que compila e executa o código. Dessa forma, um programa C executa o código C arbitrário.

Suponha agora que você tenha um idioma x com uma propriedade que é capaz de executar um código arbitrário nesse idioma, o código sendo aprovado como uma string. Em seguida, você pode criar um programa que apenas pegue uma string como uma entrada e execute o código dentro dele. Este será um intérprete para o idioma X implementado em X. e esta é a definição de um idioma de auto-hospedagem.

Aqui está como seria esse intérprete:

execute ARGV[0]

Portanto, provamos que cada idioma com a propriedade desejada é auto-hospedeiro e cada linguagem auto-hospedeira possui essa propriedade. Isso significa que a classe solicitada é igual à classe de idiomas auto-hospedeiros.

Auto-hospedagem possivelmente. Eu sei que Lisp é uma linguagem e a Wikipedia se referiu a ele como um compilador auto-hospedeiro.

Homoiconicidade é um conceito relacionado, mas acho que também não é exatamente o que você está procurando.

Na programação de computador, homoiconicidade é uma propriedade de algumas linguagens de programação, nas quais a representação principal de programas também é uma estrutura de dados em um tipo primitivo da própria linguagem, de homo significado o mesmo e ícone significado representação. Isso facilita a metaprogramação do que em um idioma sem essa propriedade.

Sim, eu sempre pensei que isso foi abrangido por Reflexão.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top