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?
13
A
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.
Powiązane problemy
- 1. Biblioteki Clojurescript - goog.require nie można znaleźć
- 2. Document.write w Clojurescript?
- 3. ClojureScript bez Java
- 4. call ClojureScript z Javascript
- 5. Jak debugować ClojureScript
- 6. Zwiększenie wydajności programu ClojureScript
- 7. Biblioteka czasowa ClojureScript
- 8. punkty przerwania clojurescript
- 9. Obiekty ClojureScript i HTML
- 10. ClojureScript na node.js, kod
- 11. zawijanie knockout.js przy użyciu clojurescript
- 12. Clojurescript: dwie kropki w ekspresji
- 13. Jak utworzyć json w clojurescript?
- 14. Błąd makra ClojureScript: "Nie można zdefiniować ns-kwalifikowanej nazwy"
- 15. Kliknij prawym przyciskiem myszy w ClojureScript?
- 16. Różnica między clojure a clojurescript?
- 17. Jak tworzyć elementy przycisków w ClojureScript?
- 18. Czy to byłoby uznane za idiomatyczny ClojureScript?
- 19. Jak uzyskać parametry zapytania w clojurescript?
- 20. Jak mogę uzyskać przestrzeń nazw Clojurescript, z której pochodzę, w programie programu clojurescript?
- 21. Śledzenie myszy w clojurescript/reagent/reagi?
- 22. Jak uzyskać znacznik czasu w ClojureScript?
- 23. Uzyskiwanie dostępu do "tego" w Clojurescript
- 24. Jak utworzyć nowy obraz w ClojureScript
- 25. Jak zatrzymać blok GO w ClojureScript/core.async?
- 26. Pisanie w Meteorzie przy użyciu ClojureScript
- 27. Jak korzystać clojure.string/join w clojurescript
- 28. Jak ustawić atrybut elementu DOM w Clojurescript?
- 29. Czy można użyć: refer: all in a ClojureScript: require?
- 30. Struktury MVC po stronie klienta dla ClojureScript
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
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
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