2016-04-25 10 views

答えて

1

ClojureScriptアプリケーションをArangoDB/Foxxで実行できるように書くことはできません。

TypeScriptとCoffeeScriptとは異なり、ClojureScriptは単なる言語ではなく、アプリケーションランタイムです。 JavaScriptの代替構文ではなく、JavaScriptエンジンで実行されるアプリケーションを記述する方法として考えるのがよいでしょう。つまり、再利用可能なClojureScriptモジュールを作成することは可能ですが、任意のJavaScriptモジュールではなく、スタンドアロンのClojureScriptアプリケーションを作成するために設計されています。

元々はブラウザで動作するように設計されており、Node-likeモジュールシステムでは書かれていなかったため、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フックで1つのエントリポイントを使用することができますが、パフォーマンス上の理由からコードをプリコンパイルし、コンパイル時のエラーを簡単に捕捉することをお勧めします。

+0

Clojurescriptはアプリケーション実行時ではありません。これはTypescriptやCoffeescriptと似ていますが、あまりにも小さなコアライブラリはありません。ブラウザ、ノード、ナショナンのようなランタイムも必要です。 – myguidingstar

+0

Google Closure Compileはvar名の名前を短い名前に変更しますが、名前空間の競合の問題は発生しません。またNodejsスタイルとGoogle Closureスタイルモジュールの問題は数年前に解決されました – myguidingstar

+0

Lispのように、ClojureScriptの定義はステートフルです。なぜなら、Lispはコードを特別なデータ形式とみなすからです。意味がありません。 Clojurescriptはうまくいきます!ステートフルとLispファミリーのステートレスは、言語レベルではなくコーディングスタイルの問題です。 – myguidingstar

1

私はフォックスでClojurescriptを使用して素晴らしい時間を持っていたし、結果は、このオープンソースのライブラリです: https://github.com/arango-cljs/forest 私は2年前にこれに取り組んで停止した理由は、REPLのワークフローが十分とのWebSocketの欠如良くなかったということです。しかし、Clojurescript-in-Clojurescriptはすぐに利用できるようになり、Bootビルドツールが生まれたので、ArangoDB + Foxxはそれ以来ずっと改良されてきたと思います。 興味があれば、議論することができます。

関連する問題