Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Dart VM と Optional Typing

Tomochika Hara
September 22, 2013

Dart VM と Optional Typing

2013 Dart VM と Optional Typing

Tomochika Hara

September 22, 2013
Tweet

More Decks by Tomochika Hara

Other Decks in Technology

Transcript

  1. Dart VMと
    Optional Typing
    tomochikahara
    @zetta1985

    View Slide

  2. Agenda
    ● Source Code VM
    ● Isolates
    ● Optional Typing
    ※ パフォーマンスもウリだけど、今回は語りません、というか語れません
     低レイヤの詳しいことは nothingcosmosさんの
     Dart VM Advent Calendarが詳しい(2012年末時点である事に注意)

    View Slide

  3. Source Code VM
    Why not Bytecode VM?

    View Slide

  4. JITコンパイル
    Source Code VM
    Source Code
    アセンブラ
    中間表現
    抽象構文木
    Byte Code VM
    JITコンパイル
    コンパイル
    Source Code
    アセンブラ
    中間表現
    抽象構文木

    View Slide

  5. JITコンパイル
    Source Code VM
    Source Code
    アセンブラ
    中間表現
    抽象構文木
    ● コーディング後のコンパイ
    ル作業が不要
    ○ LL - likeな開発
    ● 言語に特化した最適化
    ○ 末尾再帰最適化
    ● 中間表現のカプセル化
    ○ 進化させやすい
    ○ 後方互換性の範囲

    View Slide

  6. Isolates
    Why not Bytecode VM?

    View Slide

  7. ● ErlangのActorが源流?
    ● 共有メモリを持たない
    ○ top level variableもisolate単位
    ○ full GCもisolate単位
    ○ 複数isolate間での状態管理が不要
    ● Message Passing
    ○ Object snapshot
    ○ SendPortとReceivePortのみで連携
    isolates ?

    View Slide

  8. isolateの簡単な例
    import 'dart:isolate';
    childIsolate() {
    port.receive((msg, replyTo) {
    print('doing some work');
    if (replyTo != null) replyTo.send('shutdown');
    });
    }
    main() {
    var sender = spawnFunction(childIsolate);
    var receiver = new ReceivePort();
    receiver.receive
    ((msg, _) {
    if (msg == 'shutdown') {
    print('shutting down');
    receiver.close();
    }
    });
    sender.send('do work please', receiver.toSendPort()
    );
    }
    isolate生成
    Message受信時のCallback
    Message 送信
    Message受信時のCallback
    Message 送信

    View Slide

  9. Optional Typing

    View Slide

  10. Optional Typing = 任意型付け
    ● 型を指定してもいいし、しなくてもいい
    ● 型指定があってもなくても、動作に影響しない
    ● Production Modeなら、LLとほぼ同じ
    ○ 型指定無しで書いて、即実行
    ○ 但しREPLは無い

    View Slide

  11. ● コーディングから実行までの時間短縮
    ○ コンパイル手順が不要
    & コンパイル自体の時間短縮が必要
    ○ Web(GUI)アプリ開発では特に重要
    ■ GWTでの反省?
    なぜ Optional typing なのか?
    ● 言語仕様とType Systemを疎結合に
    ○ Type Systemに言語仕様が依存すると
    言語自体の進化を妨げる

    View Slide

  12. Optional Typingの背景

    View Slide

  13. Pluggable Type System
    ● 現Dart言語設計者 Gilad Bracha氏の発案(2004)
    ● Gilad Bracha氏
    ○ Java言語仕様
    ○ Java仮想マシン仕様
    ○ Smalltalk
    ○ Newspeak
    ※ 他にもJoshua BlochがDartの言語仕様に関わる。
    Javaっぽくなるのは必然?

    View Slide

  14. Pluggable Type System
    ● 言語とType System の相互依存性の排除
    ○ 便利なType System は言語に深く依存する
    ○ SemanticsもType Systemに依存すると発展を阻害
    ■ Cast, Overloading, Accessibility
    ● Modularityの向上による言語とType System の独自進化
    ○ Type Systemを進化させやすい
    ■ 動作しているコードに型は影響しないため
    ● 最も自然なType System
    ○ 型付きラムダ計算
    ■ 型が式の評価に影響を与えない

    View Slide

  15. 静的 vs 動的型付け
    論争の終焉がここにある
    ※ 釣りです

    View Slide

  16. そして
    Multiple Type Systemへ

    View Slide

  17. 参考
    http://www.dartlang.org/
    http://nothingcosmos.github.io/DartVM/index.html
    http://bracha.org/pluggable-types.pdf

    View Slide