Google Dartがなぜ的外れなのか

自分の感じたことをきれいにまとめてくれてる文章があったので適当訳。


http://www.sitepoint.com/google-dart-fail/

Google Dartがなぜ的はずれなのか

DartGoogleによる構造化されたウェブアプリケーションを設計するための新しい言語だ。サーバ上で動作させることもできれば、クライアント上で動かすこともできる。つまりブラウザ上で。

あなたが何を読んだかによって、GoogleDartJavaScriptの代替になることを認めていたり否定していたりするだろう。しかし、Chromeは近いうちに両方の言語が利用可能になり、選択肢が与えられることになる。もちろんGoogleは開発者たちが彼らのコントロール下にある技術を選ぶことを望んでいると私は確信している。

最初は私もDartに懐疑的でありつつも評価はより多くの情報が出てくるまで保留していた。しかし今確信を持って答えられる。この言語はInternet ExplorerでのVBScriptと同じような形で間違いなく失敗するだろう。

Dartの目標

Dartは次のような設計上のゴールをもったオープンソースプロジェクトだ:

1. ウェブのための構造化されていて柔軟なプログラミング言語を創り上げること。
すばらしい。しかし他の構造化されていて柔軟な言語だと何が問題なのだろう?ウェブのもっとも偉大な利点はサーバーサイドで好みの言語を使うことができる点だ: PHPC#VBPerlJavaRubyPython、 などなど

改善の余地は常にあるが、選択は常に与えられている。Dartはなにか新しいものを与えてくれるんじゃない - 単に選択肢が増えるだけだ。

2. Dartプログラマに馴染み深く自然な印象を与え、簡単に学ぶことができる。
構文上は、DartJavaC++C#に非常によく似ている。ではなぜGoogleは単にそれらの言語の内一つを選ばなかったのか?その方が一層学習が容易だったろうに。

3. Dartはあらゆる種類のデバイスに対応する。
Googleは「モバイルプラットフォームの細分化に対抗する」と言った。さらに新しい言語の細分化を招くんじゃなくて?

GoogleAndroid用のDartネイティブランタイムを作ることはできるだろう。おそらくWindows Phoneも大丈夫だ。ではAppleはどうなる?最も成功しているスマートフォンベンダーは?無理に決まっている。

4. Dartをすべてのメジャーでモダンなブラウザで高速に動作させるツールを提供する。
MicrosoftMozillaAppleOperaが彼らのブラウザにネイティブDartクライアントを付けるとでも?それはちょっと考えづらいね。

Googleはそれらのプラットフォーム向けにプラグインを作ることはできるだろう。しかしウェブデベロッパはそのプラグインが十分に行き渡るまでDartでコードを書きたいとは思わないだろう。そしてユーザーはDartを使った優れたアプリケーションが開発されるまでインストールしようとはしないだろう。これではどうにも身動きがとれない。

JavaScriptへのコンパイル

実はGoogleDartプラグインを必要としない。というのも、彼らはすでにDartコードをネイティブJavaScriptにトランスレートするコンパイラを作成しているからだ。

だが喜ぶのは少し早い。コンパイルされたDartの"Hello World"プログラムを見てみよう。9行のDartコードはコンパイルに成功すると・・・17,259行のJavaScriptになる。

これは今後改善されることはわかってる。今だって、GoogleのClosure Compilerを使えばコードをより効率的にしてから実行できる。しかしそれなりのJavaScript開発者が書いたネイティブのJavaScriptは常にコンパイルされたDartコードを打ち負かすことができるという事実は残る。

Dartで開発するとしても、おそらくどこかの時点で効率を改善するためにJavaScriptの中を弄りたくなるだろう。しかしもしすでに優れた品質のJavaScriptを書くことができるのなら、どうしてDartで開発する必要がある?身動きの取れない状況その2だ。

JavaScriptに少しの愛を

Googleのドキュメントから明らかなのは、DartJavaScriptを嫌っている開発者を助けるためのものだということだ。

世界で一番利用されているプログラミング言語であるにもかかわらず、JavaScriptは大いに誤解されている。名前がまずまずい - Javaでもなければスクリプトでもない - が、悪印象の最も大きな原因はプロフェッショナルなプログラマだ。

一見すると、JavaScriptC++Javaにちょっと似ているように見える。それらの言語を知っている開発者はマニュアルでクラスの構文を探してまわり、そんなものが存在しないことを知る。そして彼らはJavaScriptなど下らないと結論づけるか、無理をしてクラス風の継承テクニックをコードに取り込もうとする。

だがそれは少し待って欲しい。JavaScriptは柔軟な言語だし、いろいろなやり方でコードを書ける。プロトタイプによる継承のコンセプトを一度理解すれば、JavaScriptが素晴らしいものだと思えるはずだ。もちろんそれは完璧ではないかもしれないが、すぐにクラスベースの言語がダサく感じるようになるだろう。

一晩でそうなると期待してはいけない。開発者たちがJavaScriptの美しさを再発見するまで10年以上かかった。今は幸いなことに素晴らしいリソースがウェブ上にたくさんあり、JavaScriptは一級の言語だとみなされている。

抗うことはできないから

Dartの大きな問題点は、JavaScriptはあらゆるところに存在するということだ。チンケな携帯電話からAppleiPadやモダンなデスクトップブラウザまで。MicrosoftですらWindows 8でのアプリケーション開発ではHTML5JavaScriptをキーテクノロジーに位置づけている。

Chromeが仮に50%のマーケットシェアを得ることができたとしても、君はあらゆる場所でサポートされている言語と、全デバイスのたった半分でしかサポートされていない言語、どちらを使いたい?もし10年前にリリースされていたら、またはJavaScriptはまったくダメダメでDartが革命的なら、まだチャンスがあったかもしれない。だがどちらも正しくない。

Googleが革新を続けようとしていることを嬉しく思うが、Dartは後退っているように思える。君はJavaScriptを嫌い、HTMLを憎み、CSSを馬鹿にしているかもしれない。しかしウェブデベロッパであるかぎり、それらから逃れることはできないのだ。



まぁ個人的なDartの感想はこれでFAなんだけど。

http://twitter.com/#!/technohippy/status/124433302466727936