- マクロって何
- マクロのなにがいいの
- マクロを使ってコードを書くとどうなるか
- マクロの今後
Scala2.1.0から入ってきた
マクロを使うのは簡単、マクロを作るのは難しい
- コードを作るコード
- Scalaのシンタックスでコードを組む
- コンパイラがコンパイル時に実行する
マクロ以前
- sbtプラグインを使う
- 今も使ってるけど
- ASTコンパイラプラグイン(別のプラグインを使う必要がない)
なぜマクロ
- プラグインあるじゃん
- プラグインのお作法を学ぶのはしんどい
- コードがシンプルになる
- 必要なときだけコードを生成する
- 余計なものを生成しない
- パフォーマンス
- マクロはみんなの味方
マクロを使おう
- import scala.language.experimental.macros
-language:experimental.macros(コンパイル時引数指定)
マクロを使うコードとマクロが書かれたコードは別々にコンパイルする必要がある
- 同時にコンパイル出来ない
Def Macros
http://docs.scala-lang.org/ja/overviews/macros/overview.html
コードを置き換えてくれる
logger.debug(s"Some $expensive message!")
↓
if(logger.isDebugEnabled) logger.debug(s"Some $expensive message!")
キーワードはマクロで。
マクロ例(Emacs Lisp) http://e-arrows.sakura.ne.jp/2010/03/macros-in-emacs-el.html
ドライアプローチ 2.11はホワイトボックスとブラックボックスに分かれている
http://scalamacros.org/paperstalks/2014-06-17-EasyMetaprogrammingForEveryone.pdf
よいところ
- 自動生成
- 静的チェック
わるいところ
ライブラリを使うユーザーにはやさしくないので複雑
meta 実際に使う人向けにシンプルに
Scalaマクロの使いドコロ
- Code生成
- 静的型チェック
まとめ
- OSSコミュニティレベルで積極的に使っていけば、フィードバックが得られる
- あまり枯れていないので改善点は多い
- Scalaマクロは過渡期