More Related Content Similar to Source Code of Dart (20) More from nothingcosmos (6) Source Code of Dart2. 関連 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 用のシンボル
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/numericcomputation/
機能追加の 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 で確認