source code of dart
DESCRIPTION
Dart VM and dart2js and dartiumTRANSCRIPT
Source Code of Dart
Outline ソースコードの構成
Serverの構成 Clientの構成 最新の状況
2013/08/03 Shinjuku.dart 2nd
nothingcosmos <[email protected]>
関連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/libruntime/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/*.dartruntime/bin/*.dart
sdk/lib/ioRuntime
runtime/libruntime/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/*.dartruntime/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/dartdartium/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_glimport '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 WebIDLfile: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群
JavaScriptEngine
out.jsout.js.mapout.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群
JavaScriptEngine
out.jsout.js.mapout.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_glimport '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/numericcomputation/ 機能追加の 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で確認