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 full-size slide

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

    View full-size slide

  3. Source Code VM
    Why not Bytecode VM?

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  6. Isolates
    Why not Bytecode VM?

    View full-size slide

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

    View full-size 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 full-size slide

  9. Optional Typing

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  12. Optional Typingの背景

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  16. そして
    Multiple Type Systemへ

    View full-size slide

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

    View full-size slide