Inside frogc in Dart

5,780 views

Published on

Presentation for #yaminabePG

http://d.hatena.ne.jp/gfx/20120402/1333323796

Published in: Technology
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
5,780
On SlideShare
0
From Embeds
0
Number of Embeds
3,107
Actions
Shares
0
Downloads
13
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Inside frogc in Dart

    1. 1. Inside frogc in Dart 闇鍋プログラミング勉強会 2012/3/31 gfx <gfuji@cpan.org> 1
    2. 2. 自己紹介名前: hatena:gfx, github:gfx twitter:@__gfx__職業:プログラマ スマホ向けのミドルウェアの開発など Objective-C, Java, JavaScript, ActionScript, Perl 最近の興味はスマートフォンでのHTML5 2
    3. 3. 本日のテーマ 3
    4. 4. DartJavaScriptの置き換えを狙ったプログラミング言語構文は (JavaScript + Java + C++)/3 + αクラスベースのオブジェクト指向言語 4
    5. 5. Hello, Dart!class HelloWorld { void say() { print("Hello, Dart world!"); }}void main() { HelloWorld instance = new HelloWorld(); instance.say();} 5
    6. 6. 発表資料http://gfx.github.com/yaminabePG-2012-3-31/スライドは後ほどSlideshareに上げます 6
    7. 7. なぜDartか 7
    8. 8. JavaScript sucksJavaScriptで大きなアプリケーションを書くのは難しい プロパティ名のtypoなどのコーディングミスを実行 時まで検出できない ミスを防ぐためにJSLintのような仕組みが必要 8
    9. 9. FAQCoffeeScriptと何が違う?GWTとは何が違う?速度は?生産性は?デバッグしにくいのでは? 9
    10. 10. Q. CoffeeScriptと何が違う?CoffeeScriptのような徹底的な「記述量の削減」はそもそも目指していない型アノテーションにより動的型言語の欠点を緩和っていうかCoffeeScriptで中規模∼大規模なWebアプリケーション開発とか冗談でしょ? 10
    11. 11. Q. GWTとは何が違う?GWT: Google Web Toolkit (Java to JavaScript compiler)JavaとJavaScriptというまったく異なる言語の間でのつじつま合わせがボトルネックDartの設計には最初からJavaScriptの仕様が織り込まれているので相性がよいさらにoperator overloadなどの糖衣構文もあり 11
    12. 12. Q. 速度は?オーバーヘッドはあるが、そこらのLLよりずっと速い普通のアプリケーションでJavaScriptの70-90%程度 半年後くらいのfrogcを想定した予想値基本的な言語仕様はJSとほぼ互換だからオーバーヘッドは極めて少ない ただしHashMap、テメーはダメだ! 12
    13. 13. Q. 生産性は?JavaScriptと比べると書いていて気持ちがいいただし型推論のない静的型付け言語特有の二重型記述地獄が… List< List<String> > table = new List< List<String> >();型推論はおそらく検討中と思われる 型推論が入らなければDartに未来はない 13
    14. 14. Q. デバッグしにくいのでは?DartVMなら自然にデバッグできる Dartium (Dart Editorに同梱) でも同様source mapに対応すればJS debuggerでもいける ステップ実行もたぶんできるDartVM+実行時型チェックモードならむしろJSよりデバッグしやすい 14
    15. 15. 今現在使い物になるか未熟すぎてとても使えるレベルではないそもそも仕様が固まっていない2つの処理系(standalone VM & frogc)の差が無視できないライブラリがないベストプラクティスがない 15
    16. 16. 言語処理系の話Dart Editor (IDE and Dartium)Dart SDK (CLI commands) 16
    17. 17. Dart SDKfrogc - Dartの処理系のひとつ Dartで書かれたDartコンパイラ DartプログラムをJavaScriptにコンパイルするDartVM - Dartの処理系のひとつ frogcはこれによって実行される 17
    18. 18. frogcこれ以降「Dart処理系」とはfrogcのことDart Editor (Eclipse-based IDE) でのJS生成に使われるコマンドラインからも使用可能frogc.dartはfrogcでコンパイルできない… 18
    19. 19. どのようにJSに変換するかCLIのhelloworldは500行程度400行のshootingは3000行程度多くはランタイム/ライブラリによるものロジックはほぼそのまま 19
    20. 20. コンパイル例 Dart JavaScriptprint(“Hello, world”); print$(“Hello, world”); for(var $$i = a.iterator();for(var i in a) { $$i.hasNext();){ var i = $$i.next(); Parent.prototype.definedInParent.super.definedInParent() call(this) x + y (when num x, y)x+y $add(x, y) (when var x, y) 20
    21. 21. そんなことはどうでもいい Isolateを知りたいんだオレは! 21
    22. 22. IsolateActor model (shared nothing)のthread interfacefrogcでの実装は3つ(Worker, timer, while loop) WebWorkerでは spawn-self hack で実行ただしDartiumではすぐクラッシュするしfrogc+Chromeでも挙動はあやしいしfrogc+node.jsでは動かないし全然ダメ 22
    23. 23. Isolation of global stateすべてのグローバル変数・クラスは、JSレベルではglobal stateというオブジェクトのプロパティspawnするとこれをコピーして、functionオブジェクトとglobal stateを一緒にqueueに突っ込むイメージそしてイベントループの中でqueueから取り出して実行コンテキストスイッチは単に $globals = c.isolateStatics 23
    24. 24. Isolateは使えるの?まともに動かせませんでした><たとえば document.query(‘#foo’).innerHTML = “hoge” とかどうなるの?実装がダメダメすぎるのでまだ海のものとも山のものともつかない要はWebWorkerへのインターフェイスと考えればおk 24
    25. 25. Snapshot起動高速化のための機能frogcでは未実装というかfrogcでどうやって実装するのかmanifestによるcacheと関数単位の遅延evalで高速化はできるかもしれないが…? 25
    26. 26. Run Time Type InformationRun-Time Type InformationはほぼJSそのまま Dart VMだと値が型情報を持つC<T> はTの情報を持たない だからC<T>のメソッドでnew T()ができない 当然 if(c is C<T>)もまともに動かないdoubleとintも区別なし 26
    27. 27. まとめfrogcが吐き出すJSがバケモノというのは都市伝説 肥大化は主にランタイムとライブラリのせいIsolateはWeb Workerを抽象化したインターフェイスあと1年くらいすれば普通に仕事でも使えそう 27
    28. 28. JavaScript sucks. Dart rocks. 28

    ×