Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Dart VM と Optional Typing
Search
Tomochika Hara
September 22, 2013
Technology
0
390
Dart VM と Optional Typing
2013 Dart VM と Optional Typing
Tomochika Hara
September 22, 2013
Tweet
Share
More Decks by Tomochika Hara
See All by Tomochika Hara
Swiftでつくるファミコンエミュレータのススメ
thara
3
2.3k
モバイルゲーム開発と Google App Engine
thara
0
370
GCPとAWSの比較
thara
0
130
Dart in なごやまつり
thara
0
57
Dartの基本
thara
0
71
Dart言語仕様 Pick-up
thara
0
590
Future & Stream in Dart
thara
0
470
Other Decks in Technology
See All in Technology
ABEJA FIRST GUIDE for Software Engineers
abeja
0
3.2k
「データ無い! 腹立つ! 推論する!」から 「データ無い! 腹立つ! データを作る」へ チームでデータを作り、育てられるようにするまで / How can we create, use, and maintain data ourselves?
moznion
8
4.5k
【M3】攻めのセキュリティの実践!プロアクティブなセキュリティ対策の実践事例
axelmizu
0
170
[mercari GEARS 2025] なぜメルカリはノーコードを選ばなかったのか? 社内問い合わせ工数を60%削減したLLM活用の裏側
mercari
PRO
0
130
Rubyist入門: The Way to The Timeless Way of Programming
snoozer05
PRO
7
520
Perlの生きのこり - YAPC::Fukuoka 2025
kfly8
0
120
なぜThrottleではなくDebounceだったのか? 700並列リクエストと戦うサーバーサイド実装のすべて
yoshiori
13
4.7k
AIエージェントによるエンタープライズ向けスライド検索!
shibuiwilliam
4
560
LINEヤフー バックエンド組織・体制の紹介
lycorptech_jp
PRO
0
810
AI × クラウドで シイタケの収穫時期を判定してみた
lamaglama39
1
360
Javaコミュニティの歩き方 ~参加から貢献まで、すべて教えます~
tabatad
0
130
重厚長大企業で、顧客価値をスケールさせるためのプロダクトづくりとプロダクト開発チームづくりの裏側 / Developers X Summit 2025
mongolyy
0
150
Featured
See All Featured
Imperfection Machines: The Place of Print at Facebook
scottboms
269
13k
Raft: Consensus for Rubyists
vanstee
140
7.2k
GraphQLとの向き合い方2022年版
quramy
49
14k
A Modern Web Designer's Workflow
chriscoyier
697
190k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
46
7.8k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
10
670
Product Roadmaps are Hard
iamctodd
PRO
55
12k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
54k
[RailsConf 2023] Rails as a piece of cake
palkan
57
6.1k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
132
19k
Learning to Love Humans: Emotional Interface Design
aarron
274
41k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Transcript
Dart VMと Optional Typing tomochikahara @zetta1985
Agenda • Source Code VM • Isolates • Optional Typing
※ パフォーマンスもウリだけど、今回は語りません、というか語れません 低レイヤの詳しいことは nothingcosmosさんの Dart VM Advent Calendarが詳しい(2012年末時点である事に注意)
Source Code VM Why not Bytecode VM?
JITコンパイル Source Code VM Source Code アセンブラ 中間表現 抽象構文木 Byte
Code VM JITコンパイル コンパイル Source Code アセンブラ 中間表現 抽象構文木
JITコンパイル Source Code VM Source Code アセンブラ 中間表現 抽象構文木 •
コーディング後のコンパイ ル作業が不要 ◦ LL - likeな開発 • 言語に特化した最適化 ◦ 末尾再帰最適化 • 中間表現のカプセル化 ◦ 進化させやすい ◦ 後方互換性の範囲
Isolates Why not Bytecode VM?
• ErlangのActorが源流? • 共有メモリを持たない ◦ top level variableもisolate単位 ◦ full
GCもisolate単位 ◦ 複数isolate間での状態管理が不要 • Message Passing ◦ Object snapshot ◦ SendPortとReceivePortのみで連携 isolates ?
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 送信
Optional Typing
Optional Typing = 任意型付け • 型を指定してもいいし、しなくてもいい • 型指定があってもなくても、動作に影響しない • Production
Modeなら、LLとほぼ同じ ◦ 型指定無しで書いて、即実行 ◦ 但しREPLは無い
• コーディングから実行までの時間短縮 ◦ コンパイル手順が不要 & コンパイル自体の時間短縮が必要 ◦ Web(GUI)アプリ開発では特に重要 ▪ GWTでの反省?
なぜ Optional typing なのか? • 言語仕様とType Systemを疎結合に ◦ Type Systemに言語仕様が依存すると 言語自体の進化を妨げる
Optional Typingの背景
Pluggable Type System • 現Dart言語設計者 Gilad Bracha氏の発案(2004) • Gilad Bracha氏
◦ Java言語仕様 ◦ Java仮想マシン仕様 ◦ Smalltalk ◦ Newspeak ※ 他にもJoshua BlochがDartの言語仕様に関わる。 Javaっぽくなるのは必然?
Pluggable Type System • 言語とType System の相互依存性の排除 ◦ 便利なType System
は言語に深く依存する ◦ SemanticsもType Systemに依存すると発展を阻害 ▪ Cast, Overloading, Accessibility • Modularityの向上による言語とType System の独自進化 ◦ Type Systemを進化させやすい ▪ 動作しているコードに型は影響しないため • 最も自然なType System ◦ 型付きラムダ計算 ▪ 型が式の評価に影響を与えない
静的 vs 動的型付け 論争の終焉がここにある ※ 釣りです
そして Multiple Type Systemへ
参考 http://www.dartlang.org/ http://nothingcosmos.github.io/DartVM/index.html http://bracha.org/pluggable-types.pdf