2013-08-23 4 views
37

私は、Backbone.jsオブジェクト指向のMVCパターンを使ったGUIコーディングがかなり複雑になり、他のパラダイムを見回しています。 MDV,FRP,ECS、oh my。ElmとClojureScriptの違いを教えてください。

Elmと比較すると、ClojureScriptと比べてどうですか?それらは重なり合っていますか?

どちらも、JSとコンパイルするJSとは非常に異なる言語です。 ElmはFunctional Reaction Programming(FRP)言語であることを理解しています。 ClojureScriptは必ずしもFRPである必要はありませんが、FRPを使用することができます。 ElmはHaskellとClojureScriptをJVMとコンパイルするので、両方ともNode shopの追加要件です。

多分それはClojure vs Haskellに沸騰するかもしれません。

+1

この質問は、いくつかの助けを与えるかもしれません:http://stackoverflow.com/q/15490053/90874 – thSoft

答えて

36

両方とも、純粋なJSよりも宣言的/機能的なプログラミングスタイルを強要する必要があります。 ElloはWeb開発スタック全体(HTML/CSS/JS)の代わりになりますが、ClojureScriptはJSの置き換えに似ています。

その他の違い:

  • エルムの構文がはるかにHaskellのようなある
  • ClojureScriptは
  • エルムは非常エルムにおける時間変化する値(「シグナル」用に最適化された伝統的なLispの構文に非常に近いです
  • TYP)
  • ClojureScriptは、より成熟しており、あなたは
  • エルムが静的に型付けされ
  • は、ClojureScriptが動的である(そのためのEclipseプラグイン、LightTableなど)をいくつかの甘いの開発ツールを見つけることができますed

希望します。私はまだこれらの言語の両方を学んでいるので、何かを見逃しているかもしれません。ただ、2017年

エルムのためにこれを更新する

+3

これは、最大の違いを欠場:種類。 ClojureScriptは動的に型指定されていますが、これは非常に柔軟ですが、Elmは静的に型付けされ、柔軟性は低くなりますが、キャッチされていないランタイムエラーがほとんどなくなります。 – jmite

+0

@jmite良い点、私は私の答えを更新しました。私はそれが*最大の違いではないと主張していますが、それはまだ大きなものです。 – hoosierEE

7

はもはやエルムアーキテクチャの賛成でのいくつかのリリース前に去っていきましたFRP、ではありません。

Elmの大きなメリットは、コンパイル時にコンパイラがプログラムの正確性について多くのアサーションを行うことを可能にする静的型システムを持つことです。たとえば、ケースステートメントが特定のケースをカバーしていない時間がないという事実を知っています。または、ビュー関数からのHTMLは、更新が対処方法を知らないというイベントを生成します。

他のエルムの利点

  • グレートエラーメッセージ
  • パッケージセマンティックバージョニングを施行している
  • パッケージやツールは、彼らは両方のFRP(官能性反応プログラミングされている本当に明白な名前
1

を持っている傾向があります)を意味します。つまり、DOMにマップされたツリーを持ち、レンダリングが必要なコンポーネントまたは子のみをレンダリングします。

これらはどちらもJavaScriptでコンパイルされます(ただし、ClojureScript/OmライブラリまたはReagentではjsの実際のReactオブジェクトを取得できます)。白エルムはそれ自身のことをします。私はエルムがnpmでインストールしなければならないと思っていますが、czaplikiはスタンドアロンのインストーラを使って作業しています。) (言及されたように)Haskellのような構文と、RuntimeErrorsをCompileTimeErrorsに移動します。これは開発者としてはるかに納得のいくものです。

一方、cljsには多くのライブラリがあります。これらのうちのいくつかは実際のReactコンポーネント(cljs/OmはR.js LifeCycleと1:1で一致します)を返す - 他は単にFRPとLifeCycleのメンタリティを邪魔することなく尊重しますそれによります。 With Omni/Nextには、GraphQLによるエンドポイントからのデータ呼び出しの方法があり、プレーンcljs/Omで使用されていた非同期chansが削除されている可能性があります。

正直言って味の問題ですが、私は1人がエルム(両方の言語で書かれている)を好むでしょう。 もしあなたがcljsと一緒に行くのであれば、素敵な図書館を手に入れて、バニラ・クライスで何もしないでください。そうしないと、5k + LOCを維持したいときにはごめんなさい。(Fulcro、Reagent、om、OmNext、hoplonなど)

関連する問題