GoogleはJavaからJavaScriptへのクロスコンパイラーを開発しました。なぜこれを行ったのですか?これは、JavaScriptが高度なWebアプリの開発に十分ではないことを意味しますか?
彼らはこのページの答えの一部を提供します:
http://code.google.com/webtoolkit/makinggwtbetter.html
基本から始めるために、そもそもなぜGWTが存在するのですか?簡単に言えば、GWTはユーザーにとってWebをより良くするために存在するということです。ミッションステートメントに少し長い答えを注入しました。
GWTの使命は、開発者が既存のJavaツールを使用して、妥協のないビルドAJAXを最新のブラウザーで構築できるようにすることです。
言い換えれば、これはJava開発者にAjaxを多用するアプリを作成させる方法でした。
当時、人々はJavaScriptの学習に価値を見いださなかったため、JavaScriptには大きな実装ベースがありませんでした(ただし、そこには最大のインストールベースがあります!)。一般的にJavaプログラマーはJavaでのプログラミングを他の何よりも優先すること。
Javaは、さまざまな成熟したツールと大規模な開発者コミュニティを備えたコンパイル言語です。タイプ、オブジェクト、例外、フレームワーク、優れたツール、コミュニティサポートなどがあります。
JavaScript にもこれらすべてが含まれています-コンパイルを除きます。
コードをコンパイルできる場合は、Java=で徹底的にテストしてから、クライアントが実行できるもの(つまり、JavaScript-ここではVBScriptにチャンスがないと思います)に変換します。全体的な開発コスト。大規模で複雑なAJAX= GMailのようなアプリケーションの開発は、費用がかかります。
「1つの言語で記述し、別の言語で実行する」手法は数多くありますが、これは優れた手法でした。
[〜#〜]更新[〜#〜]
私のポイントをさらに明確にするために、JavaScriptはパーサーが構文をチェックする解釈言語ですが、次のような意味上のエラーを拾いません。
function f(x) {
g(y);
}
「g()」も「y」も存在しない場所。これは実行時にのみ取得されます。
JavaScriptエンジンには、 V8 、 Nitro(JavaScriptCore) 、 Spider/Jaeger/TraceMonkey など多くの解析されたコードを可能な限り高速に解析して実行するという素晴らしい仕事を(おそらくマシンコードを発行することによって)行いますが、完全なコンパイルプロセスが行うような意味上のエラーをキャッチしません。これは、スクリプトが互いに独立してWebブラウザーに配信され、必要なすべてのスクリプトがダウンロード/キャッシュされ、DOMが初期化され、動的に生成されたスクリプトが完了するまで、JavaScriptエンジンが完全なストーリーを持っていないことが原因です。トリガーされました。したがって、エンジンは通常、ダウンロードおよびレンダリングプロセスのかなり遅い段階まで、ソース全体を保持できません。
フルコンパイラーは、上記のコードスニペットをエラーとして強調表示します。これは、コンパイルされた言語を使用し、正確性を検証し、ユニットテストを実行してから、リフレクションまたは逆コンパイルを使用して、検証済みの正しいJavaScriptを生成し、クライアントで実行します。