Slide 1

Slide 1 text

Dart VMと Optional Typing tomochikahara @zetta1985

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

Source Code VM Why not Bytecode VM?

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

Isolates Why not Bytecode VM?

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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 送信

Slide 9

Slide 9 text

Optional Typing

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

Optional Typingの背景

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

そして Multiple Type Systemへ

Slide 17

Slide 17 text

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