全体概要

本セミナーは「JavaScriptの進化」を軸に、2013年時点における最先端のWeb技術動向と、JavaScriptの言語的限界を乗り越えようとする二つのアプローチ(TypeScriptとDart)を深く掘り下げた講義です。

JavaScriptは1995年にNetScapeのブラウザ内言語として誕生しました。当初から「ホスト環境内言語」として設計されたこの言語は、特定の実行環境に依存するという根本的な制約を持ちながらも、jQueryによるAJAX革命を経て、2009年のNode.jsの登場によってサーバーサイドへと適用範囲を劇的に拡大させました [p.6, p.33]。Node.jsの誕生は単なる「クライアントからサーバーへの拡張」ではなく、スレッドに依存しないイベントループと非同期I/Oという新しいプログラミングパラダイムの台頭を意味しており、その問題意識はRyan DahlがJSConf 2009で提示した「I/Oは違ったやり方で行われる必要がある」というテーゼに凝縮されています [p.35, p.36]。

JavaScriptをめぐる新しい動向として、Chrome for AndroidのHTML5対応の進展、AngularJSに代表されるJavaScript MVCフレームワークの台頭、そしてWeb ComponentsとMDVというWebの構造そのものを変革しようとする動きが詳述されます [p.49, p.64, p.111]。特にAngularJSは「HTMLの語彙をアプリケーション開発のために拡張する」という思想に基づいており、宣言的なデータバインディングによってDOM操作を抽象化するアプローチが解説されます [p.68]。

後半では、JavaScriptが大規模開発においてスケールしないという根本的な問題意識に応えるべく設計された二つの言語が比較検討されます。MicrosoftのTypeScriptは「JavaScriptのスーパーセット」として静的型付けをオプションで追加し、既存のエコシステムと共存しながらツールサポートを強化するアプローチをとります [p.176]。一方、GoogleのDartはJavaScriptの構造的な問題を根本から解決するために「言語そのものを置き換える」という野心的な賭けを提示しており、両者のアプローチの違いがこのセミナーの核心的な対比をなしています [p.240]。

講義のロードマップ

ここでは、セミナーの講演資料がどのようなパートから構成されているかを示します。また、それぞれのパートのポイントを紹介します。

■ Part I: JavaScriptの進化

JavaScriptがブラウザ内の小さなスクリプト言語から、サーバーサイドをも含む汎用プラットフォームへと進化した歴史的経緯を追います。jQueryによる非同期・関数型スタイルの普及と、Node.jsによるホスト環境からの脱却という二つの飛躍が中心テーマです。さらに、Chrome for AndroidのHTML5対応状況、AngularJSのMVCパターン、Web ComponentsとMDVというWebの次世代標準が詳細に解説されます [p.5, p.48]。

■ Part II-1: TypeScript

TypeScriptは「JavaScriptのsyntactic sugar」であり、ECMAScript 5のスーパーセットとして設計されています。すべてのJavaScriptプログラムは有効なTypeScriptプログラムであるという後方互換性を保ちながら、オプショナルな静的型システム、クラス、モジュールを提供し、大規模アプリ開発のためのツールサポートを実現します [p.176]。

■ Part II-2: Dart

DartはGoogleが「JavaScriptはスケールしない」という根本的な問題認識のもとに設計した新言語です。大規模プログラミングのサポート、高速な起動性能、予測可能な実行時パフォーマンスを設計目標に掲げ、JavaScriptへのトランスパイル(dart2js)とDart VMの両方での実行をサポートします [p.231, p.238, p.247]。