About dart

1,369 views

Published on

2013 8 24 LLまつり発表資料に加筆修正

0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,369
On SlideShare
0
From Embeds
0
Number of Embeds
9
Actions
Shares
0
Downloads
7
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

About dart

  1. 1. About Dart 8/24/2013 @ntaoo
  2. 2. ● 小規模~大規模のWebApp開発に対応 ● ネイティブ(モバイル)アプリに対抗 ● 独自のVM(DartVM)で動き、JSにコンパイル可 能 ● DartVMではV8の2倍以上、コンパイルされた JSでも人間が書くコードよりも高速。 https://www.dartlang.org/performance/ ● JSの資産を利用可能(制限あり) ● ブラウザでもサーバーでも動作 ● 美しい言語仕様とツールサポートによる生産性 の向上 なぜDartか
  3. 3. Dartとはなにか ● 動的型付け言語だが、プログラマが任意に型情報を付加で きる。(Dynamic Typed Language with Optional Type Annotation) -> 可読性の向上、ドキュメント、IDEによる型 チェック、補完、型推論等サポートの恩恵 ● クラスベース、単一継承のOOP (Class Based OOP with Single Inheritance) ● Lexical Scoped Function (Lexical this) and Closures that = this; self = thisとか不要 ● その他、JSのBad Partsからの解放 ● クロスブラウザの高効率JSコードへのコンパイル。Dart2js によるJSコンパイル、concat、minify、source map。
  4. 4. Dartとはなにか ● Source Code VM によるLLライクな開発サイクル。(No compile step) ● 豊富な標準ライブラリ。Mixin, Future(Promise) based async and streams, Mirror Based Reflection, Isolates, Lazy evaluation Iterable, Method Cascades, BDD styled test library… ● Pub (like Ruby’s Bundler) ● DartEditor (DartのIDE) ● 詳しくは公式サイトの豊富なドキュメントを参照。 https://www.dartlang.org/ https://www.dartlang.org/articles/ ● DartとJS,C#,Pythonのコード比較 http://synonym.dartlang.org/
  5. 5. 影響 ● Syntax from JavaScript and C# ● Object Model from Smalltalk ● Optional Types: Strongtalk ● Isolates: Erlang JS開発者はもちろん、それよりもC#、 Java開発者などOOPの人たちがより馴染み やすい印象。 シンプルな言語仕様で、学びやすく、書きやすく読みやすい実用言語。機能は一旦 入れると取り去るのが難しいので、有用性が広く認められたもののみを慎重に取り入 れるスタイル。シンプルさは生産性に大きく貢献する。有効そうな機能でもそれにより 言語の複雑性が増してしまうのを避ける。 関数型言語の特徴の取り込みに関しては慎重(tuple,non nullable type,pattern matching,option型など意図的に未採用。パラダイムの相違、シンプルさと一貫性の 重視?)。関数型言語畑の人からは批判も。 Dartとはなにか
  6. 6. ライブラリピックアップ ● Html Library(instead of jQuery) jQueryを使用する必要はない。より整理されたAPI ● Future and Streams Promiseベースの非同期処理ライブラリ ● Iterables (lazy evaluation by default) ● Mirrors 実行効率を阻害しないリフレクション機構 ● Unit Test BDDスタイルのテストライブラリ ● Web UI, Polymer.dart ● JS (js-interop)
  7. 7. dart:html 公式ガイド https://www.dartlang.org/articles/improving-the- dom/ CSS セレクタによるquery Element elem1 = query('#an-id'); // Find an element by id (an-id). Element elem2 = query('.a-class'); // Find an element by class (a-class). List<Element> elems1 = queryAll('div'); // Find all elements by tag (<div>). List<Element> elems2 = queryAll('input[type="text"]'); // Find all text inputs. 一貫したAPI [JS] elem.hasChildNodes(); [Dart] elem.nodes.isEmpty; [JS] elem.firstChild(); [Dart] elem.nodes[0]; [JS] elem.appendChild(child); [Dart] elem.nodes.add(child);
  8. 8. Web UI、 Polymer.dart Web UI Web ComponentsのPolyfillとして開発 UIコンポーネントの標準化 コンパイルステップが入るのが煩雑(当時はmirrorがDart2jsに未実装だったた め) bleeding edgeはアップデートするたびに破壊的変更により動かなくなる(今年2 月に試した際の話)。 Routing systemとの統合がされる予定だったが… Polymer.dart Polymer.jsとPolymer.dartが発表(5月Google I/O) それなりに安定してきたWeb UIがPolymer.dartにport。それに伴いPre alpha に戻る… 触っていて楽しい。将来に期待大。 サンプル https://github.com/sethladd/dart-polymer-dart-examples
  9. 9. JSライブラリ(JS-interop) JS資産を利用可能 基本Dartのエコシステムで開発し、必要ならばこのライブラリを利用する。twitter API とか。bootstrapのJSをDartから使いたいという要望にも対応できる(はず)。 別にDart->JSのコードと既存のJSのコードが併存しても問題ない? Bootstrap2のJSをWeb UIでDartにportした例 http://dart-lang.github.io/widget.dart/ Dartからbackbone.jsを使いたいといった深いJS依存の用途はNG。 https://www.dartlang.org/articles/js-dart-interop/
  10. 10. Browser Support モダンブラウザの最新版と一つ前のバー ジョンをサポート。IE8はサポートしない。 android browserは?-> Chromeを入れ るべきとの回答。 firefox for androidは? -> 不明。
  11. 11. Dart2jsコンパイラのバグ? バグはDart Teamに報告して対応してもらう。 新し目の機能(mixin, mirrorとか)に関してはたまにバグ報告有 り。 全体的には安定している。 基本的にコンパイル後のJSは読むものではない。1対1でトラン スコードされている部分はあるがヘルパーメソッドが多数生成さ れていて読むのが辛い。 ソースマップがあるので、対応するDartコードの箇所は特定で きる。
  12. 12. Blossomという会社が、自社開発のProductマネジメントソフトを JSからDartに移行したとアナウンス。 http://news.dartlang.org/2013/04/why-blossom-is-switching- to-dart.html Dartendo(Dartendoでググる) ゲーム、ブラウザIDE等々 実際にクロスブラウザでコンパイルされたJSが動作。 事例
  13. 13. まとめ 触っていて楽しい。読みやすく書きやすい。速い。 まだベータ版。破壊的変更についていく必要あり。今年中にstable宣言? 現時点ではJSのMVCフレームワーク+エコシステム > Dart という判断。 仕事での採用はまだ正当化できない。 個人でWebAppを作ってみる。 Dartのエコシステムは黎明期。Grunt,Yeoman,Sprocketsのようなツールがほしい。 SPA(Single Page Web App) + Pjax, isomorphic webappへの可能性。 Chrome Packaged App Try Dart! http://try.dartlang.org/ https://www.dartlang.org/

×