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

Scala Macros makes it easy to provide useful libraries

Nov 28, 2014

Download

Documents

Kota Mizushima

A short introduction to Scala Macros usable from Scala 2.10
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
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