狠狠撸

狠狠撸Share 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

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