Pregunta

¿Cómo se llama un lenguaje de programación que puede ejecutar su propio código (aprobada como un literal de cadena)? El ajuste en mi mente es algo similar a esto (olvidando por un momento la tipificación de código, resultados, etc.):

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

¿Dónde está la palabra clave run. Es que un lenguaje de programación reflexivo?

¿Fue útil?

Solución

creo que estás hablando Meta-circulares evaluadores . Su comando run es la eval en el eval a aplicar ciclo, se describe en la estructura e implementación de programas de ordenador.

Otros consejos

Lo mejor que se puede llegar a eso es exactamente lo que se pida "tiene una función eval" (como se ha mencionado por Javier en su comentario a su pregunta).

autoalojamiento no es necesario ni necesariamente hacer lo que quiera. Dos ejemplos son: C es un auto acogió lenguaje que no puede ejecutar su propio código en una cadena, pero Tcl no es un lenguaje alojado auto que puede ejecutar su propio código dado en una cadena

.
  • Como una nota, la mitad de los C tiempo corre en ambientes donde no hay API para ejecutar procesos externos. Así, mientras que en algunos ambientes se puede configurar el sistema para que los C capaz de ejecutar su propio compilador y luego ejecutar su propio código, en general, no es realmente lo que está pidiendo.

  • lado a lado nota. Si podemos engañar y utilizar la ruta "ejecutar compilador externo" para hacer esto, entonces una lengua no tiene que ser uno mismo alojamiento para hacer lo que quiera. Sólo necesita una función exec para llamar a su propio compilador (que a menudo está escrito en C).

Lo mismo pasa con la reflexión / introspección, que tiene la capacidad de hacer introspección sí mismo no significa que puede ejecutar código en una cadena. Dos ejemplos de lenguajes que tiene la reflexión, pero no tiene un built-in eval son C # y Java.

  • Como nota al margen, una vez que tenga una función eval normalmente se puede hacer Reflexión / introspección aunque de una manera torpe.

Auto-interpretativo tiene el mismo problema con su definición como autoalojamiento. Tcl es un lenguaje donde su función eval no está escrito en sí mismo -. Simplemente expone el evaluador de código tcl implementado en C

A primera vista, los meta-circulares evaluadores se parece a lo que quiere. Se define como la auto-interpretativo donde la función eval se construye en lugar de implementado en el lenguaje mismo. Pero mirando más se dará cuenta de que está definido por el mecanismo utilizado para lograr la característica más bien que la característica sí mismo. TCL es de nuevo una excepción donde no satisfacer todas las definiciones de lo que los evaluadores meta-circular son, pero tiene una función eval, sin embargo (sin aplicar, no es necesario). Por lo que parece a mí como un evaluador meta-circular es una implementación específica de la función "tiene una función eval".

Por lo tanto, me gustaría simplemente decir que cualquier lenguaje que "tiene una función eval" puede hacer lo que está pidiendo.

La clase de lenguajes de preguntar acerca es equivalente a " autoalojamiento " idiomas. Un lenguaje de auto-hosting es el que, para la cual existe una implementación del compilador o intérprete en el mismo idioma.

Esta es una prueba.

Cada lengua propia de alojamiento es capaz de ejecutar sus propios programas. Si pasa, por ejemplo, código C para un programa en C, que programa puede incluir un compilador (escrito en C) que compila y ejecuta el código. De esta manera un programa C ejecuta código C arbitrario.

Supongamos ahora que tiene una lengua X con una propiedad tal que es capaz de ejecutar un código arbitrario en ese idioma, el código que se pasa como una cadena. A continuación, puede crear un programa que sólo se necesita una cadena como entrada y ejecuta el código dentro de ella. Este será un intérprete para el lenguaje X implementado en X. Y esta es la definición de un lenguaje autoalojamiento.

Esto es lo que este intérprete se vería así:

execute ARGV[0]

Por lo tanto, hemos demostrado que cada lengua con la propiedad deseada es la auto-hosting, y cada idioma autoalojamiento tiene esta propiedad. Esto significa que la clase solicitada es igual a la clase de idiomas autoalojamiento.

autoalojamiento posiblemente. Sé que Lisp es un lenguaje tan, y la Wikipedia se refirió a ella como un compilador autoalojamiento.

homoiconicidad es un concepto relacionado, pero no creo que es exactamente lo que usted' re buscando tampoco.

  

En la programación informática, homoiconicidad es una propiedad de algunos lenguajes de programación, en el que la representación principal de los programas es también una estructura de datos en un tipo primitivo de la propia lengua, de homo significa mismo y icono significa representación . Esto hace más fácil que metaprogramming en un lenguaje sin esta propiedad.

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

Sí, siempre que esto fue abarcado por Reflexión .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top