【问题标题】:ArangoDB Foxx and Clojure scriptArangoDB Foxx 和 Clojure 脚本
【发布时间】:2016-04-25 15:57:53
【问题描述】:

我想使用 ClojureScript 实现 Foxx 服务。

我了解到可以通过在每个开发步骤中运行转译器来使用TypescriptCoffeescript

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

【问题讨论】:

    标签: clojurescript arangodb foxx


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

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

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

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

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

      【讨论】:

      • Clojurescript 不是应用程序运行时。它就像 Typescript 和 Coffeescript,但核心库不那么小。它还需要像浏览器、nodejs 和 nashorn 这样的运行时。
      • Google Closure Compile 会将 var 名称重命名为较短的名称,但这不会导致命名空间冲突问题。此外,Nodejs 风格与 Google Closure 风格模块的问题在几年前就已经解决了
      • “另一方面,ClojureScript 根据定义是有状态的,因为作为 Lisp,它认为代码只是一种特殊形式的数据。”没有任何意义。 Clojurescript 可以正常工作! Lisp 家族中的有状态与无状态是编码风格的问题,而不是语言级别。
      • @myguidingstar:我只是按照 FreeNode 上的 clojurescript 社区给我的解释(基本上:clojurescript 需要能够在运行时评估代码,因此关于“应用程序运行时”的评论) ) 以及我自己在 Foxx 中使用 cljs 的失败尝试。输出使用了来自 Google Closure Compiler 的全局“goog”命名空间。如果您能详细说明您使用 ClojureScript 开发 Foxx 服务所采取的步骤,那将是一个很棒的补充。
      猜你喜欢
      • 2014-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多