SlideShare uma empresa Scribd logo
1 de 19
Baixar para ler offline
Source Code of Dart
Outline
 ソースコードの構成
 Server の構成
 Client の構成
 最新の状況
2013/08/03 Shinjuku.dart 2nd
nothingcosmos <nothingcosmos@gmail.com>
関連 URL
 http://code.google.com/p/dart/
Dart の google project
 http://code.google.com/p/dart/wiki/GettingTheSource
ソースコードの取得方法
 http://api.dartlang.org/docs/releases/latest/index.html
Dart API Reference
 http://www.dartlang.org/
Dart の公式ページ
ソースコードのディレクトリ
 dart
+ sdk/lib
+ sdk/lib/_internal
+ pkg
+ tests
+ samples
+ compiler
+ editor
 dart/runtime
+ bin
+ include
+ lib
+ platform
+ vm
+ tests/vm
ソースコードの構成
 dart
+ sdk/lib
+ pkg
+ tests
+ samples
Dart は公式ページに情報が揃っている。
もしくはここのサンプルコードを見るのが良いかも
下手にぐぐると古い情報、動かないコードが多い
TOP のディレクトリ
SDK のライブラリ各種 (dart:xxx)
SDK の標準パッケージ
SDK のテストコード
SDK のサンプル集
ソースコードの構成 ( 処理系 )
 dart
+ compiler  @Java  dartanalyzer
+ editor       @Java  eclipse plugin と indexer
+ sdk/lib/_internal/compiler  @Dart  dart2js
+ runtime    @C++  Dart VM
Client サイドは dart2js のコードを参照
Server サイドは Dart VM のコードを参照
Server の構成 (Dart VM)
 dart/runtime
+ bin
+ include
+ lib
+ platform
+ vm
+ vm/*_ia32
 patch/natives
BUILTIN と IO を定義
Dart VM の API を定義
sdk/lib と連携するレイヤ
OS 抽象のレイヤ
VM の本体
arch 依存の定義
dispatch 用のシンボル
runtime/lib
runtime/bin
BOOTSTRAP_
NATIVES
Server の構成 (Dart VM)
runtime/platform
OS(Linux, Windows,
MacOS, Android)
ISA(arch)
ia32/x64/arm/mips
runtime/vm
runtime/
include
sdk/lib
IO_NATIVES
runtime/vm/os
patch_class
runtime/lib/*.dart
runtime/bin/*.dart
sdk/lib/io
Runtime
runtime/lib
runtime/bin
BOOTSTRAP_
NATIVES
Server の構成 (Dart VM)
runtime/platform
OS(Linux, Windows,
MacOS, Android)
ISA(arch)
ia32/x64/arm/mips
runtime/vm
runtime/
include
sdk/lib
IO_NATIVES
runtime/vm/os
patch_class
runtime/lib/*.dart
runtime/bin/*.dart
sdk/lib/io
I/O や Network
並行処理
Dart の世界
Debugger で
追える境界
C++ の境界
Native Extensions
シンボルを定義
VM が担当する
計算やリソース管理
Client の構成 (dart2js/dartium)
 Client 環境は sdk/lib/html を使用可能
chrome,  html,  indexed_db,  js,  svg,  typed_data
web_audio,  web_gl,  web_sql
 ブラウザ非依存の API のサブディレクトリ
sdk/lib/web_gl/dartium/web_gl_dartium.dart
sdk/lib/web_gl/dart2js/web_gl_dart2js.dart
 なぜ分かれているのか
dartium
Client の構成 (dartium)
dart runtime
sdk/libsdk/lib/html
Auto-generated library
Web IDL
runtime/
include
native
symbol
dartium で定義された
シンボルを Native Extensions
を使用して直接呼出て連携する。
dartium からの制御は
include で定義された
API 経由で
dart runtime に指示
標準化された API を
IDL から自動生成
dartium 連携用
Client の構成 (dartium)
Bindings (Dart API)
Dart VM
dartium/src/third_party/WebKit/Source/bindings/dart
dartium/src/third_party/WebKit/Source/bindings/v8
file:sdk/lib/web_gl/dartium/web_gl_dartium.dart
// DO NOT EDIT
// Auto-generated dart:web_gl library.
//dart.dom.web_gl
import 'dart:collection';
import 'dart:_collection-dev' hide deprecated;
import 'dart:html';
import 'dart:html_common';
import 'dart:typed_data';
import 'dart:async';
import 'dart:nativewrappers';
@DocsEditable()
@DomName('WebGLLoseContext')
// http://www.khronos.org/registry/webgl/extensions/WEBGL_lose_context/
@Experimental()
class LoseContext extends NativeFieldWrapperClass1 {
@DomName('WebGLLoseContext.loseContext')
@DocsEditable()
void loseContext() native "WebGLLoseContext_loseContext_Callback";
@DomName('WebGLLoseContext.restoreContext')
@DocsEditable()
void restoreContext() native "WebGLLoseContext_restoreContext_Callback";
}
file:sdk/lib/_internal/libraries.dart
"nativewrappers": const LibraryInfo(
"html/dartium/nativewrappers.dart",
category: "Client",
implementation: true,
documented: false,
platforms: VM_PLATFORM),
//dartium WebIDL
file:dart/third_party/WebCore/core/html/
canvas/WebGLLoseContext.idl
Client の構成 (dart2js)
 Dart VM が入っていないブラウザにも対応
 Dart から JavaScript + source map を生成
 dartium と dart2js の挙動の違いに注意
Dart の仕様→ dart2js の仕様→ JavaScript の仕様
int の仕様の違いが大きいかも
 Dart VM ­­throw_on_javascript_int_overflow=true
int が 53/54bit に収まらないときに例外を投げる
dart2js では、 dart の int と javascript の int の違い
いろんなブラウザ (Dart VM はいってないよ )
Client の構成 (dart2js)
dart2js
sdk/libsdk/lib/html
Auto-generated library
Web IDL
標準化された API 群
JavaScript
Engine
out.js
out.js.map
out.js.deps
Dart から JavaScript に変換
deps と source map
標準化された API を
IDL から自動生成
標準のシンボル
dartium
と共通
いろんなブラウザ (Dart VM はいってないよ )
Client の構成 (dart2js)
dart2js
sdk/libsdk/lib/html
Auto-generated library
Web IDL
標準化された API 群
JavaScript
Engine
out.js
out.js.map
out.js.deps
標準化された API は IDL で定義
IDL → Dart → JavaScript
→ JavaScript Engine から叩く
ブラウザが制御するのは
JavaScript Engine
ブラウザ共通の境界
file:sdk/lib/web_gl/dart2js/web_gl_dart2js.dart
// DO NOT EDIT - unless you are editing documentation as per:
// https://code.google.com/p/dart/wiki/ContributingHTMLDocumentation
// Auto-generated dart:web_gl library.
//dart.dom.web_gl
import 'dart:collection';
... 省略
import 'dart:_js_helper' show Creates, JSName, Null, Returns, convertDartClosureToJS;
import 'dart:_foreign_helper' show JS;
import 'dart:_interceptors' show Interceptor, JSExtendableArray;
@DocsEditable()
@DomName('WebGLLoseContext')
// http://www.khronos.org/registry/webgl/extensions/WEBGL_lose_context/
@Experimental()
class LoseContext extends Interceptor native "WebGLLoseContext" {
@DomName('WebGLLoseContext.loseContext')
@DocsEditable()
void loseContext() native;
@DomName('WebGLLoseContext.restoreContext')
@DocsEditable()
void restoreContext() native;
}
最新の状況 (Dart)
 7 月に beta 版 (M5) をリリース。
Dart の言語仕様と Server API は安定。
Breaking changes は減ってきたよね?
Dart 始めるなら今でしょ。
 最近は Dromaeo や Dromaeo.dart でチューニング
 性能出すための注意点も公開されている。
http://www.dartlang.org/articles/numeric­computation/
 機能追加の issue は今がチャンスだと思う。
最新の状況 (Dart VM)
 ARM と MIPS 対応をがんばっている。
mirror 系の API を大幅修正。
Bugfix も多め。
 UNIMPLEMENTED の個数を計算 (6/16 ­> 7/28)
ia32   7   ­>  6
x64    18  ­> 17
arm    79  ­> 23 (8 月中に完了しそうな勢い )
mips   117 ­> 75
最新の状況 (dart2js と dartium)
 Dart の仕様→ dart2js の仕様→ JavaScript の仕様
正直ハマりどころだと思う
 dart2js の仕様、注意点、ガイドライン等一切不明。
今は plymer.dart と angler.dart をたべて
注意点の洗い出しや、仕様を調整中なのでは?
 http://build.chromium.org/p/client.dart/console
dartium/firefox/chrome/safari/ie9/ie10 で確認

Mais conteúdo relacionado

Destaque (13)

101 lecture 11
101 lecture 11101 lecture 11
101 lecture 11
 
101 lecture 1
101 lecture 1101 lecture 1
101 lecture 1
 
Chertsey’s history
Chertsey’s historyChertsey’s history
Chertsey’s history
 
Quiz
QuizQuiz
Quiz
 
Eco 202 ch 30 the monetary system
Eco 202 ch 30 the monetary systemEco 202 ch 30 the monetary system
Eco 202 ch 30 the monetary system
 
E learning-basic guidelines to develop multimedia learning
E learning-basic guidelines to develop multimedia learningE learning-basic guidelines to develop multimedia learning
E learning-basic guidelines to develop multimedia learning
 
Black holes in galaxies and active galaxies
Black holes in galaxies and active galaxiesBlack holes in galaxies and active galaxies
Black holes in galaxies and active galaxies
 
Fpk present 2013
Fpk present 2013Fpk present 2013
Fpk present 2013
 
Creating Value with the Five Capitals
Creating Value with the Five CapitalsCreating Value with the Five Capitals
Creating Value with the Five Capitals
 
Creating Winning Advertising Via Link
Creating Winning Advertising Via LinkCreating Winning Advertising Via Link
Creating Winning Advertising Via Link
 
101 lecture 19 earnings and discrimination
101 lecture 19 earnings and discrimination101 lecture 19 earnings and discrimination
101 lecture 19 earnings and discrimination
 
Presentation1
Presentation1Presentation1
Presentation1
 
Real Estate Market Report for The Woodlands, Tx
Real Estate Market Report for The Woodlands, TxReal Estate Market Report for The Woodlands, Tx
Real Estate Market Report for The Woodlands, Tx
 

Semelhante a Source Code of Dart

パフォーマンス計測Ciサービスを作って得た知見を共有したい
パフォーマンス計測Ciサービスを作って得た知見を共有したいパフォーマンス計測Ciサービスを作って得た知見を共有したい
パフォーマンス計測Ciサービスを作って得た知見を共有したい
zaru sakuraba
 
Dalvik仮想マシンのアーキテクチャ 改訂版
Dalvik仮想マシンのアーキテクチャ 改訂版Dalvik仮想マシンのアーキテクチャ 改訂版
Dalvik仮想マシンのアーキテクチャ 改訂版
Takuya Matsunaga
 
CommunityOpenDay2012名古屋セッション資料
CommunityOpenDay2012名古屋セッション資料CommunityOpenDay2012名古屋セッション資料
CommunityOpenDay2012名古屋セッション資料
Shinichiro Isago
 

Semelhante a Source Code of Dart (20)

2014 dart flight school in Tokyo
2014 dart flight school in Tokyo2014 dart flight school in Tokyo
2014 dart flight school in Tokyo
 
DartVM on Android
DartVM on AndroidDartVM on Android
DartVM on Android
 
Go 製リアルタイムサーバーの Kubernetes での運用について
Go 製リアルタイムサーバーの  Kubernetes での運用についてGo 製リアルタイムサーバーの  Kubernetes での運用について
Go 製リアルタイムサーバーの Kubernetes での運用について
 
Server Side Dart
Server Side DartServer Side Dart
Server Side Dart
 
Android Studioの魅力
Android Studioの魅力Android Studioの魅力
Android Studioの魅力
 
Dartでサーバレスサービス
DartでサーバレスサービスDartでサーバレスサービス
Dartでサーバレスサービス
 
Dart / Flutter コードファイルジェネレート入門
Dart / Flutter コードファイルジェネレート入門Dart / Flutter コードファイルジェネレート入門
Dart / Flutter コードファイルジェネレート入門
 
G * magazine 0
G * magazine 0G * magazine 0
G * magazine 0
 
Inside mobage platform
Inside mobage platformInside mobage platform
Inside mobage platform
 
WebIDLを見てみる
WebIDLを見てみるWebIDLを見てみる
WebIDLを見てみる
 
4章 Linuxカーネル - 割り込み・例外 4
 4章 Linuxカーネル - 割り込み・例外 4 4章 Linuxカーネル - 割り込み・例外 4
4章 Linuxカーネル - 割り込み・例外 4
 
パフォーマンス計測Ciサービスを作って得た知見を共有したい
パフォーマンス計測Ciサービスを作って得た知見を共有したいパフォーマンス計測Ciサービスを作って得た知見を共有したい
パフォーマンス計測Ciサービスを作って得た知見を共有したい
 
Xilinx SDSoC(2016.2)解体新書ソフトウェア編
Xilinx SDSoC(2016.2)解体新書ソフトウェア編Xilinx SDSoC(2016.2)解体新書ソフトウェア編
Xilinx SDSoC(2016.2)解体新書ソフトウェア編
 
Goで作って配布するAzureコマンドラインユーティリティ
Goで作って配布するAzureコマンドラインユーティリティGoで作って配布するAzureコマンドラインユーティリティ
Goで作って配布するAzureコマンドラインユーティリティ
 
Dalvik仮想マシンのアーキテクチャ 改訂版
Dalvik仮想マシンのアーキテクチャ 改訂版Dalvik仮想マシンのアーキテクチャ 改訂版
Dalvik仮想マシンのアーキテクチャ 改訂版
 
【de:code 2020】 そのロジック、IoT Edge で動きます - Azure IoT Edge 開発 Deep Dive
【de:code 2020】 そのロジック、IoT Edge で動きます - Azure IoT Edge 開発 Deep Dive【de:code 2020】 そのロジック、IoT Edge で動きます - Azure IoT Edge 開発 Deep Dive
【de:code 2020】 そのロジック、IoT Edge で動きます - Azure IoT Edge 開発 Deep Dive
 
IoT World Conference 2017 - Microsoft AI Platform
IoT World Conference 2017 - Microsoft AI PlatformIoT World Conference 2017 - Microsoft AI Platform
IoT World Conference 2017 - Microsoft AI Platform
 
Mvc conf session_2_shibamura
Mvc conf session_2_shibamuraMvc conf session_2_shibamura
Mvc conf session_2_shibamura
 
CommunityOpenDay2012名古屋セッション資料
CommunityOpenDay2012名古屋セッション資料CommunityOpenDay2012名古屋セッション資料
CommunityOpenDay2012名古屋セッション資料
 
Windows Azure Community Open Day 2012
Windows Azure   Community Open Day 2012Windows Azure   Community Open Day 2012
Windows Azure Community Open Day 2012
 

Mais de nothingcosmos (6)

Dart 1.1
Dart 1.1Dart 1.1
Dart 1.1
 
Dart VM Performance
Dart VM PerformanceDart VM Performance
Dart VM Performance
 
Adaptive optimization of JIT compiler
Adaptive optimization of JIT compilerAdaptive optimization of JIT compiler
Adaptive optimization of JIT compiler
 
OpenJDK HotSpot C1Compiler Overview
OpenJDK HotSpot C1Compiler OverviewOpenJDK HotSpot C1Compiler Overview
OpenJDK HotSpot C1Compiler Overview
 
X86opti01 nothingcosmos
X86opti01 nothingcosmosX86opti01 nothingcosmos
X86opti01 nothingcosmos
 
LLVM overview 20110122
LLVM overview 20110122LLVM overview 20110122
LLVM overview 20110122
 

Source Code of Dart

  • 1. Source Code of Dart Outline  ソースコードの構成  Server の構成  Client の構成  最新の状況 2013/08/03 Shinjuku.dart 2nd nothingcosmos <nothingcosmos@gmail.com>
  • 2. 関連 URL  http://code.google.com/p/dart/ Dart の google project  http://code.google.com/p/dart/wiki/GettingTheSource ソースコードの取得方法  http://api.dartlang.org/docs/releases/latest/index.html Dart API Reference  http://www.dartlang.org/ Dart の公式ページ
  • 5. ソースコードの構成 ( 処理系 )  dart + compiler  @Java  dartanalyzer + editor       @Java  eclipse plugin と indexer + sdk/lib/_internal/compiler  @Dart  dart2js + runtime    @C++  Dart VM Client サイドは dart2js のコードを参照 Server サイドは Dart VM のコードを参照
  • 6. Server の構成 (Dart VM)  dart/runtime + bin + include + lib + platform + vm + vm/*_ia32  patch/natives BUILTIN と IO を定義 Dart VM の API を定義 sdk/lib と連携するレイヤ OS 抽象のレイヤ VM の本体 arch 依存の定義 dispatch 用のシンボル
  • 7. runtime/lib runtime/bin BOOTSTRAP_ NATIVES Server の構成 (Dart VM) runtime/platform OS(Linux, Windows, MacOS, Android) ISA(arch) ia32/x64/arm/mips runtime/vm runtime/ include sdk/lib IO_NATIVES runtime/vm/os patch_class runtime/lib/*.dart runtime/bin/*.dart sdk/lib/io Runtime
  • 8. runtime/lib runtime/bin BOOTSTRAP_ NATIVES Server の構成 (Dart VM) runtime/platform OS(Linux, Windows, MacOS, Android) ISA(arch) ia32/x64/arm/mips runtime/vm runtime/ include sdk/lib IO_NATIVES runtime/vm/os patch_class runtime/lib/*.dart runtime/bin/*.dart sdk/lib/io I/O や Network 並行処理 Dart の世界 Debugger で 追える境界 C++ の境界 Native Extensions シンボルを定義 VM が担当する 計算やリソース管理
  • 9. Client の構成 (dart2js/dartium)  Client 環境は sdk/lib/html を使用可能 chrome,  html,  indexed_db,  js,  svg,  typed_data web_audio,  web_gl,  web_sql  ブラウザ非依存の API のサブディレクトリ sdk/lib/web_gl/dartium/web_gl_dartium.dart sdk/lib/web_gl/dart2js/web_gl_dart2js.dart  なぜ分かれているのか
  • 10. dartium Client の構成 (dartium) dart runtime sdk/libsdk/lib/html Auto-generated library Web IDL runtime/ include native symbol dartium で定義された シンボルを Native Extensions を使用して直接呼出て連携する。 dartium からの制御は include で定義された API 経由で dart runtime に指示 標準化された API を IDL から自動生成 dartium 連携用
  • 11. Client の構成 (dartium) Bindings (Dart API) Dart VM dartium/src/third_party/WebKit/Source/bindings/dart dartium/src/third_party/WebKit/Source/bindings/v8
  • 12. file:sdk/lib/web_gl/dartium/web_gl_dartium.dart // DO NOT EDIT // Auto-generated dart:web_gl library. //dart.dom.web_gl import 'dart:collection'; import 'dart:_collection-dev' hide deprecated; import 'dart:html'; import 'dart:html_common'; import 'dart:typed_data'; import 'dart:async'; import 'dart:nativewrappers'; @DocsEditable() @DomName('WebGLLoseContext') // http://www.khronos.org/registry/webgl/extensions/WEBGL_lose_context/ @Experimental() class LoseContext extends NativeFieldWrapperClass1 { @DomName('WebGLLoseContext.loseContext') @DocsEditable() void loseContext() native "WebGLLoseContext_loseContext_Callback"; @DomName('WebGLLoseContext.restoreContext') @DocsEditable() void restoreContext() native "WebGLLoseContext_restoreContext_Callback"; } file:sdk/lib/_internal/libraries.dart "nativewrappers": const LibraryInfo( "html/dartium/nativewrappers.dart", category: "Client", implementation: true, documented: false, platforms: VM_PLATFORM), //dartium WebIDL file:dart/third_party/WebCore/core/html/ canvas/WebGLLoseContext.idl
  • 13. Client の構成 (dart2js)  Dart VM が入っていないブラウザにも対応  Dart から JavaScript + source map を生成  dartium と dart2js の挙動の違いに注意 Dart の仕様→ dart2js の仕様→ JavaScript の仕様 int の仕様の違いが大きいかも  Dart VM ­­throw_on_javascript_int_overflow=true int が 53/54bit に収まらないときに例外を投げる dart2js では、 dart の int と javascript の int の違い
  • 14. いろんなブラウザ (Dart VM はいってないよ ) Client の構成 (dart2js) dart2js sdk/libsdk/lib/html Auto-generated library Web IDL 標準化された API 群 JavaScript Engine out.js out.js.map out.js.deps Dart から JavaScript に変換 deps と source map 標準化された API を IDL から自動生成 標準のシンボル dartium と共通
  • 15. いろんなブラウザ (Dart VM はいってないよ ) Client の構成 (dart2js) dart2js sdk/libsdk/lib/html Auto-generated library Web IDL 標準化された API 群 JavaScript Engine out.js out.js.map out.js.deps 標準化された API は IDL で定義 IDL → Dart → JavaScript → JavaScript Engine から叩く ブラウザが制御するのは JavaScript Engine ブラウザ共通の境界
  • 16. file:sdk/lib/web_gl/dart2js/web_gl_dart2js.dart // DO NOT EDIT - unless you are editing documentation as per: // https://code.google.com/p/dart/wiki/ContributingHTMLDocumentation // Auto-generated dart:web_gl library. //dart.dom.web_gl import 'dart:collection'; ... 省略 import 'dart:_js_helper' show Creates, JSName, Null, Returns, convertDartClosureToJS; import 'dart:_foreign_helper' show JS; import 'dart:_interceptors' show Interceptor, JSExtendableArray; @DocsEditable() @DomName('WebGLLoseContext') // http://www.khronos.org/registry/webgl/extensions/WEBGL_lose_context/ @Experimental() class LoseContext extends Interceptor native "WebGLLoseContext" { @DomName('WebGLLoseContext.loseContext') @DocsEditable() void loseContext() native; @DomName('WebGLLoseContext.restoreContext') @DocsEditable() void restoreContext() native; }
  • 17. 最新の状況 (Dart)  7 月に beta 版 (M5) をリリース。 Dart の言語仕様と Server API は安定。 Breaking changes は減ってきたよね? Dart 始めるなら今でしょ。  最近は Dromaeo や Dromaeo.dart でチューニング  性能出すための注意点も公開されている。 http://www.dartlang.org/articles/numeric­computation/  機能追加の issue は今がチャンスだと思う。
  • 18. 最新の状況 (Dart VM)  ARM と MIPS 対応をがんばっている。 mirror 系の API を大幅修正。 Bugfix も多め。  UNIMPLEMENTED の個数を計算 (6/16 ­> 7/28) ia32   7   ­>  6 x64    18  ­> 17 arm    79  ­> 23 (8 月中に完了しそうな勢い ) mips   117 ­> 75
  • 19. 最新の状況 (dart2js と dartium)  Dart の仕様→ dart2js の仕様→ JavaScript の仕様 正直ハマりどころだと思う  dart2js の仕様、注意点、ガイドライン等一切不明。 今は plymer.dart と angler.dart をたべて 注意点の洗い出しや、仕様を調整中なのでは?  http://build.chromium.org/p/client.dart/console dartium/firefox/chrome/safari/ie9/ie10 で確認