ずっと君のターン

2011-10-18 やや肌寒い

Google Dartがなぜ的外れなのか

| 23:24 | Google Dartがなぜ的外れなのかを含むブックマーク

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


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

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

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

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

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

Dartの目標

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

1. ウェブのための構造化されていて柔軟なプログラミング言語を創り上げること。

すばらしい。しかし他の構造化されていて柔軟な言語だと何が問題なのだろう?ウェブのもっとも偉大な利点はサーバーサイドで好みの言語を使うことができる点だ: PHP、 C#、 VB、 Perl、 Java、 Ruby、 Python、 などなど

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

2. Dartはプログラマに馴染み深く自然な印象を与え、簡単に学ぶことができる。

構文上は、DartはJavaやC++、C#に非常によく似ている。ではなぜGoogleは単にそれらの言語の内一つを選ばなかったのか?その方が一層学習が容易だったろうに。

3. Dartはあらゆる種類のデバイスに対応する。

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

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

4. Dartをすべてのメジャーでモダンなブラウザで高速に動作させるツールを提供する。

MicrosoftやMozilla、Apple、Operaが彼らのブラウザにネイティブDartクライアントを付けるとでも?それはちょっと考えづらいね。

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

JavaScriptへのコンパイル

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

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

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

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

JavaScriptに少しの愛を

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

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

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

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

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

抗うことはできないから

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

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

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


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

f:id:technohippy:20111018231711p:image

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

いずいず 2011/11/15 01:01 今更ですが・・・この記事そうとう影響力がありそうなのでDartの肯定意見もちょっと書かせてください。
まだDartは機能不足ですが方向性は間違ってないと思います。読んでもらえるとうれしいです。
プログラミング言語Dartの「方向性」はやっぱり正しい / いずログ - http://is-log.blogspot.com/2011/11/dart.html

technohippytechnohippy 2011/11/18 15:54 ありがとうございます。ですがアクセス数やはてブ数から考えて「本の虫」の人のDart礼賛の方がずっと影響力が大きいと思うので心配する必要はないと思いますよ。

さて、件の記事はひと通り読ませていただいたんですが話が発散しすぎていてどういった主張なのかが今ひとつ理解できませんでした。まるでアプリケーション開発に関わるすべての問題をDartが解決してくれるような文章に読めましたが視点が一方的で少し我田引水が過ぎるように感じます。

そもそもDartを批判する人は言語として優れているかどうかという点ではなく、「完全に新しい言語でJSを置き換える」という考え方を批判、というか「無理だろ」といっているように感じます。で、Googleみたいな大きな会社がそういう無理を通そうとすると周囲が混乱するだけなのでやめてくれ、というのが私の意見です。せめてJavaScriptのサブセットまたは拡張ならまだ応援する気にもなったでしょうが・・・。

通りすがり通りすがり 2012/01/23 02:26 楽しく拝見させてもらいました。
確かにDartには否定的な意見、肯定的な意見があって
色々考えさせられる言語ではあると思います。

私は、次の三点において、Dartを前面肯定します。
1.サーバーサイドで最も使われているスクリプト言語である
  PHPは脆弱性の高いコードを作りやすい仕様であるため、
  代替言語が強く必要とされている。」
2.「サーバーサイドとクライアントサイドで、
  覚える言語が異なる意味はない。」
3.要するに、サーバーサイド・クライアントサイドで
  同じように使える手軽な"スクリプト言語"は今までなかった。

1.については言わずもがな。
2.については、そのような要望があることは事実で、
サーバーサイドスクリプトとしてJavaScriptが注目され始めています。
3.については、JavaScriptが有望ですが、現状として
JavaScriptがサーバーサイドで使われているとは言い難い状況です。
というのも、大規模になりがちなサーバーサイドで使うには、
JavaScriptには弱点があったから、そうなっているのだと思います。

だから、結局はJavaScriptとDartの戦いということになるかな、と。
GoogleはJavaScriptエンジン(V8)を開発していることもあり、
世界中で最もJavascriptの弱点等を知り尽くしている企業です。
Dartが仕様・実装としてそれなりにJavaScriptよりも
有用なものに進化するのならば、普及度と関係なく、
Mozillaの運営するFirefoxあたりもNativeに実装すると思いますよ。
ブラウザとしてシェアの少ないSafariも同調するでしょう。
IEはなかなか実装しないでしょうけど(笑

しかし、それでも、2012年の今年中には、IEのシェアは
1/3くらいに落ち込むことになりそうですので、少なくとも
2/3のブラウザはDartをNativeに実装することになると思います。

Dartの言語仕様は、最新の言語だけあって、
C#と同様に洗練され美しいです。
GoogleがApacheやnginxのDartプラグインをオープンな形で開発すれば、
一気に流れが変わる可能性もあると思います。
開発する人にとっては、「また言語覚えるのかよ」と思う人が
多い気もしますけど、一方で、綺麗な言語が流行るのを歓迎する人が
いるのも確かです。(私がそうです。)
JavaScriptに似ているので、覚えるのはそんな大したことじゃない
とも思いますし、私は歓迎します。

technohippytechnohippy 2012/01/23 10:59 コメントありがとうございます。
いろんな考えがあっていいとは思いますが、いちおう通りすがりさんの意見に対する私の意見を書いておきますね。

1.サーバーサイドで最も使われているスクリプト言語であるPHPは脆弱性の高いコードを作りやすい仕様であるため、代替言語が強く必要とされている。

PHPが落とし穴の多いクソな言語であることは多くの人が認めていることですし、サーバーサイドで利用できるよりよい言語はいくらでもあります。それなのになぜ今だにPHPが広く使われているかというと「PHPがすでに広く使われていて仕事が沢山あるから」の一点ではないでしょうか。であるとすると、新しい言語を公開することはそもそも問題の解決になりません。

2.サーバーサイドとクライアントサイドで、覚える言語が異なる意味はない。

異なる言語を覚える意味はないというのは明らかに言い過ぎで、現状では目的に応じて使用する言語を変えるのはむしろ当然のことのように思います。サーバーサイドのプログラミングで嬉しいことの一つは利用する言語に原理的な制限がないことです。サーバーサイドとクライアントサイドで同じ言語を使えるようになるのもいいですが、そうするのであればサーバーサイドで使える言語を制限するのではなく、クライアントサイドで使える言語を増やす方向に進んでくれることを望みます。

3.要するに、サーバーサイド・クライアントサイドで同じように使える手軽な”スクリプト言語”は今までなかった。た

その認識が正しいとしても、「だから両方で使える全く新しい言語を開発する」という手段が正しいとは思えません。クライアントサイドで使われているJavaScriptをサーバーサイドで使えるようにするか、もしくはサーバーサイドで使われているRuby/Python/Perlなどをクライアントサイドで使えるようにするのが本筋ではないでしょうか。全くユーザーがいない言語をサーバーサイド・クライアントサイド両面で新たに普及させることと、すでにいずれかで広く使われている言語の利用範囲を広げること、実現するにあたってどちらが現実的かは議論の余地のないことです。

> ..略.. 少なくとも2/3のブラウザはDartをNativeに実装することになると思います。

楽観的な予測過ぎてご自身でも信じているとは思えません。Google自身もそこまで楽観的な予測はしていないはずです。もちろん5年先、10年先の話をしているのなら可能性はゼロとは言いませんが・・・。

> Dartの言語仕様は、最新の言語だけあって、C#と同様に洗練され美しいです。

審美眼は人それぞれですが、私はDartを「ダサい」と感じました。Go言語の方が美しいです。