Frage

Wie nennt man eine Programmiersprache, die seinen eigenen Code ausführen kann (als Stringliteral bestanden)? Die Einstellung in meinem Kopf ist etwas ähnlich wie diese (zu vergessen für einen Moment der Eingabe des Codes, Ergebnisse, etc.):

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

Wo run Schlüsselwort ist. Ist das eine reflektierende Programmiersprache?

War es hilfreich?

Lösung

Ich glaube, Sie sprechen Meta-Kreis Evaluatoren . Ihr run Befehl ist der eval in der eval-apply Zyklus , in Aufbau und Umsetzung von Computerprogrammen beschrieben.

Andere Tipps

Die beste können Sie kommen mit, dass ist genau das, was man sich wünschen ist „eine Funktion eval hat“ (wie in seinem Kommentar zu Ihrer Frage von Javier erwähnt).

Selbst Hosting ist nicht notwendig, auch nicht unbedingt tun, was Sie wollen. Zwei Beispiele dafür sind: C ist ein selbst Sprache gehostet, die nicht seinen eigenen Code in einem String ausführen können aber Tcl ist keine selbst gehosteten Sprache, die sein eigener Code in einem String angegeben ausführen kann

.
  • Als Randbemerkung, die Hälfte der Zeit C läuft in Umgebungen, in denen es keine API externe Prozesse auszuführen. Während also in einigen Umgebungen können Sie Ihr System so konfigurieren, dass C der Lage zu machen ihren eigenen complier ausführen und dann seinen eigenen Code im Allgemeinen führen Sie es nicht wirklich das, was Sie fordern.

  • Side-Seite beachten. Wenn wir die „Ausführen externer Compiler“ Route betrügen und verwenden können, um dies zu tun, dann eine Sprache nicht zu werden braucht selbst Hosting zu tun, was Sie wollen. Es muss nur eine exec-Funktion einen eigenen Compiler aufzurufen (die oft in C geschrieben wird).

Samt mit Reflexion / Introspection, die Fähigkeit introspect selbst zu tun hat, bedeutet nicht, Sie Code in einem String ausführen können. Zwei Beispiele für Sprachen, die Reflexion hat, aber nicht über eine eingebaute in eval sind C # und Java.

  • Als Seite beachten, wenn Sie eine Funktion eval haben, können Sie in der Regel Reflexion tun / Introspection wenn auch in ungeschickter Art und Weise.

Selbst interpretierende hat das gleiche Problem mit ihrer Definition als Selbst Hosting. Tcl ist eine Sprache, wo seine Funktion eval in sich selbst nicht geschrieben -. Es setzt lediglich die Auswerter Tcl-Code implementiert in C

Auf den ersten Blick Meta-Kreis Gutachter sieht aus wie, was Sie wollen. Es wird als selbst interpretierende definiert, wo die Funktion eval in anstatt gebaut wird in der Sprache selbst implementiert. Aber ein Blick weiter, werden Sie feststellen, dass es durch den Mechanismus definiert wird verwendet, um die Funktion zu erreichen und nicht, dass die Funktion selbst. Tcl ist wieder eine Ausnahme, wo es nicht alle die Definitionen nicht erfüllt, was Meta-Kreis Evaluatoren, sondern hat eine Funktion eval dennoch (nicht anwenden, nicht erforderlich). So ist es wie ein Meta-Kreis Auswerter mir aussieht, ist eine spezifische Implementierung des „verfügt über eine Funktion eval“ -Funktion.

Also, ich würde einfach sagen, dass jede Sprache, dass „hat eine Funktion eval“ kann tun, was Sie fordern.

Die Klasse von Sprachen Sie fragen, ist gleichbedeutend mit „ Selbst Hosting “ Sprachen. Selbst Hosting Sprache ist derjenige, für die es eine Implementierung von Compiler oder Interpreter in derselben Sprache vorhanden ist.

Hier ist ein Beweis.

Jede Selbst Hosting-Sprache ist in der Lage, seine eigenen Programme zu laufen. Wenn Sie passieren, beispielsweise C-Code zu einem C-Programm, kann das Programm einen Compiler umfassen (geschrieben in C), dass kompiliert und führt den Code. Auf diese Weise ein C-Programm ausführt beliebigen C-Code.

Nehmen wir nun an Sie eine Sprache X mit einer solchen Eigenschaft, dass es in der Lage ist, eine beliebige Code in dieser Sprache zu laufen, wird der Code als String übergeben werden. Dann können Sie ein Programm erstellen, das nur einen String als Eingabe nimmt und führt den Code in sie. Dies wird ein Interpreter für X Sprache in X. umgesetzt und dies ist die Definition einer selbst Hosting-Sprache.

Hier ist, was dieser Interpreter aussehen würde:

execute ARGV[0]

So haben wir bewiesen, dass jede Sprache mit der gewünschten Eigenschaft ist selbst Hosting und jede selbst Hosting-Sprache hat diese Eigenschaft. Dies bedeutet, dass die Klasse, die Sie aufgefordert, die Klasse des Selbst Hosting Sprachen gleich ist.

Self-Hosting möglicherweise . Ich weiß, dass Lisp eine solche Sprache ist, und Wikipedia bezeichnet es als selbst Hosting-Compiler.

Homoikonizität ist ein verwandtes Konzept, aber ich glaube nicht, es ist genau das, was Sie‘ re entweder suchen.

  

In der Computerprogrammierung, Homoikonizität ist eine Eigenschaft von einigen Programmiersprachen, in denen die primäre Darstellung von Programmen ist auch eine Datenstruktur in einem primitiven Typ der Sprache selbst, von homo bedeutet die gleiche und Symbol Bedeutung Darstellung . Dies macht Metaprogrammierung einfacher als in einer Sprache, ohne diese Eigenschaft.

Selbst interpretierend und Selbst Hosting? Siehe 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 .

Ja, ich dachte immer, das von Reflexion .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top