Il meglio che riesci a trovare è esattamente quello che chiedi è "ha una funzione eval" (come menzionato da Javier nel suo commento alla tua domanda).
L'auto-hosting non è necessario né fa necessariamente quello che vuoi. Due esempi sono: C è un linguaggio auto-ospitato che non può eseguire il proprio codice in una stringa ma Tcl non è un linguaggio auto-ospitato in grado di eseguire il proprio codice fornito in una stringa.
Come nota laterale, la metà del tempo C viene eseguito in ambienti dove non c'è API per eseguire processi esterni. Quindi, mentre in alcuni ambienti è possibile configurare il sistema in modo che C possa eseguire il proprio compilatore e quindi eseguire il proprio codice in generale non è proprio ciò che si richiede.
Nota a margine. Se possiamo imbrogliare e utilizzare il percorso "Esegui compilatore esterno" per fare ciò, allora un linguaggio non ha bisogno di essere auto-hosting per fare quello che vuoi. Ha solo bisogno di una funzione exec per chiamare il proprio compilatore (che è spesso scritto in C).
Stessa cosa 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 hanno Reflection ma non hanno un eval incorporato 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 maldestro.
L'autointerpretazione ha lo stesso problema con la sua definizione di self-hosting. Tcl è un linguaggio in cui la sua funzione eval non è scritta in se stessa, ma espone semplicemente il valutatore del codice Tcl implementato in C.
A prima vista, gli analizzatori di meta-circonferenza sembrano ciò che si desidera. È definito come auto-interpretativo in cui la funzione eval è costruita piuttosto che implementata nel linguaggio stesso. Ma guardando oltre noterai che è definito dal meccanismo utilizzato per ottenere la funzione piuttosto che dalla funzionalità stessa. Tcl è di nuovo un'eccezione dove non soddisfa tutte le definizioni di cosa siano i valutatori meta-circolari ma ha comunque una funzione eval (non applicabile, non necessario). Quindi mi sembra che un valutatore meta-circolare sia un'implementazione specifica della funzione "ha una funzione eval".
Quindi, vorrei semplicemente dire che qualsiasi linguaggio che "ha una funzione eval" può fare quello che stai chiedendo.
Intendi dire interpretato? http://en.wikipedia.org/wiki/Interpreted_language – Pool
In SQL lo chiamano "SQL Injection"; in C/C++ lo chiamano "exploit". –
"ha una funzione eval" è un modo comune di riferirsi ad esso. – Javier