« MacOSXのサービスからJavaScriptが評価出来るとか | メイン | Dennis Ritchie氏ご逝去 »

Google Dart言語をMacOSX Lionにインストールしてみたメモ

先日(2011/10/10)公開されたGoogleの新言語DartをMacOSX 10.7.1 Lionにインストールしてみたので備忘録。

ざっくりというとGoogle Dart言語はJavaScriptとJava/C++の中間的な言語。動的な型の変数だけでなく静的な型も使え、クラス/インターフェースなどを持ち文法的にはC/C++系です。JavaScriptの代替とサーバサイドでのスクリプティングの両方を目指しているようです。詳しくは上の本家ページを見てみればわかりますが、Hello Worldなんかは一見して普通にC系言語ですね。

dartの開発環境はdartソースをコンパイルし結果をJavaScriptで出力するコンパイラdartcとインタープリタ(VM)のdartとd8です。dartcでは出来たjsをブラウザ等のJavaScript実行環境で走らせることができます。いずれChrome等にvmが内蔵されるとコンパイルの必要なくブラウザ内でJavaScriptと同様に走らせることが出来るようになると思われます。

当方のコンパイルした環境

  • MacOSX 10.7.1 Lion
  • Xcode 4.1
  • MacPorts

手順(gsutilのあたりはかなり適当...)

ビルドのための手順が上記Google Codeのwikiに書いてありますが、少しだけ手間がかかったので以下にメモ。

  1. 必要なツールのインストール
    MacBuildInstructions - chromium - Build instructions for Chromium on Mac OS X - An open-source browser project to help move the web forward. - Google Project Hosting
    ここにはXcode 3.2.3+を推奨で4はおすすめでないとありますが、今更面倒なので無視
    sudo port -uvc install git-core +svn
    sudo port -uvc install depot_tools
    sudo port -uvc install gsutil

  2. ソースの入手
    gclient config http://dart.googlecode.com/svn/trunk/deps/all.deps
    gclient sync

  3. 最後にDumpRenderTreeがダウンロード出来ないとかgsutilがどうたらとWARNINGが出たら
    ./dart/third_party/gsutil/20110627/gsutil config

    とするとなにやら長いURLが出てくるのでブラウザで開く。
    googleのアカウントでログインしてgsutilを認証し、出てきたコードをgclientのauthorization codeにコピペ
    project-idは空でリターン
  4. 再度gclient sync
  5. cd dart
  6. Lionの場合SDKが10.6なので
    GYP_DEFINES='mac_sdk=10.6' gclient runhooks
  7. 後はビルド
    ./tools/build.py --arch=ia32
  8. テスト
    ./tools/test.py --arch=ia32,dartc,chromium
  9. 詳細はつついていませんが一箇所テストに失敗しました。気持ち悪いですがなんとか使えているようです。エラーメッセージは以下のとおり
    === Debug_ia32 vm/Mutex ===                                                   
    Path: vm/Mutex
    Running test: Mutex
    <DART>/dart/runtime/vm/thread_macos.cc:132: error: expected: result == 0
    Command: <DART>/dart/xcodebuild/Debug_ia32/run_vm_tests Mutex --ignore-unrecognized-flags
    --- CRASHED ---
  10. buildで--arch=x64とするとdartcは動作するがdartが動かないという結果
  11. コンパイル結果は./dart/xcodebuild/Debug_ia32以下に。

使ってみる

  1. パスを通す
    export PATH=<DART>/dart/xcodebuild/Debug_ia32:$PATH
  2. d8と叩くとjsのreplらしきものが起動しますのでちょこっと遊ぶ
  3. コンパイルしてみる。dartcはoptimizeをつけると劇的に小さなjsファイルを生成してくれますが最適化にメモリを大量に食うようなので適当にjava vmのメモリを増やす
    export DART_JVMARGS="-Xms256m -Xmx512m"
    dartc hoge.dart --out hoge.js --optimize
  4. dartコマンドではスクリプトが直接実行できます
お約束のHello World
  1. Tutorial: Hello, World : Dart : Structured web programming
    このサンプルをhelloworld.dartなどというファイルに保存して
    dart helloworld.dart
  2. dartc --optimize helloworld.dart --out helloworld.js
  3. ちなみにhelloworld.jsは28kb強となります。コンパイルしたjsファイルはnodeでも実行出来ました。
もう少し面白そうなの(DOM操作でHelloworldみたいなサンプル"Hi")
  1. / - dart - Dart - Structured Web Programming - Google Project Hosting
    上のリンクからhi.dartとhi.htmlをもらってきてhi.htmlをindex.htmlにしておく
  2. 変換する
    python <DART>/client/tools/htmlconverter.py index.html --optimize -o foo/
  3. 結果が1つのhtmlファイルに出力されるのでブラウザで開く
    open foo/index-js.html

dom操作を含むhi.dart+hi.htmlの結果(index-js.html)は221kbとなりました。

最後に感想など

まだ公開されたての言語なのでこれからという感じですね。vmでの性能は特に調べていませんが速く出来る可能性は非常に高いと思います。が、特にJavaScriptでの出力は元と比べ相当大きくなります。ブラウザ内に取り込まれるまで実用的ではないかもしれません。

また言語仕様はスクリプト系の言語というよりjavaやC++のような言語に近いので、大きなプロジェクトにはいいかもしれませんが、 お手軽に使う感じではないかもという印象です。

#と思ったのですが、基本は動的型で型アノテーションのチェックはあまり厳しくはありません。ラフにも使える反面静的型付言語ほどの安全性はなさそうです。ある意味"Java"Scriptの再定義ともいえるかもしれません。

追記:単純ループでのベンチマーク

単に1000000000回forでループするだけの超簡単なプログラム(参考にもならないかもですが)で速度を測ってみると面白い結果に。
結果はtimeコマンドのUser時間。マシンはMac miniのi7 2Ghz。

  1. dart foo.dart   --> 8.68s
  2. dartc + node   --> 28.6s
  3. dartc -optimize + node -> 4.43s
  4. dartc + d8      --> 6.55s
  5. dart -optomize + d8 --> 1.21s

ループを10回増やしてoptimize+d8で再テストすると

  1.  dart -optomize + d8 x10倍 --> 17.48s

ということでjsにコンパイルしてd8が最速という結果。ちなみにコンパイル後のjsファイルのサイズはopt=28507 bytes, no-opt=549613 bytesでした。
ほぼ同じコードをJavaScriptで書いてnodeとd8で走らせると

  1. node + js --> 4.36s
  2. d8 + js --> 1.21s

dartcとほぼ同じ結果となりました。

追記2:リリース直後から数日で

dartc -optimizeの出力結果が約10%小さくなっていました(笑)。しばらくは更新ラッシュで安定するには少し時間がかかるでしょうね。安定すれば外部jsやブラウザプラグイン等でランタイムを供給すればコンパイル結果は劇的に小さく出来るのではないかと思いつつ。 

トラックバック

このエントリーのトラックバックURL:
http://blog.browncat.org/cgi-bin/mt/mt-tb-abc.cgi/945


コメントを投稿

(お書きになったコメントはすぐには表示されません。ご了承ください。)


About

2011年10月11日 02:03に投稿されたエントリーのページです。

ひとつ前の投稿は「MacOSXのサービスからJavaScriptが評価出来るとか」です。

次の投稿は「Dennis Ritchie氏ご逝去」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

           

カテゴリー

Powered by
Movable Type 3.36

Twitter


最近のエントリー

デル株式会社ads

注目エントリー