Node.jsのコンセプトとは? ライアン・ダール氏による東京Node学園祭 基調講演(前編)
サーバサイドJavaScriptとして話題になっているNode.jsの開発者ライアン・ダール氏が来日。10月29日に都内で開催されたNode.jsのイベント「東京Node学園祭」で基調講演を行いました。
その模様を紹介します。
Node.jsのコンセプトとは?
Node.jsの開発者、ライアン・ダール氏。
このセッションでは、前半でNodeのコンセプトを、後半では来週にもリリース予定のNodeの新バージョンについて紹介します。
このデニス・リッチーの言葉はNodeの特徴を表していて、Nodeとは機能を加えるよりもむしろ取り去ったものです。
いまのOSのインターフェイスのほとんどは、1970年代のテレプリンタのような歴史をひきずっています。ケン・トンプソンとデニス・リッチーが開発したUNIXやCは当時のPDP11のためにデザインされたもので、いまのOSもその歴史上にあるのです。
UNIXの基本概念は、対話的なコマンドラインを作るものでした。lsコマンドを打つとその結果がテレタイプに出力されるといったものです。そして基本概念には、ブロックするシステムコールやプロセスが含まれています。
ブロックするシステムコールを呼び出すと、I/Oが完了するまで戻ってきません。戻ってくるまでどれだけかかるかも分かりません。これが現代のプログラムを非常にやっかいなものにしています。これが私たちがかかえている問題の根本にあるのです。
プロセスは独立性にすぐれた単位ですが、起動時間がかかりメモリも消費するため、コネクションごとに使うのには重すぎます。lsのようなコマンドにはプロセスを使うのが適切でも、数千コネクション、数万コネクションのそれぞれをプロセスで扱おうとすると問題になります。
できるだけ小さなリソースでできるだけ多くのコネクションをハンドリングできることが目的です。
しかしRubyやPython、Javaも1970年代のやり方が残っており、依然としてブロッキングシステムコールを使っています。それらの言語は文法だけが飾り立てられています。(会場ややざわめき)
1970年代のプログラミングモデルを再考しなければなりません。
プロセスで多数のネットワークI/Oを多重化するノンブロッキングソケットは1980年代には開発されていました。
どのプログラミング言語もノンブロッキンングインターフェイスへのバインディングを持っています。しかし、それらは既存のAPIに付け加えられただけで、エキスパートでないと理解も開発も難しいものでした。デフォルトはブロッキングだったため、ノンブロッキングを使う場合でもブロッキングの動作を理解しておかなければならなかったのです。
Nodeのゴールは、ノンブロッキングなネットワークのプログラムをやさしく開発できること。100%ノンブロッキングなインターフェイスを導入することで、それに成功しました。
Nodeの貢献は、ノンブロッキングAPIを発明したことではなく、それだけで開発できる環境を作ったことです。
Nodeの目的は、利便性を高めるのではなくシンプルなモデルの実現です。それによって開発者の生産性がさらに高まるのです。
ここまでが前半の話です。質問はありますか?
(会場)なぜ新しい言語ではなくJavaScriptだったのでしょう?
RubyやPythonなどほかのプログラミング言語はすでに、ファイルシステムへのアクセスやDNSへのアクセスを備えていて、そうするとノンブロッキング用のAPIとそれらを同時に使わなければならなかったからです。
JavaScriptを選んだのは、I/Oをどうするべきという概念が言語になかったから。そしてJavaScriptを選んだおかげで、Nodeがこんなに知られることになったのだと思います。
(会場)どういう考えでNodeを開発したのかは聞けたのですが、ではなぜ「Node」という名前なのかを教えてください。どういう意味が込められているのでしょうか。
Nodeは、「Node in Network」のNode。これは全体の分散システムの中のスモールピースを示していて、まだそれは実現できていないけれど、今後の追加機能では分散したNodeをまとめるようなことができるようにします。
≫続きは「Node.jsの新版について。ライアン・ダール氏による東京Node学園祭 基調講演(後編)」で。
関連記事
あわせて読みたい
Node.jsの新版について。ライアン・ダール氏による東京Node学園祭 基調講演(後編)
≪前の記事
タブレット、モバイル中心アプリ、ソーシャル体験、インメモリなど、ガートナーが早くも来年重要となる戦略的技術をリストアップ