source code of dart

19
Source Code of Dart Outline ソースコードの構成 Server の構成 Client の構成 最新の状況 2013/08/03 Shinjuku.dart 2nd nothingcosmos <[email protected]>

Upload: nothingcosmos

Post on 13-Jan-2015

11.346 views

Category:

Technology


3 download

DESCRIPTION

Dart VM and dart2js and dartium

TRANSCRIPT

Page 1: Source Code of Dart

Source Code of Dart

Outline ソースコードの構成

Serverの構成 Clientの構成 最新の状況

2013/08/03 Shinjuku.dart 2nd

nothingcosmos <[email protected]>

Page 2: Source Code of Dart

関連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の公式ページ

Page 3: Source Code of Dart

ソースコードのディレクトリ

dart

+ sdk/lib

+ sdk/lib/_internal

+ pkg

+ tests

+ samples

+ compiler

+ editor

dart/runtime

+ bin

+ include

+ lib

+ platform

+ vm

+ tests/vm

Page 4: Source Code of Dart

ソースコードの構成

dart

+ sdk/lib

+ pkg

+ tests

+ samples

Dartは公式ページに情報が揃っている。もしくはここのサンプルコードを見るのが良いかも下手にぐぐると古い情報、動かないコードが多い

TOPのディレクトリ

SDKのライブラリ各種 (dart:xxx)

SDKの標準パッケージ

SDKのテストコード

SDKのサンプル集

Page 5: Source Code of Dart

ソースコードの構成 (処理系 )

dart

+ compiler  @Java  dartanalyzer

+ editor       @Java  eclipse plugin と indexer

+ sdk/lib/_internal/compiler  @Dart  dart2js

+ runtime    @C++  Dart VM

Clientサイドは dart2jsのコードを参照ServerサイドはDart VMのコードを参照

Page 6: Source Code of Dart

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用のシンボル

Page 7: Source Code of Dart

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

Page 8: Source Code of Dart

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が担当する計算やリソース管理

Page 9: Source Code of Dart

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 なぜ分かれているのか

Page 10: Source Code of 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連携用

Page 11: Source Code of Dart

Clientの構成 (dartium)

Bindings (Dart API)

Dart VM

dartium/src/third_party/WebKit/Source/bindings/dartdartium/src/third_party/WebKit/Source/bindings/v8

Page 12: Source Code of Dart

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

Page 13: Source Code of Dart

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の違い

Page 14: Source Code of Dart

いろんなブラウザ (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と共通

Page 15: Source Code of Dart

いろんなブラウザ (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

ブラウザ共通の境界

Page 16: Source Code of Dart

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;}

Page 17: Source Code of Dart

最新の状況 (Dart)

7月に beta版 (M5)をリリース。

Dartの言語仕様と Server APIは安定。

Breaking changesは減ってきたよね?

Dart始めるなら今でしょ。 最近は Dromaeoや Dromaeo.dartでチューニング 性能出すための注意点も公開されている。

http://www.dartlang.org/articles/numericcomputation/ 機能追加の issueは今がチャンスだと思う。

Page 18: Source Code of Dart

最新の状況 (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

Page 19: Source Code of Dart

最新の状況 (dart2js と dartium)

Dartの仕様→ dart2jsの仕様→ JavaScriptの仕様

正直ハマりどころだと思う

dart2jsの仕様、注意点、ガイドライン等一切不明。

今は plymer.dart と angler.dartをたべて

注意点の洗い出しや、仕様を調整中なのでは?

http://build.chromium.org/p/client.dart/console

dartium/firefox/chrome/safari/ie9/ie10で確認