Source Code of Dart

11,866 views

Published on

Dart VM and dart2js and dartium

Published in: Technology
0 Comments
5 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
11,866
On SlideShare
0
From Embeds
0
Number of Embeds
10,364
Actions
Shares
0
Downloads
4
Comments
0
Likes
5
Embeds 0
No embeds

No notes for slide

Source Code of Dart

  1. 1. Source Code of Dart Outline  ソースコードの構成  Server の構成  Client の構成  最新の状況 2013/08/03 Shinjuku.dart 2nd nothingcosmos <nothingcosmos@gmail.com>
  2. 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 の公式ページ
  3. 3. ソースコードのディレクトリ  dart + sdk/lib + sdk/lib/_internal + pkg + tests + samples + compiler + editor  dart/runtime + bin + include + lib + platform + vm + tests/vm
  4. 4. ソースコードの構成  dart + sdk/lib + pkg + tests + samples Dart は公式ページに情報が揃っている。 もしくはここのサンプルコードを見るのが良いかも 下手にぐぐると古い情報、動かないコードが多い TOP のディレクトリ SDK のライブラリ各種 (dart:xxx) SDK の標準パッケージ SDK のテストコード SDK のサンプル集
  5. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 17. 最新の状況 (Dart)  7 月に beta 版 (M5) をリリース。 Dart の言語仕様と Server API は安定。 Breaking changes は減ってきたよね? Dart 始めるなら今でしょ。  最近は Dromaeo や Dromaeo.dart でチューニング  性能出すための注意点も公開されている。 http://www.dartlang.org/articles/numeric­computation/  機能追加の issue は今がチャンスだと思う。
  18. 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. 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 で確認

×