ArangoDB Foxx 和 Clojure 脚本

ArangoDB Foxx and Clojure script

我想使用 ClojureScript 实现 Foxx 服务。

我读到可以在每个开发步骤中通过 运行 转译器使用 Typescript and Coffeescript

我可以为 ClojureScript 做类似的事情吗?

据我们所知,不可能以 运行 在 ArangoDB/Foxx 中的方式编写 ClojureScript 应用程序。

与 TypeScript 和 CoffeeScript 不同,ClojureScript 不仅是一种语言,还是一种应用程序 运行。最好不要将其视为 JavaScript 的替代语法,而是将其视为一种编写恰好在 JavaScript 引擎上执行的应用程序的方法。换句话说,虽然可以编写可重用的 ClojureScript 模块,但它是为编写独立的 ClojureScript 应用程序而设计的,而不是任意 JavaScript 个模块。

因为它最初被设计为 运行 在浏览器中,因此没有考虑到类似 Node 的模块系统,它通过 Google Closure Compiler 使用全局命名空间。这意味着 运行在同一上下文中使用多个应用程序会导致命名空间冲突。

此外,Foxx 服务应该是无状态的。任何状态都必须保存在集合或服务器响应中,因为 Foxx 服务每次都在不同的 V8 上下文中执行。另一方面,ClojureScript 根据定义是有状态的,因为作为 Lisp,它认为代码只是一种特殊形式的数据。

根据经验:设计为透明替代 JavaScript 语言的语言(如 TypeScript、CoffeeScript、LiveScript、PureScript)应该可以毫无问题地工作。设计用于编写独立应用程序的语言(如 ClojureScript 和 Elm)很可能行不通。

在任何情况下,如果你想使用替代语言(或 Babel),你将不得不在 ArangoDB 之外转换代码,并且只在你的 Foxx 包中包含生成的 JavaScript 输出。在 ArangoDB 3.0 中,您将能够像 Node.js 那样使用带有 require 挂钩的单个入口点,但出于性能原因,我们仍然建议预编译您的代码,以便更容易捕获编译时错误。

我在 Foxx 中使用 Clojurescript 玩得很开心,结果是这个开源库: https://github.com/arango-cljs/forest 两年前我停止在这方面工作的原因是 REPL 工作流程不够好并且缺少 Websocket。但是 Clojurescript-in-Clojurescript 很快就会可用,Boot 构建工具诞生了,我想 ArangoDB+Foxx 从那时起已经有了很大的改进。 有兴趣的可以一起讨论。