私はSO=でこの質問をしましたが、ここで試すことを提案されました。
これまでの私のJavaScriptの理解は、JavaScriptがイベントをキャプチャしてWebページを動的にするクライアント側の言語であるというものでした。
しかし MongoDBとCouchDBの比較 を読んで、両方ともJavaScriptを使用していることに気付きました。これにより、他の従来の言語よりもJavaScriptを選択した理由が不思議に思われます。
私はJavaScriptの役割と、他の言語に対するJavaScriptの利点を理解しようとしていると思います。
更新:2つのデータベースでサポートされている言語/ドライバーについては尋ねていません。比較は言う:
CouchDBとMongoDBはどちらもJavaScriptを使用しています。 CouchDBは views の構築を含め、JavaScriptを幅広く使用しています。
MongoDBはサーバーサイドでの任意のJavaScript関数の実行もサポートし、マップ/リデュース操作にJavaScriptを使用します。
私の理解の欠如は、なぜバックエンド作業にJavascriptが使用されているのかということに関係しています。 CouchDBでビューを作成したり、map/reduce操作を使用したりするのが望ましいのはなぜですか? C/C++またはJavaが使用されなかったのはなぜですか?そのようなバックエンド作業にJavaScriptを使用する利点は何ですか?
JavaScriptはモバイルコードと呼ばれ、コードはサーバー(この場合はMongoDBとCouchDB)からクライアントに転送されます。 (ウェブブラウザ)、インストールプロセスなしでクライアントで実行されます。
JavaScriptランタイム環境(Webブラウザー)も、多くのプラットフォームで広く利用できます。そのため、JavaScriptはクロスプラットフォーム言語として優れています。
MongoDBバックエンドはC++で実装され、CouchDBはErlangで実装されています。そのため、JavaScriptはこれらのシステムのバックエンドの主要言語として使用されていません。
mongodb.com から:
C++で記述
から couchdb.Apache.com :
CouchDBは、並行分散システムの構築に理想的な堅牢な関数型プログラミング言語であるErlangで記述されています。 Erlangは、拡張が容易で拡張が容易な柔軟な設計を可能にします。
JavaScriptはスクリプト言語だからです。
それは、人々に馴染みのある柔軟で動的な言語です。
JavaScriptが使用されるもう1つの理由は、JavaScriptがこれらのデータベースが使用するJSON形式とうまく整合するためです。
そして最後に、これらのデータベースには、解釈可能な言語が必要です。これらのクエリのコードはネットワーク経由で送信されるためです。
だからあなたは
言語。ここではJavaScriptが悪い選択だとは思いません。おそらく、Cスタイルの構文を使用するために選択されています。
JavaScriptが他のJavaScriptよりも選ばれた理由scripting言語は良い質問です。
JSが記述に使用されていることに気づいたとき、私たちはみんな控えめなパイを食べる必要があります。
データベース
サーバー
オペレーティング・システム
無数のライブラリ、フレームワーク、レンダリングエンジン、コンパイル言語、
...それが良いからです。
真剣に、お願い...私に聞いてください。メッセンジャーを撃たないでください。
なぜ彼らがJSで一流の市民としてWindows 8を構築しているのかをマイクロソフトに尋ねてください。または、Mozillaの新しいモバイルOS、またはIBMのRivertrail、PhoneGap、ExtJS、またはWebGL。
専門家が実装においてより良いものを見つけられなかった場合、これらの企業またはプロジェクトのいずれかが成功したでしょうか?
答えは...彼らはそうした。しました。したがって、ここでのテーマは明確でなければなりません。より良い方法があります。
しかし、より良いのは主観的です。そのため、ドリルダウンして比較する必要があります。何が良いですか?
AJAXで始まりました...そして、それは止まりませんでした。
非ブロッキングIO。これは本当に大変なことであり、知っておく価値があります。 JSでは、これはコールバックパターンです。コールバックを使用すると、ノンブロッキングサーバーを有効にできることがわかります。Node.js〜約8行のコード。 setTimeout()はコールバックです。シングルスレッド非同期処理。
柔軟性。何? -JavaとCにはクラスとインターフェースがありますが、オブジェクト指向と呼ばれています。 JavaScriptにはオブジェクトしかありません。しかし、それは...何か別のものと呼ばれています。
-メンバーのみとメソッドは実行時に完全に動的であるため、オブジェクトのみを持つことは柔軟性にとって素晴らしいことです。 -プロトタイプの継承は怖くない。一部の専門家はそれをオブジェクトパックパックと説明しています。 -JSはエラーに対して友好的です。 -コードは混合して、多くの労力や知識を必要とせずに複合コンポーネントを生成できます。「インターフェース」、「抽象化」、「継承」、「カプセル化」、「ポリモーフィズム」の知識。 JSでは良い点ですが、Nikeと同じです。あなたはそれをするだけです。
データ変換。 JSONを使用すると、オブジェクトを前面から背面、背面から前面に転送できます。 XMLデータ変換はありません。 JSONは明らかに単純です。
学習曲線が低い。非常に複雑なコードをカットアンドペーストしてから、ステップデバッグして存在させることができます。同僚のことを聞いています... 'noobs'。しかし、それは初心者のためだけのものではありません。
-これはラピッドプロトタイピングにとって本当に素晴らしい機能であることがわかりました。そして、このブラウザー内での設計を活用するサイトが、さらに広く普及しています。ランタイムプロトタイピング。 JSFiddleとCodePen、MicroJSもチェックアウトしてください。 GitHub。
Like Transformers, with JS, there is more than meets the eye.
It is a big deal.
更新:この投稿以来、JavaScriptは他の言語で広く使用されています。
In Java - check out Nashorn.
In C++ - check out Emscripten, or ASM.
And there are many more.
The big surprise since the original writing of this answer was JS cross-compilation.
It turns out that many languages can be compiled to JS.
And the community is encouraging that... CoffeeScript, Dart, etc.
This is not my specific area of expertise, but it is going on in big ways.
Simply put, we just don't know how the dynamism of JS is going to hash out yet.
あなたはより多くでより少ないことをすることができます-これにはいくつかの学校があります。冗長な学校は、すべてのばかが理解できる非常に細かい詳細にすべてを綴ることを望んでいます。 JSは、反対側の学校のメンバーであり、細部がどのように機能するかを理解する前に、全体像を簡単に把握できるように複雑さを重ねることができます。 JSでのインターフェースへの書き込みは、ほとんどの言語であるIMOよりもはるかに簡単です。
ファーストクラスの関数、クロージャー、プロトタイプの継承-これは本当に非常に柔軟なコンボです。必要に応じて、クラスを模倣できます。しかし、これはJSを非常によく理解している人にとっては、無意味な努力と見なされています。合成は、連鎖継承よりもはるかにJSに適しています。
ブロッキングはより高いレベルで役立ちます。はい、あなたは私を聞いた。これにより、主力ではなくメッセンジャーとしてJSに焦点を合わせ続けることができ、関数呼び出し間の非同期動作からの割り込みを可能にしながら、キュー自体をほとんど処理します。
学習曲線は、実際には強力なJSを作成するために少し急であると思いますが、いったんそこに着くと、それは厄介です。ただし、より低いスキルレベルでJSにプリベークしたものを実装することは決して難しくありません。
イベント駆動型プログラミングモデル
JavaScriptは、コンピューティングに対するイベント駆動型の非共有メモリアプローチで作成されました。 UI開発では、これは完全に古い帽子です。 「アプリケーション」がプロセスを制御しているという前提はありません。プロセスAPIはありません。主な機能もありません。
「アプリケーション」は、次のような特定のことが起こったときに実行されるスクリプトのコレクションです。
これは、データ変換に必要な処理ロジックの小さなチャンクと非常によく一致します。
スクリプト言語
コンパイルステージがなくても実行できるということは、処理命令を簡単に格納できることを意味します。スクリプトをテキストとして簡単に保存し、特別なデータタイプや知識なしで渡すことができます。
かなりシンプルで安定しており、後方互換性があります
今日作成するコードは、10年前とそれほど変わりません。バージョン管理は、それを埋め込む人々にとってそれほど問題になることはないでしょう。
パフォーマンス
優れたオープンソースエンジンがいくつかあり、大量の作業が行われています。多くの代替手段よりもかなり高速に実行されます。
中括弧
多くの人々は、さまざまなプログラミング言語に慣れていないために制限されています。 JavaまたはC#のプログラミング方法のみを知っています。そのため、JavaScriptは見慣れているので簡単に習得できると期待しています。もちろんそれは幻想です。私が学んだときPython JavaScriptの学習とほぼ同じペースで行われました。
この質問は少し古いですが、JavaScript対Java/C++を使用する理由は、JavaもC++もコードフラグメントを簡単にサポートしないためです。
JavaScriptが発明されなかったとしても、JavaでもC++でも、サーバー側で実行されるソースコードフラグメントには適していません。別の言語を選択するか、独自の言語を発明します。戻る独自の言語を作成し、独自のプロダクションルール、AST、インタープリターなどを定義するために使用された製品は、ドメインに特化しています。
しかし、JavaScriptを使用すると、製品にドメイン固有言語(DSL)を作成し、他のすべての非ドメイン関連インフラストラクチャの作成を心配することなくエンジンを埋め込むことが非常に簡単です。