2010-09-19 4 views
16

Neunte Aufzählungspunkt in Paul Grahams What Made Lisp Different sagtKann "Die ganze Sprache immer verfügbar" im Falle von Clojure gehalten werden?

9. Die ganze Sprache immer zur Verfügung.

Es gibt keinen wirklichen Unterschied zwischen Lesezeit, Kompilierzeit und Laufzeit. Sie können Code beim Lesen, Lesen oder Ausführen von Code während des Kompilierens kompilieren oder ausführen und Code zur Laufzeit lesen oder kompilieren.

Durch Ausführen von Code zur Lesezeit können Benutzer die Lisp-Syntax neu programmieren; das Ausführen von Code zur Kompilierzeit ist die Basis von Makros; das Kompilieren zur Laufzeit ist die Grundlage für die Verwendung von Lisp als Erweiterungssprache in Programmen wie Emacs; und das Lesen zur Laufzeit ermöglicht es Programmen, unter Verwendung von s-Ausdrücke zu kommunizieren, eine Idee, die kürzlich als XML neu erfunden wurde.

Hält dieser letzte Aufzählungspunkt für Clojure?

Antwort

13

Sie können Laufzeit und Kompilierzeit frei in Clojure mischen, obwohl Common Lisp hier noch etwas flexibler ist (aufgrund der Anwesenheit von Compilermakros und Symbolmakros und einer vollständig unterstützten macrolet; Clojure hat einen Vorteil in seinem coolen Ansatz zur Makrohygiene durch automatische Symbolauflösung in Syntax-Quote). Der Reader ist momentan geschlossen, so dass das freie Mischen von Laufzeit, Kompilierzeit und Lesezeit nicht möglich ist .


Außer ungestützten clever hacks durch.

+5

Nur um klar zu sein, ist es in Clojure möglich, Code zu beliebigen Zeiten zu "lesen" und dann zu kompilieren und auszuführen; es ist jedoch nicht möglich, in den Leser zu stecken, um bei der Lesezeit willkürlichen Code auszuführen, wie es bei Common Lisp der Fall ist. –

+0

Liebe den Hack. Danke für den Link! :-D – missingfaktor

+3

Clojure kann beim Lesen mit dem '# =' reader-Makro beliebigen Code ausführen. –

4

Es hält,

(eval (read-string "(println \"Hello World!!\")")) 
Hello World!! 
nil 

Genau wie Emacs Sie Ihre Programmkonfiguration in Clojure haben kann, ein Projekt, das ich Clojure wissen für static ist, die Sie Ihre Vorlage als Clojure Vektor zusammen mit beliebigen haben können Code, der zur Lesezeit ausgeführt wird.

Verwandte Themen