Keplerについて  小宮山 純平 (twitter@dekosuke)
はじめに マクロの話をします Project Kepler (ライブラリ、というより提案)  の紹介をします                               2
はじめにKeplerは提案なので現在ではなく未来の話です          3
コンパイル時メタプログラミング コードを生成してから、スカラのコンパイラが  実行される前に何かやりたいですよね 要するにマクロ(プリプロセッサ) Scalaにはコンパイラプラグインがあって、  scalacの各段階で処理が挟めます(sc...
Project KeplerProject Kepler by Eugene Burmakohttp://scalamacros.org/Scalaにマクロを持ち込みたい!                                    5
マクロの悪名   C言語のマクロは悪名高い                   6
マクロの悪名   C言語のマクロは悪名高い   そもそもC++のテンプレートが提案された理由    はC言語マクロほど凶悪でないプリプロセッサ    がほしからでした                             7
Project KeplerのマクロC言語と違って Scalaそのもので書かれている(言語外の何かで  はない) 式木の上での変換(生の文字列を操作したりし  ない) Scalaの文法を変えない                      ...
Project Keplerのマクロマクロ(コンパイル時メタプロ)の利点として コード自動生成と違ってコード量が増えない                         9
例: 型安全なprintf (関数マクロ)//こんなマクロを書くとmacro def printf(format: String, params: Any*) {  val (evals, refs) = parse(format, param...
例:DB (型マクロ)macro trait MySqlDb(connString: String) = …type MyDb = Base withMySqlDb("Server=127.0.0.1;Database=Foo;")   Sc...
Boilerplate                             言語のおまじない         「すべてのBoilerplateを消し去りたい!」trait TupledFunctions extends Functions ...
現状 “being specified and refined within a Scala    improvement process (aka SIP #14).”                                     ...
未完     14
End
Upcoming SlideShare
Loading in...5
×

Kepler (scalamacros)について

1,298

Published on

http://scalamacros.org/ について。
ドワンゴのScala勉強会で発表するはずでしたが、体調不良で欠席しましたので資料だけアップロードします

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,298
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
2
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Kepler (scalamacros)について

  1. 1. Keplerについて 小宮山 純平 (twitter@dekosuke)
  2. 2. はじめに マクロの話をします Project Kepler (ライブラリ、というより提案) の紹介をします 2
  3. 3. はじめにKeplerは提案なので現在ではなく未来の話です 3
  4. 4. コンパイル時メタプログラミング コードを生成してから、スカラのコンパイラが 実行される前に何かやりたいですよね 要するにマクロ(プリプロセッサ) Scalaにはコンパイラプラグインがあって、 scalacの各段階で処理が挟めます(scala- virtualizedとかは使ってるらしいです) Project Kepler (scalaへのmacroの提案) の話をし ましょう! 4
  5. 5. Project KeplerProject Kepler by Eugene Burmakohttp://scalamacros.org/Scalaにマクロを持ち込みたい! 5
  6. 6. マクロの悪名 C言語のマクロは悪名高い 6
  7. 7. マクロの悪名 C言語のマクロは悪名高い そもそもC++のテンプレートが提案された理由 はC言語マクロほど凶悪でないプリプロセッサ がほしからでした 7
  8. 8. Project KeplerのマクロC言語と違って Scalaそのもので書かれている(言語外の何かで はない) 式木の上での変換(生の文字列を操作したりし ない) Scalaの文法を変えない 8
  9. 9. Project Keplerのマクロマクロ(コンパイル時メタプロ)の利点として コード自動生成と違ってコード量が増えない 9
  10. 10. 例: 型安全なprintf (関数マクロ)//こんなマクロを書くとmacro def printf(format: String, params: Any*) { val (evals, refs) = parse(format, params) val seq = evals + refs.map(x => c"print($x)") c"$seq"}//型安全なprintfがprintf("Value = %d", 123 + 877)//こう展開されるよval p1 = (123 + 877): Intprint("Value = "); print(p1) 10
  11. 11. 例:DB (型マクロ)macro trait MySqlDb(connString: String) = …type MyDb = Base withMySqlDb("Server=127.0.0.1;Database=Foo;") Scalaの文法の自然な拡張(意味のないおまじな いを増やさない) 11
  12. 12. Boilerplate 言語のおまじない 「すべてのBoilerplateを消し去りたい!」trait TupledFunctions extends Functions with TupleOps { implicit deffun[A1:Manifest,A2:Manifest,B:Manifest](f: (Rep[A1], Rep[A2]) => Rep[B]) :Rep[((A1,A2))=>B] = fun((t: Rep[(A1,A2)]) => f(tuple2_get1(t), tuple2_get2(t))) implicit deffun[A1:Manifest,A2:Manifest,A3:Manifest,B:Manifest](f: (Rep[A1], Rep[A2], Rep[A3]) =>Rep[B]) : Rep[((A1,A2,A3))=>B] = fun((t: Rep[(A1,A2,A3)]) => f(tuple3_get1(t), tuple3_get2(t),tuple3_get3(t))) ... } 12
  13. 13. 現状 “being specified and refined within a Scala improvement process (aka SIP #14).” 13
  14. 14. 未完 14
  15. 15. End
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×