Question

Qu'est-ce que vous appelez un langage de programmation qui peut exécuter son propre code (passé comme une chaîne littérale)? Le réglage dans mon esprit est quelque chose de semblable à ce (oubliant un typage moment de code, résultats, etc.):

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

run est mot-clé. Est-ce un langage de programmation de réflexion?

Était-ce utile?

La solution

Je pense que vous parlez évaluateurs méta-circulaire . Votre commande est run eval dans Cycle eval-appliquer , décrit dans la structure et la mise en œuvre des programmes informatiques.

Autres conseils

Le mieux que vous pouvez trouver c'est exactement ce que vous demandez est « a une fonction eval » (comme mentionné par Javier dans son commentaire à votre question).

Auto-hébergement est pas nécessaire ni faire nécessairement ce que vous voulez. Deux exemples sont les suivants: C est une auto langue hébergée qui ne peut pas exécuter son propre code dans une chaîne, mais Tcl n'est pas une auto langue hébergée qui peut exécuter son propre code donné dans une chaîne

.
  • Comme une note de côté, la moitié du temps C fonctionne dans des environnements où il n'y a pas d'API pour exécuter des processus externes. Ainsi, alors que dans certains environnements, vous pouvez configurer votre système pour C capable d'exécuter son propre complier puis exécuter son propre code en général, il est pas vraiment ce que vous demandez.

  • Note côte à côte. Si nous pouvons tricher et utiliser la route « exécuter du compilateur externe » pour le faire alors une langue n'a pas besoin d'être auto d'hébergement pour faire ce que vous voulez. Il a juste besoin d'une fonction exec pour appeler son propre compilateur (qui est souvent écrit en C).

Même avec réflexion / Introspection, ayant la capacité de faire Introspect vous ne signifie pas que vous pouvez exécuter du code dans une chaîne. Deux exemples de langues qui a la réflexion, mais ne dispose pas d'eval intégré sont C # et Java.

  • Comme une note de côté, une fois que vous avez une fonction eval vous pouvez généralement faire réflexion / Introspection quoique d'une manière maladroite.

auto-interprétation a le même problème avec la définition que l'auto-hébergement. Tcl est un langage où sa fonction eval est pas écrit en lui-même -. Il expose simplement l'évaluateur de code Tcl implémenté en C

À première vue, les évaluateurs méta-circulaire ressemble à ce que vous voulez. Elle est définie comme auto-interprétation où la fonction eval est construite plutôt que mis en œuvre dans la langue elle-même. Mais en regardant plus loin, vous remarquerez qu'il est défini par le mécanisme utilisé pour atteindre la fonction plutôt que la fonction elle-même. Tcl est à nouveau une exception où elle ne répond pas à toutes les définitions de ce que les évaluateurs de méta-circulaire sont, mais a une fonction eval (appliquer non, pas nécessaire) quand même. Il semble donc à moi comme un évaluateur de méta-circulaire est une implémentation spécifique de la fonction « a une fonction eval ».

Alors, je dirais simplement que toute langue « a une fonction eval » peut faire ce que vous demandez.

La classe de langues que vous posez des questions sur équivaut à « auto-hébergement » langues. Un langage d'auto-hébergement est celui pour lequel il existe une implémentation du compilateur ou un interprète dans la même langue.

Voici une preuve.

Chaque langue auto-hébergement est capable de gérer ses propres programmes. Si vous passez, par exemple, le code C à un programme C, ce programme peut inclure un compilateur (écrit en C) qui compile et exécute le code. De cette façon, un programme C exécute un code arbitraire C.

Supposons maintenant que vous avez une langue X avec une telle propriété qu'il est capable d'exécuter un code arbitraire dans cette langue, le code étant passé comme une chaîne. Ensuite, vous pouvez créer un programme qui prend juste une chaîne comme entrée et exécute le code à l'intérieur. Ce sera un interprète pour le langage X mis en œuvre X. Telle est la définition d'un langage d'auto-hébergement.

Voici ce que cet interprète ressemblerait à ceci:

execute ARGV[0]

Alors, nous avons prouvé que chaque langue avec la propriété souhaitée est l'auto-hébergement, et chaque langue auto-hébergement a cette propriété. Cela signifie que la classe demandée est égale à la classe des langues auto-hébergement.

auto-hébergement possible. Je sais que Lisp est une langue, et Wikipédia parle comme un compilateur auto-hébergement.

homoiconicité est un concept lié, mais je ne pense pas que c'est exactement ce que vous re la recherche soit.

  

Dans la programmation informatique, homoiconicité est une propriété de certains langages de programmation, dont la représentation principale des programmes est également une structure de données dans un type primitif de la langue elle-même, de homo signifie même et icône qui signifie représentation . Cela rend plus facile que metaprogramming dans une langue sans cette propriété.

auto-interprétation et de l'auto-hébergement? Voir 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 .

Oui, j'ai toujours pensé que cela était entouré par de réflexion.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top