Inside frogc in Dart
   闇鍋プログラミング勉強会 2012/3/31




     gfx <gfuji@cpan.org>




               1
自己紹介

名前: hatena:gfx, github:gfx twitter:@__gfx__

職業:プログラマ

 スマホ向けのミドルウェアの開発など

   Objective-C, Java, JavaScript, ActionScript, Perl

 最近の興味はスマートフォンでのHTML5


                         2
本日のテーマ




  3
Dart


JavaScriptの置き換えを狙ったプログラミング言語

構文は (JavaScript + Java + C++)/3 + α

クラスベースのオブジェクト指向言語




                          4
Hello, Dart!
class HelloWorld {
    void say() {
        print("Hello, Dart world!");
    }
}
void main() {
    HelloWorld instance = new HelloWorld();
    instance.say();
}




                       5
発表資料



http://gfx.github.com/yaminabePG-2012-3-31/

スライドは後ほどSlideshareに上げます




                          6
なぜDartか




   7
JavaScript sucks

JavaScriptで大きなアプリケーションを書くのは難しい

 プロパティ名のtypoなどのコーディングミスを実行
 時まで検出できない

 ミスを防ぐためにJSLintのような仕組みが必要



              8
FAQ
CoffeeScriptと何が違う?

GWTとは何が違う?

速度は?

生産性は?

デバッグしにくいのでは?

                     9
Q. CoffeeScriptと何が違う?

CoffeeScriptのような徹底的な「記述量の削減」はそも
そも目指していない

型アノテーションにより動的型言語の欠点を緩和

っていうかCoffeeScriptで中規模∼大規模なWebアプリ
ケーション開発とか冗談でしょ?


               10
Q. GWTとは何が違う?
GWT: Google Web Toolkit (Java to JavaScript compiler)

JavaとJavaScriptというまったく異なる言語の間でのつ
じつま合わせがボトルネック

Dartの設計には最初からJavaScriptの仕様が織り込まれ
ているので相性がよい

さらにoperator overloadなどの糖衣構文もあり

                            11
Q. 速度は?
オーバーヘッドはあるが、そこらのLLよりずっと速い

普通のアプリケーションでJavaScriptの70-90%程度

 半年後くらいのfrogcを想定した予想値

基本的な言語仕様はJSとほぼ互換だからオーバーヘッ
ドは極めて少ない

 ただしHashMap、テメーはダメだ!
                12
Q. 生産性は?
JavaScriptと比べると書いていて気持ちがいい

ただし型推論のない静的型付け言語特有の二重型記述
地獄が…

 List< List<String> > table = new List< List<String> >();

型推論はおそらく検討中と思われる

 型推論が入らなければDartに未来はない

                            13
Q. デバッグしにくいのでは?
DartVMなら自然にデバッグできる

 Dartium (Dart Editorに同梱) でも同様

source mapに対応すればJS debuggerでもいける

 ステップ実行もたぶんできる

DartVM+実行時型チェックモードならむしろJSよりデ
バッグしやすい
                    14
今現在使い物になるか

未熟すぎてとても使えるレベルではない

そもそも仕様が固まっていない

2つの処理系(standalone VM & frogc)の差が無視できない

ライブラリがない

ベストプラクティスがない

                  15
言語処理系の話



Dart Editor (IDE and Dartium)

Dart SDK (CLI commands)




                            16
Dart SDK
frogc - Dartの処理系のひとつ

 Dartで書かれたDartコンパイラ

 DartプログラムをJavaScriptにコンパイルする

DartVM - Dartの処理系のひとつ

 frogcはこれによって実行される

                  17
frogc

これ以降「Dart処理系」とはfrogcのこと

Dart Editor (Eclipse-based IDE) でのJS生成に使われる

コマンドラインからも使用可能

frogc.dartはfrogcでコンパイルできない…



                    18
どのようにJSに変換するか

CLIのhelloworldは500行程度

400行のshootingは3000行程度

多くはランタイム/ライブラリによるもの

ロジックはほぼそのまま



                   19
コンパイル例

                Dart                 JavaScript

print(“Hello, world”);    print$(“Hello, world”);

                          for(var $$i = a.iterator();
for(var i in a) {
                          $$i.hasNext();){ var i = $$i.next();
                          Parent.prototype.definedInParent.
super.definedInParent()
                          call(this)
                          x + y (when num x, y)
x+y
                          $add(x, y) (when var x, y)


                         20
そんなことはどうでもいい
    Isolate
を知りたいんだオレは!


     21
Isolate
Actor model (shared nothing)のthread interface

frogcでの実装は3つ(Worker, timer, while loop)

  WebWorkerでは spawn-self hack で実行

ただしDartiumではすぐクラッシュするしfrogc+Chrome
でも挙動はあやしいしfrogc+node.jsでは動かないし全
然ダメ

                            22
Isolation of global state
すべてのグローバル変数・クラスは、JSレベルでは
global stateというオブジェクトのプロパティ

spawnするとこれをコピーして、functionオブジェクト
とglobal stateを一緒にqueueに突っ込むイメージ

そしてイベントループの中でqueueから取り出して実行

コンテキストスイッチは単に $globals = c.isolateStatics

                    23
Isolateは使えるの?
まともに動かせませんでした><

たとえば document.query(‘#foo’).innerHTML = “hoge” とか
どうなるの?

実装がダメダメすぎるのでまだ海のものとも山のもの
ともつかない

要はWebWorkerへのインターフェイスと考えればおk

                       24
Snapshot

起動高速化のための機能

frogcでは未実装

というかfrogcでどうやって実装するのか

manifestによるcacheと関数単位の遅延evalで高速化はで
きるかもしれないが…?


                25
Run Time Type Information
Run-Time Type InformationはほぼJSそのまま

 Dart VMだと値が型情報を持つ


C<T> はTの情報を持たない

 だからC<T>のメソッドでnew T()ができない

 当然 if(c is C<T>)もまともに動かない

doubleとintも区別なし
                     26
まとめ


frogcが吐き出すJSがバケモノというのは都市伝説

 肥大化は主にランタイムとライブラリのせい

IsolateはWeb Workerを抽象化したインターフェイス

あと1年くらいすれば普通に仕事でも使えそう

                27
JavaScript sucks.

  Dart rocks.


        28

More Related Content

PDF
怪しいWindowsプログラミング
PDF
Dive into RTS - another side
PPTX
EWD 3トレーニングコース#22 GlobalストレージのJavaScript用抽象化-(c) ドキュメントを渡り歩く
PDF
Boost.勉強会#19東京 Effective Modern C++とC++ Core Guidelines
PPTX
EWD 3トレーニングコース#22 GlobalストレージのJavaScript用抽象化-(c) ドキュメントを渡り歩く
PDF
New features of Groovy 2.0 and 2.1
PPTX
EWD 3トレーニングコース#19 JavaScriptからGlobalストレジにアクセスする
PPTX
わんくまT78 mfcを始めようとしてみた
怪しいWindowsプログラミング
Dive into RTS - another side
EWD 3トレーニングコース#22 GlobalストレージのJavaScript用抽象化-(c) ドキュメントを渡り歩く
Boost.勉強会#19東京 Effective Modern C++とC++ Core Guidelines
EWD 3トレーニングコース#22 GlobalストレージのJavaScript用抽象化-(c) ドキュメントを渡り歩く
New features of Groovy 2.0 and 2.1
EWD 3トレーニングコース#19 JavaScriptからGlobalストレジにアクセスする
わんくまT78 mfcを始めようとしてみた

What's hot (20)

PDF
GoCon 2015 Summer GoのASTをいじくって新しいツールを作る
PDF
C++勉強会
PDF
基礎からのCode Contracts
KEY
JJUG CCC 2012 Real World Groovy/Grails
PDF
Synthesijer jjug 201504_01
PPTX
EWD 3トレーニングコース#19 JavaScriptからGlobalストレジにアクセスする
PDF
coma Creators session vol.2
PDF
覚醒!JavaScript
PDF
知って得するC#
PDF
Markup Template Engine introduced Groovy 2.3
PDF
unique_ptrにポインタ以外のものを持たせるとき
PPTX
競技プログラミングのためのC++入門
PPTX
T93 com入門
PPTX
EWD 3トレーニングコース#21 GlobalストレージのJavaScript用抽象化-(b) JavaScriptの永続オブジェクト
PDF
TruffleSqueakの紹介
PDF
GContractsの基礎
PDF
ちょっと詳しくJavaScript 第4回【スコープとクロージャ】
PDF
Webデザイン 第10回:HTML5実践 Three.jsで3Dプログラミング
PDF
20130819 jjugnslt
PDF
Synthesijer zynq qs_20150316
GoCon 2015 Summer GoのASTをいじくって新しいツールを作る
C++勉強会
基礎からのCode Contracts
JJUG CCC 2012 Real World Groovy/Grails
Synthesijer jjug 201504_01
EWD 3トレーニングコース#19 JavaScriptからGlobalストレジにアクセスする
coma Creators session vol.2
覚醒!JavaScript
知って得するC#
Markup Template Engine introduced Groovy 2.3
unique_ptrにポインタ以外のものを持たせるとき
競技プログラミングのためのC++入門
T93 com入門
EWD 3トレーニングコース#21 GlobalストレージのJavaScript用抽象化-(b) JavaScriptの永続オブジェクト
TruffleSqueakの紹介
GContractsの基礎
ちょっと詳しくJavaScript 第4回【スコープとクロージャ】
Webデザイン 第10回:HTML5実践 Three.jsで3Dプログラミング
20130819 jjugnslt
Synthesijer zynq qs_20150316
Ad

Viewers also liked (10)

PDF
Spring 2013
PPTX
Cónicas 2°A
PDF
2013_Spring_ISSUU
DOCX
Proceso
PDF
Anexo vi evaluación del desempeño
PDF
Actividad 2.
KEY
Jsx language-notes
ODP
Let's use Xslate - Osdc.tw 2011
PDF
ルータでルータのプレゼンをした話。 ~# 技術解説
PDF
JSX - 公開から1年を迎えて
Spring 2013
Cónicas 2°A
2013_Spring_ISSUU
Proceso
Anexo vi evaluación del desempeño
Actividad 2.
Jsx language-notes
Let's use Xslate - Osdc.tw 2011
ルータでルータのプレゼンをした話。 ~# 技術解説
JSX - 公開から1年を迎えて
Ad

Similar to Inside frogc in Dart (20)

PDF
これからのJSの話をしよう ~jQueryで作るTwitterアプリ~ (Gunma.web #2 2010/10/9)
PDF
Grailsのススメ(仮)
PDF
どきっ!三行で作るランダムダンジョン!?~WEBもあるよ!~ - 2010/8/21 群馬Web研究会(勉強会)
PDF
Groovyで楽にSQLを実行してみよう
PDF
Web制作勉強会 #2
PDF
Flutterを体験してみませんか
PDF
Getting Started GraalVM (再アップロード)
PDF
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
PDF
PDF
ScalaでAndroidアプリ開発
PDF
明日から使えるgradle
PDF
Groovy Shell Scripting 2015
PDF
Node.jsでブラウザメッセンジャー
PDF
ClojureでElectronアプリを作ろう
PDF
JavaScript Tips 2015(PDF 版)
PDF
SDLoader SeasarCon 2009 Whire
PDF
Gws 20120521 gradle
PDF
Java/Androidセキュアコーディング
KEY
関ジャバ JavaOne Tokyo 2012報告会
PDF
Play framework 2.0のおすすめと1.2からのアップグレード
これからのJSの話をしよう ~jQueryで作るTwitterアプリ~ (Gunma.web #2 2010/10/9)
Grailsのススメ(仮)
どきっ!三行で作るランダムダンジョン!?~WEBもあるよ!~ - 2010/8/21 群馬Web研究会(勉強会)
Groovyで楽にSQLを実行してみよう
Web制作勉強会 #2
Flutterを体験してみませんか
Getting Started GraalVM (再アップロード)
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
ScalaでAndroidアプリ開発
明日から使えるgradle
Groovy Shell Scripting 2015
Node.jsでブラウザメッセンジャー
ClojureでElectronアプリを作ろう
JavaScript Tips 2015(PDF 版)
SDLoader SeasarCon 2009 Whire
Gws 20120521 gradle
Java/Androidセキュアコーディング
関ジャバ JavaOne Tokyo 2012報告会
Play framework 2.0のおすすめと1.2からのアップグレード

Inside frogc in Dart

Editor's Notes