2013-08-22 19 views
13

Podczas gdy cechy clojure i clojurecript są zasadniczo takie same (oprócz oczywistych różnic), makra nie są. Kiedy chcę makro w clojurescript, muszę napisać go w clojure i wymagać go za pomocą makr require. Czy jest to techniczne ograniczenie javascript lub po prostu decyzja projektowa? Dlaczego oba nie mogą być takie same?Dlaczego makr clojurescript nie można zapisać w clojurescript?

Odpowiedz

15

Od ClojureScript: Up and Running Stuart Sierra i Luker VanderHart, strona 69:

Makra są stosowane podczas procesu kompilacji. Nie istnieją w czasie wykonywania. Ponieważ kompilator ClojureScript jest zaimplementowany w Clojure, makra ClojureScript muszą być napisane w Clojure, a nie ClojureScript. Na szczęście Clojure i ClojureScript są niemal identyczne pod względem manipulowania strukturami danych, więc przełączanie między tymi dwoma językami nie jest trudne.

Co to oznacza to, że makro kod zostanie wykonany w Clojure świecie, a nie w przeglądarce, więc musi to być napisane w prostym Clojure.

+1

I tak jest, ponieważ clojurescript używa kompilatora zamykania google'a, który sobie wyobrażam ... Kompilator clojurescript napisany w clojurescript byłby miły. – islon

+2

Kompilator Google Closure służy tylko do usuwania nieużywanych zależności i minimalizowania kodu, a nie do kompilowania ClojureScript do JavaScript. Gdy kod dotrze do Google Closure Compiler jest już tylko JavaScriptem, ale zespół ClojureScript ciężko pracuje, upewniając się, że napisany kod JavaScript jest prawidłowy dla najbardziej zaawansowanych funkcji kompilatora Google Closure. – Serabe

+5

W powiązanej notatce, praca jest wykonywana na kompilatorze ClojureScript do ClojureScript w [clojurescript.net] (http://clojurescript.net/). Jeden z autorów omawia go w [tym wideo] (http://www.infoq.com/presentations/cljs-in-cljs). – bmaddy

Powiązane problemy