2016-04-25 18 views

Antwort

1

Soweit wir wissen, ist es nicht möglich, ClojureScript-Anwendungen so zu schreiben, dass sie in ArangoDB/Foxx laufen können.

Im Gegensatz zu TypeScript und CoffeeScript ist ClojureScript nicht nur eine Sprache, sondern eine Anwendungslaufzeit. Es ist besser, es nicht als eine alternative Syntax für JavaScript zu betrachten, sondern als eine Möglichkeit, Anwendungen zu schreiben, die zufällig auf einer JavaScript-Engine ausgeführt werden. Mit anderen Worten, obwohl es möglich ist, wiederverwendbare ClojureScript-Module zu schreiben, wurde es entworfen, um eigenständige ClojureScript-Anwendungen zu schreiben, nicht willkürliche JavaScript-Module.

Da es ursprünglich entworfen wurde, um im Browser ausgeführt zu werden und daher nicht mit Knoten-ähnlichen Modulsystemen geschrieben wurde, verwendet es einen globalen Namensraum über den Google Closure Compiler. Dies bedeutet, dass das Ausführen mehrerer Anwendungen im selben Kontext zu Namespace-Konflikten führen würde.

Auch Foxx-Dienste werden voraussichtlich staatenlos sein. Jeder Status muss in Auflistungen oder der Serverantwort beibehalten werden, da Foxx-Dienste jedes Mal in verschiedenen V8-Kontexten ausgeführt werden. ClojureScript hingegen ist per Definition zustandsbehaftet, weil es als Lisp Code nur eine spezielle Form von Daten betrachtet.

Als Faustregel gilt: Sprachen, die transparent für die JavaScript-Sprache (wie TypeScript, CoffeeScript, LiveScript, PureScript) entwickelt wurden, sollten problemlos funktionieren. Sprachen, die entwickelt wurden, um eigenständige Anwendungen (wie ClojureScript und Elm) zu schreiben, werden höchstwahrscheinlich nicht funktionieren.

In jedem Fall, wenn Sie eine alternative Sprache (oder Babel) verwenden möchten, müssen Sie den Code außerhalb von ArangoDB umwandeln und nur die generierte JavaScript-Ausgabe in Ihr Foxx-Bundle einschließen. In ArangoDB 3.0 können Sie einen einzigen Einstiegspunkt mit einem require Hook wie in Node.js verwenden, aber wir empfehlen dennoch, Ihren Code aus Performance-Gründen vorzukompilieren und es leichter zu machen, Kompilierzeitfehler abzufangen.

+0

Clojurescript ist keine Laufzeit der Anwendung. Es ist wie Typescript und Coffeescript, aber mit einer nicht so kleinen Kernbibliothek. Es benötigt auch eine Laufzeit wie Browser, Nodejs und Nashorn. – myguidingstar

+0

Mit Google Closure Compile werden Var-Namen in kürzere Namen umbenannt. Dies führt jedoch nicht zu Namespace-Konfliktproblemen. Auch das Problem der Nodejs-Stil vs Google Closure-Stil-Module wurden vor Jahren gelöst – myguidingstar

+0

Der Punkt "ClojureScript auf der anderen Seite ist per Definition Stateful, weil als Lisp es Code nur eine spezielle Form von Daten betrachtet." macht keinen Sinn. Clojurescript funktioniert einfach! Stateful vs Staatenlos in Lisp Familie ist die Frage der Codierung Stil, nicht Sprachniveau. – myguidingstar

1

Ich hatte große Zeit Clojurescript mit Foxx mit und das Ergebnis ist die Open-Source-Bibliothek: https://github.com/arango-cljs/forest Der Grund, warum ich vor auf diesem 2 Jahren aufgehört zu arbeiten, ist, dass die REPL Workflow nicht gut genug, und der Mangel an Websocket war. Aber Clojurescript-in-Clojurescript wird bald verfügbar sein, das Boot-Build-Tool wurde geboren und ich denke, dass ArangoDB + Foxx seither sehr verbessert wurde. Wenn Sie interessiert sind, können wir diskutieren.