17
Scala Macros makes it easy to provide useful libraries (short version) 水島 宏太 日本Scalaユーザーズグループ

Scala Macros makes it easy to provide useful libraries

Embed Size (px)

DESCRIPTION

A short introduction to Scala Macros usable from Scala 2.10

Citation preview

Page 1: Scala Macros makes it easy to provide useful libraries

Scala  Macros  makes  it  easy  to  provide  useful  libraries  

(short  version)  水島 宏太  

日本Scalaユーザーズグループ  

Page 2: Scala Macros makes it easy to provide useful libraries

Self  Introduc;on  •  水島 宏太    –  Twi>er:  @kmizu  – Github:  h>ps://github.com/kmizu/    

•  株式会社ユビレジ  •  LOVE  •  (プログラミング|形式)言語  •  性的型付け  •  メタプログラミング  •  Scala  

Page 3: Scala Macros makes it easy to provide useful libraries

Scala  Conference  2013  

•  時期:2013年3月上旬予定  

•  会場:東工大 大岡山キャンパス  

•  募集定員:200名見込み  

•  海外(TypeSafe)からのゲストスピーカー  

Page 4: Scala Macros makes it easy to provide useful libraries

Current  Status  of  Scala  

•  開発体制:githubを使ったオープンな開発  – h>ps://github.com/scala/scala  – リポジトリをfork  -­‐>  pull  request  が基本    

•  最新安定版:  Scala  2.9.2.final    •  開発版:Scala  2.10.0  Milestone  7  – もうすぐRCが出るとか出ないとか  

Page 5: Scala Macros makes it easy to provide useful libraries

Scala  2.10  

•  いろんな機能が入るよ!  – String  interpola;on  – マクロ  –  type  Dynamic  (2.9.1から仕様変更)  – リフレクションライブラリ  

•  高度な機能は明示的にimport!  –  import  language.experimental.macros  

Page 6: Scala Macros makes it easy to provide useful libraries

A>en;on  

•  リリース時には細部が変わってるかも  

•  ↓を主に参考  •  Scala  2.10.0  M7の実装  •  SIP-­‐16:  Self-­‐cleaning  macros  – 現在の実装に一部追従していない  – リリース時には直されてるといいなあ  

Page 7: Scala Macros makes it easy to provide useful libraries

SIP-­‐16  Self-­‐cleaning  macros  

•  Scalaマクロの提案書  – Nemeleに強く影響を受けた  

•  Status:  Postponed  to  A  Future  Release  –   Scala  2.10に入るのは実験実装  

 •  quote/unquote/splice/eval相当の機能  •  マクロの分割コンパイル  •  マクロで扱う式は型を持つ:  Expr[T]  

Page 8: Scala Macros makes it easy to provide useful libraries

Scala  Macros  Has  not  

 

•  マクロのための特別な構文  •  quote,  unquote等  =>  通常のマクロ扱い  

•  Hygienicマクロ  •  自分でgensym(相当)してね  

•  Readerマクロ  <=  構文の見た目を変えられる  

Page 9: Scala Macros makes it easy to provide useful libraries

Scala  Macros    VS.  Nemerle  

       Conciseness              Hygiene   Typing   Flexibility  

   

Scala   △  

   

△  

   

○  

   

△  

   

Nemerle  

   

○  

   

○  

   

△  

   

○  

Page 10: Scala Macros makes it easy to provide useful libraries

Sum  Up  in  One  Word  

•  目新しいものではない  

•  実装コストは安い  

•  Scalaでフツーのマクロが使える  – いくつかのコードジェネレータが不要になる  – 実行時オーバーヘッド無しで新構文が追加可能  

• 無名関数の生成、名前渡し引数が必要な場面  

Page 11: Scala Macros makes it easy to provide useful libraries

Basic  Example  

Page 12: Scala Macros makes it easy to provide useful libraries

Applica;on  of  Scala  Macros  

•  O/Rマッパー:  SLICKS  

•  Web  App  フレームワーク  

•  基本ライブラリ  – 実行時コストが重要な汎用ライブラリ  – 無名関数の生成を避けられる可能性  

•  コンパイル時の文字列チェック  

Page 13: Scala Macros makes it easy to provide useful libraries

SLICKS  

•  汎用データクエリフレームワーク  •  h>ps://github.com/slick  

Page 14: Scala Macros makes it easy to provide useful libraries

Current  Limita;ons  

•  IDEの追従(補完等)が不完全  ※編集・コンパイルは問題ない  

•  同一コンパイル単位のマクロを呼べない  – マクロライブラリは別にjarを作っておくなど  

•  式でないものを直接引数に渡せない  – aMacro  ((val  I  =  0),  …)  はNG  – 面倒な制限:無名関数などによる回避が必要  

Page 15: Scala Macros makes it easy to provide useful libraries

What  I  didn’t  Say  

•  ジェネリックマクロとTypeTag    •  リフレクションAPIとの関係  

•  Hygienicマクロ  

•  その他  

Page 16: Scala Macros makes it easy to provide useful libraries

Conclusion  

•  Scala  2.10で入るマクロがアツい…か?  

•  割とフツーのマクロ(地味にうれしい)  

•  記述がちょっと冗長  

•  experimentalなので今後の改善に期待  

Page 17: Scala Macros makes it easy to provide useful libraries

Demo