Domanda

Come si chiama un linguaggio di programmazione in grado di eseguire il proprio codice (passato come letterale di stringa)? L'impostazione nella mia mente è qualcosa di simile a questo (dimenticando per un attimo la digitazione di codice, risultati, ecc):

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

In caso di parola chiave run. È un linguaggio di programmazione riflettente?

È stato utile?

Soluzione

credo che tu stia parlando di Meta-circolari valutatori . Il comando run è il eval nel eval-applicare ciclo , descritto nella Struttura e implementazione di programmi per computer.

Altri suggerimenti

Il meglio che si può venire con questo è esattamente quello che chiedi è "ha una funzione eval" (come citato da Javier nel suo commento alla tua domanda).

self-hosting non è necessario né necessariamente fare quello che vuoi. Due esempi sono: C è un auto ha ospitato linguaggio che non può eseguire il proprio codice in una stringa, ma Tcl non è un linguaggio ospitato sé in grado di eseguire il proprio codice dato in una stringa

.
  • Come nota laterale, metà dei funzionamenti C di tempo in ambienti in cui non v'è alcuna API per eseguire processi esterni. Così, mentre in alcuni ambienti è possibile configurare il sistema per rendere C in grado di eseguire il proprio compilatore e poi eseguire il proprio codice, in generale, non è davvero quello che stai chiedendo.

  • Side-side note. Se siamo in grado di imbrogliare e utilizzare il percorso "eseguire compilatore esterno" a fare questo allora una lingua non ha bisogno di essere sé hosting per fare quello che vuoi. Ha solo bisogno di una funzione exec per chiamare il proprio compilatore (che è spesso scritto in C).

Lo stesso con la riflessione / Introspezione, avere la capacità di fare da soli introspect non significa che si può eseguire codice in una stringa. Due esempi di lingue che ha riflessione, ma non ha un built-in eval sono C # e Java.

  • Come nota a margine, una volta che si dispone di una funzione eval di solito si può fare Riflessione / Introspezione anche se in modo goffo.

Auto-interpretativo ha lo stesso problema con la sua definizione di self-hosting. Tcl è un linguaggio in cui la sua funzione eval non è scritto in se stesso -. Si limita espone il codice Tcl valutatore implementato in C

A prima vista, Meta-circolari valutatori assomiglia a ciò che si desidera. Essa è definita come auto-interpretativo in cui la funzione eval è costruito in piuttosto che implementato nel linguaggio stesso. Ma guardando più si noterà che esso è definito dal meccanismo utilizzato per ottenere la caratteristica piuttosto che la funzione stessa. Tcl è ancora un'eccezione in cui non soddisfare tutte le definizioni di ciò che valutatori meta circolare sono, ma ha una funzione eval comunque (non applicabile, non è necessario). Così sembra a me come un valutatore meta-circolare è un'implementazione specifica della "ha una funzione eval" caratteristica.

Quindi, vorrei semplicemente dire che qualsiasi linguaggio che "ha una funzione eval" può fare quello che stai chiedendo.

La classe di linguaggi di chiedere informazioni equivale a " self-hosting " le lingue. Un linguaggio self-hosting è quello, per il quale esiste un'implementazione di compilatore o interprete nella stessa lingua.

Ecco una prova.

Ogni lingua self-hosting è in grado di eseguire i propri programmi. Se si passa, ad esempio, di codice C per un programma C, tale programma può includere un compilatore (scritto in C) che compila e viene eseguito il codice. In questo modo un programma in C esegue il codice C arbitrario.

Si supponga ora avete una lingua X con tale proprietà una che è in grado di eseguire un codice arbitrario in quella lingua, il codice viene passato come stringa. Quindi è possibile creare un programma che appena prende una stringa come input ed esegue il codice all'interno di esso. Questo sarà un interprete per il linguaggio X implementato in X. E questa è la definizione di un linguaggio self-hosting.

Ecco che cosa questo interprete sarà simile:

execute ARGV[0]

Quindi, abbiamo dimostrato che ogni lingua con la proprietà desiderata è self-hosting, e ogni lingua self-hosting ha questa proprietà. Ciò significa che la classe richiesta è pari alla classe dei linguaggi self-hosting.

self-hosting possibilmente. So Lisp è tale linguaggio un, e Wikipedia fatto riferimento ad esso come un compilatore self-hosting.

Homoiconicity è un concetto relativo, ma non credo che sia esattamente quello che' re alla ricerca di entrambi.

  

Nella programmazione di computer, homoiconicity è una proprietà di alcuni linguaggi di programmazione, in cui la rappresentazione primaria dei programmi è anche una struttura di dati in un tipo primitivo del linguaggio stesso, da homo significa lo stesso e icona significa rappresentanza . Questo rende metaprogrammazione più facile che in una lingua senza questa proprietà.

Auto-interpretativo e di auto-hosting? Vedere http://en.wikipedia.org/wiki/Self-interpreter , < a href = "http://en.wikipedia.org/wiki/Self-hosting" rel = "nofollow noreferrer"> http://en.wikipedia.org/wiki/Self-hosting .

Si, ho sempre pensato che questo è stato abbracciato da Riflessione .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top