Suche senden
Hochladen
Callback DSL on Haxe
•
7 gefällt mir
•
3,661 views
Nobukazu Hanada
Folgen
Frontrend FukuokaでLTした資料です
Weniger lesen
Mehr lesen
Technologie
Diashow-Anzeige
Melden
Teilen
Diashow-Anzeige
Melden
Teilen
1 von 58
Jetzt herunterladen
Downloaden Sie, um offline zu lesen
Empfohlen
Hashicorpツールズ
Hashicorpツールズ
Uchio Kondo
20151121
20151121
Makoto Kishimoto
バイナリ解析入門
バイナリ解析入門
aksechack0001
C++ Now 2012 report
C++ Now 2012 report
Akira Takahashi
第7回 配信講義 計算科学技術特論A(2021)
第7回 配信講義 計算科学技術特論A(2021)
RCCSRENKEI
NHN techcon-20120519-fujimoto
NHN techcon-20120519-fujimoto
Masaki Fujimoto
第6回 配信講義 計算科学技術特論A(2021)
第6回 配信講義 計算科学技術特論A(2021)
RCCSRENKEI
JSerのためのHaxe入門
JSerのためのHaxe入門
Nobukazu Hanada
Empfohlen
Hashicorpツールズ
Hashicorpツールズ
Uchio Kondo
20151121
20151121
Makoto Kishimoto
バイナリ解析入門
バイナリ解析入門
aksechack0001
C++ Now 2012 report
C++ Now 2012 report
Akira Takahashi
第7回 配信講義 計算科学技術特論A(2021)
第7回 配信講義 計算科学技術特論A(2021)
RCCSRENKEI
NHN techcon-20120519-fujimoto
NHN techcon-20120519-fujimoto
Masaki Fujimoto
第6回 配信講義 計算科学技術特論A(2021)
第6回 配信講義 計算科学技術特論A(2021)
RCCSRENKEI
JSerのためのHaxe入門
JSerのためのHaxe入門
Nobukazu Hanada
Swift勉強会。はてなとかclosuresについて
Swift勉強会。はてなとかclosuresについて
Nobukazu Hanada
Swiftで、かなり微妙な型クラス
Swiftで、かなり微妙な型クラス
Nobukazu Hanada
Unity3dにおけるus c# boo比較
Unity3dにおけるus c# boo比較
Nobukazu Hanada
Asset bundleなどの、Unity3d基礎知識
Asset bundleなどの、Unity3d基礎知識
Nobukazu Hanada
Jenkinsのおっさんを眺めるだけ
Jenkinsのおっさんを眺めるだけ
Nobukazu Hanada
現在のWebフロントエンドの現状と愚痴と、それに対するHaxeフロントエンドライブラリMageについて
現在のWebフロントエンドの現状と愚痴と、それに対するHaxeフロントエンドライブラリMageについて
Nobukazu Hanada
sparksql-hive-bench-by-nec-hwx-at-hcj16
sparksql-hive-bench-by-nec-hwx-at-hcj16
Yifeng Jiang
Web socket and gRPC
Web socket and gRPC
TIS Inc
Yesod勉強会
Yesod勉強会
Hideyuki Tanaka
Packagist
Packagist
Yasuo Harada
括弧への異常な愛情 または私は如何にして心配するのを止めてCommon Lispを愛するようになったか
括弧への異常な愛情 または私は如何にして心配するのを止めてCommon Lispを愛するようになったか
m2ym
zxでシェルスクリプトから逃げよう ~javascriptでシェルを書く~
zxでシェルスクリプトから逃げよう ~javascriptでシェルを書く~
techan555
Weitere ähnliche Inhalte
Andere mochten auch
Swift勉強会。はてなとかclosuresについて
Swift勉強会。はてなとかclosuresについて
Nobukazu Hanada
Swiftで、かなり微妙な型クラス
Swiftで、かなり微妙な型クラス
Nobukazu Hanada
Unity3dにおけるus c# boo比較
Unity3dにおけるus c# boo比較
Nobukazu Hanada
Asset bundleなどの、Unity3d基礎知識
Asset bundleなどの、Unity3d基礎知識
Nobukazu Hanada
Jenkinsのおっさんを眺めるだけ
Jenkinsのおっさんを眺めるだけ
Nobukazu Hanada
現在のWebフロントエンドの現状と愚痴と、それに対するHaxeフロントエンドライブラリMageについて
現在のWebフロントエンドの現状と愚痴と、それに対するHaxeフロントエンドライブラリMageについて
Nobukazu Hanada
Andere mochten auch
(6)
Swift勉強会。はてなとかclosuresについて
Swift勉強会。はてなとかclosuresについて
Swiftで、かなり微妙な型クラス
Swiftで、かなり微妙な型クラス
Unity3dにおけるus c# boo比較
Unity3dにおけるus c# boo比較
Asset bundleなどの、Unity3d基礎知識
Asset bundleなどの、Unity3d基礎知識
Jenkinsのおっさんを眺めるだけ
Jenkinsのおっさんを眺めるだけ
現在のWebフロントエンドの現状と愚痴と、それに対するHaxeフロントエンドライブラリMageについて
現在のWebフロントエンドの現状と愚痴と、それに対するHaxeフロントエンドライブラリMageについて
Ähnlich wie Callback DSL on Haxe
sparksql-hive-bench-by-nec-hwx-at-hcj16
sparksql-hive-bench-by-nec-hwx-at-hcj16
Yifeng Jiang
Web socket and gRPC
Web socket and gRPC
TIS Inc
Yesod勉強会
Yesod勉強会
Hideyuki Tanaka
Packagist
Packagist
Yasuo Harada
括弧への異常な愛情 または私は如何にして心配するのを止めてCommon Lispを愛するようになったか
括弧への異常な愛情 または私は如何にして心配するのを止めてCommon Lispを愛するようになったか
m2ym
zxでシェルスクリプトから逃げよう ~javascriptでシェルを書く~
zxでシェルスクリプトから逃げよう ~javascriptでシェルを書く~
techan555
Ähnlich wie Callback DSL on Haxe
(6)
sparksql-hive-bench-by-nec-hwx-at-hcj16
sparksql-hive-bench-by-nec-hwx-at-hcj16
Web socket and gRPC
Web socket and gRPC
Yesod勉強会
Yesod勉強会
Packagist
Packagist
括弧への異常な愛情 または私は如何にして心配するのを止めてCommon Lispを愛するようになったか
括弧への異常な愛情 または私は如何にして心配するのを止めてCommon Lispを愛するようになったか
zxでシェルスクリプトから逃げよう ~javascriptでシェルを書く~
zxでシェルスクリプトから逃げよう ~javascriptでシェルを書く~
Callback DSL on Haxe
1.
Callback DSL on Haxe by
Technical Rockstars CTO @nobkz
2.
自己紹介 Technical Rockstars CTO tw
: @nobkz Haxe/JS/C#/Java/Objective-C++ 好きな言語:Lisp(Common Lisp, Gauche)/Haskell/ OCaml/Prolog 福岡Haxe勉強会主催
3.
Haxe?
4.
Haxe いろんな言語にコンパイルできる (to Flash,
C++, C#, JS, PHP, Java, NekoVM) 強力な型システム(型推論など) 強力なマクロ
5.
“これから HaxeでDSL作った話しをします” -@nobkz
6.
なぜHaxeでDSLを 実装したか?
7.
“ある日のことでした” -@nobkz
8.
“それはHaxeでnodeとか seleniumのテストを書いていました。” –@nobkz
9.
そいつは、いつのまにか ぶくぶくと大きくなってました。 @nobkz
10.
コールバック地獄例
11.
僕はコールバック地獄に 悩まされていました
12.
ある日のこと…
13.
僕は最高の3大エンタメ (まどまぎ、ボルテ、Scheme)の一つ、 Schemeを楽しんでいた。
14.
“ん?コールバックて CPSスタイルだよね….” –@nobkz
15.
CPSスタイル(Scheme)
16.
“そういえばHaskellに継続モナド ってあったよなぁ。” –@nobkz
17.
http://www.sampou.org/haskell/a-a-mon contmonad.html
18.
そして僕は気づいた
19.
“そうだ! 継続モナドを同様の仕組みで DSLを創れば良いんだ!” –@nobkz
20.
継続モナドの利用 コールバック地獄 -> CPSスタイルに似ている? コールバックを継続モナドで表現する それを、合成すれば良いんじゃないか?
21.
方針 1 . とりあえず、モナドの結合ができるようにする 2.
do記法をつくる 3. コールバックDSLをつくる
22.
そしていろいろあって
23.
実装しました。 (この点については 次回のHaxe勉強会で話します)
24.
結局できたもの
25.
Before
26.
Before
27.
After
28.
After
29.
なんということでしょう!
30.
結果 簡単になった! コールバックのネストが無くなった。 構文のノイズが無くなって読みやすい! ただ、ボイラープレートが残っている感。
31.
けどちょっとだけ、 実装の仕組みについて (時間が無ければ飛します)
32.
Monad?
33.
Monad 言語内DSLを構築するための仕組み モジュールの組み合せ方 背景に数学的な理論がある(圏論)
34.
Optionモナド作成
35.
Option(Maybe)型について Option(HaskellではMaybe)型をつくる data Maybe a
= Just a | Nothing Haxeではenumで実現
36.
HaxeのEnumについて enumはCの列挙体とはちょっとちがう コンストラクタがパラメータを持つことができる
37.
enumの例 enum MyNumber{ Zero; Plus(i:Int); Minus(i:Int); } ! var x
: MyNumber = Zero; var y : MyNumber = Plus(10); var z : MyNumber = Minus(10);
38.
EnumでOptionの実装 型パラメータとEnumでOptionを作った。 enum OptionDef<T>{ None; //
Nothing of Haskell Some(i:T); // Just of Haskell }
39.
returnとbind モナドで必要に関数は2つ Mが対象のデータ型だとする return :: A
-> M A >>= :: M A -> (A -> M B) -> M B これらの関数がモナド則を満すように実装する
40.
Haxeでのreturnとbind クラスメソッドとして実装する returnだと、返り値のreturnと混合するので、mPack とした。 >>=はmBindとした。
41.
Optionのreturnとbindの型定義 Option型のクラスをつくり、クラスメソッドとして 実装する Option.mPack<A> : A
-> OptionDef<A> Option.mBind<A,B> : OptionDef<A> -> ( A -> OptionDef<B> ) -> OptionDef<B>
42.
実装 class Option{ public static
function mPack <A>(a : A) : Option<A> return Some(a); ! public static function mBind <A,B>(m : OptionDef<A>, f : A -> OptionDef<B>) : OptionDef<B> return switch(m){ case Some(a) : f(a); case None : None; }; }
43.
returnとbindを組み合わせ モナドの計算はbind(>>=)とreturnで組織する Haskell の例: return 10
>>= (x -> return x >>= (y -> return x >>= (z -> return (z + x + y))))
44.
Haxeでのモナドの計算 Haxeのある機能をつかわないとやりづらい Option.mBind(Option.mPack(10),function(x) return Option.mBind(Option.mPack(x), function(y) return
Option.mBind(Option.mPack(y),function(z) return Option.mPack(x+y+z)))); しかるある機能を使うと途端に楽になる
45.
using! usingを使うと第一引数が、なんと、メソッドを呼 び出すオブジェクトみたいに! using Option; ! 10.mPack().mBind(function(x) return x.mPack().mBind(function(y) return
y.mPack().mBind(function(z) return (x + y + z).mPack())));
46.
HaxeでOptionモナドを実装した とりあえず、Haxeでも十分にモナドの計算ができ る! 次に継続モナドだが、次回Haxe勉強会で
47.
Haxeのdo記法の実装
48.
前提知識:Haxeのマクロ Haxeのマクロ(黒魔法とも呼ばれる)は新しい構文を 定義することができる マクロでdo記法をつくる
49.
構文木はEnum Haxeの構文木はEnumで表現されている。 1 + 1の構文木は次の様にHaxeで表わせる
50.
1 + 1の構文木 {
expr : EBinop(OpAdd, { expr : EConst(CInt(1)), pos : #pos(Sample.hx:10: characters 6-7) }, { expr : EConst(CInt(2)), pos : #pos(Sample.hx:10: characters 10-11) }), pos : #pos(example/Sample.hx:28: characters 6-11) }
51.
構文木を書き代える Haxeのマクロは構文木を書き代えることができる 構文木を書き代えることによって、別の表現を与 える事ができる
52.
例 : 1
+ 1を引き算にする macro public static function toSub(e){ return switch (e.expr) { case EBinop(OpAdd, a, b): macro $a - $b; case _: e; } } ! ! toSub(1 + 1); // => 0
53.
マクロでdo記法を実装 詳しくは次回Haxe勉強会で説明します
54.
これから先は次回Haxe勉強会にて!
55.
Haxe勉強会やんお! 2月のどっかやんお! 福岡でやんお! 詳細は、@nobkzで流れまう!
56.
Callback DSL & Monad Frameworks のこれから
57.
これから liftのなどのモナド関数に実装 読みやすいDSLを目指す LinqみたいなDSLの実装 公開するお!
58.
ご清聴ありがとうございました! @nobkz
Jetzt herunterladen