SlideShare a Scribd company logo
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 で確認

More Related Content

PPTX
αποκτηστε νεεσ συνηθειεσ
PPSX
Visita de estudo a Lisboa
PPS
New Orleans
PPS
Ode à natureza !
PDF
OFERTAS C.08 2011
PPTX
Proficiency 2 astronomy science
PPS
Van Gogh
PPTX
1.1 alphabet.istock proofread
αποκτηστε νεεσ συνηθειεσ
Visita de estudo a Lisboa
New Orleans
Ode à natureza !
OFERTAS C.08 2011
Proficiency 2 astronomy science
Van Gogh
1.1 alphabet.istock proofread

Viewers also liked (13)

PDF
101 lecture 11
PDF
101 lecture 1
PPT
Chertsey’s history
PPTX
PDF
Eco 202 ch 30 the monetary system
PPTX
E learning-basic guidelines to develop multimedia learning
PPTX
Black holes in galaxies and active galaxies
PPTX
Fpk present 2013
PDF
Creating Value with the Five Capitals
PDF
Creating Winning Advertising Via Link
PDF
101 lecture 19 earnings and discrimination
PPT
Presentation1
PDF
Real Estate Market Report for The Woodlands, Tx
101 lecture 11
101 lecture 1
Chertsey’s history
Eco 202 ch 30 the monetary system
E learning-basic guidelines to develop multimedia learning
Black holes in galaxies and active galaxies
Fpk present 2013
Creating Value with the Five Capitals
Creating Winning Advertising Via Link
101 lecture 19 earnings and discrimination
Presentation1
Real Estate Market Report for The Woodlands, Tx
Ad

Similar to Source Code of Dart (20)

KEY
Inside frogc in Dart
PDF
15分でわかった気になるdart
PDF
Dartをはじめよう
PDF
磯野ー!Dartやろうぜー!
PDF
DartVM on Android
PDF
Server Side Dart
PDF
About dart
PDF
Dart / Flutter コードファイルジェネレート入門
PDF
サーバーサイドDartを試してみる
PDF
2014 dart flight school in Tokyo
PDF
はじめてのDart
PDF
Dart のコード自動生成の仕組みと、コード自動生成のパッケージを自作する方法について
PDF
Flutterを体験してみませんか
PDF
Dart 1.1
PDF
Dart言語の進化状況
PDF
Flutter_Forward_Extended_Kyoto-Keynote_Summary
PDF
Angular+Dart=より快適なSPA開発
PDF
Yet Another DLR for Silverlightの試作
PDF
Dartでサーバレスサービス
PDF
ぼく(たち)のかんがえた最新のJS開発環境 #scripty04
Inside frogc in Dart
15分でわかった気になるdart
Dartをはじめよう
磯野ー!Dartやろうぜー!
DartVM on Android
Server Side Dart
About dart
Dart / Flutter コードファイルジェネレート入門
サーバーサイドDartを試してみる
2014 dart flight school in Tokyo
はじめてのDart
Dart のコード自動生成の仕組みと、コード自動生成のパッケージを自作する方法について
Flutterを体験してみませんか
Dart 1.1
Dart言語の進化状況
Flutter_Forward_Extended_Kyoto-Keynote_Summary
Angular+Dart=より快適なSPA開発
Yet Another DLR for Silverlightの試作
Dartでサーバレスサービス
ぼく(たち)のかんがえた最新のJS開発環境 #scripty04
Ad

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 で確認