Upload
kota-mizushima
View
2.506
Download
3
Embed Size (px)
DESCRIPTION
A short introduction to Scala Macros usable from Scala 2.10
Citation preview
Scala Macros makes it easy to provide useful libraries
(short version) 水島 宏太
日本Scalaユーザーズグループ
Self Introduc;on • 水島 宏太 – Twi>er: @kmizu – Github: h>ps://github.com/kmizu/
• 株式会社ユビレジ • LOVE • (プログラミング|形式)言語 • 性的型付け • メタプログラミング • Scala
Scala Conference 2013
• 時期:2013年3月上旬予定
• 会場:東工大 大岡山キャンパス
• 募集定員:200名見込み
• 海外(TypeSafe)からのゲストスピーカー
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が出るとか出ないとか
Scala 2.10
• いろんな機能が入るよ! – String interpola;on – マクロ – type Dynamic (2.9.1から仕様変更) – リフレクションライブラリ
• 高度な機能は明示的にimport! – import language.experimental.macros
A>en;on
• リリース時には細部が変わってるかも
• ↓を主に参考 • Scala 2.10.0 M7の実装 • SIP-‐16: Self-‐cleaning macros – 現在の実装に一部追従していない – リリース時には直されてるといいなあ
SIP-‐16 Self-‐cleaning macros
• Scalaマクロの提案書 – Nemeleに強く影響を受けた
• Status: Postponed to A Future Release – Scala 2.10に入るのは実験実装
• quote/unquote/splice/eval相当の機能 • マクロの分割コンパイル • マクロで扱う式は型を持つ: Expr[T]
Scala Macros Has not
• マクロのための特別な構文 • quote, unquote等 => 通常のマクロ扱い
• Hygienicマクロ • 自分でgensym(相当)してね
• Readerマクロ <= 構文の見た目を変えられる
Scala Macros VS. Nemerle
Conciseness Hygiene Typing Flexibility
Scala △
△
○
△
Nemerle
○
○
△
○
Sum Up in One Word
• 目新しいものではない
• 実装コストは安い
• Scalaでフツーのマクロが使える – いくつかのコードジェネレータが不要になる – 実行時オーバーヘッド無しで新構文が追加可能
• 無名関数の生成、名前渡し引数が必要な場面
Basic Example
Applica;on of Scala Macros
• O/Rマッパー: SLICKS
• Web App フレームワーク
• 基本ライブラリ – 実行時コストが重要な汎用ライブラリ – 無名関数の生成を避けられる可能性
• コンパイル時の文字列チェック
SLICKS
• 汎用データクエリフレームワーク • h>ps://github.com/slick
Current Limita;ons
• IDEの追従(補完等)が不完全 ※編集・コンパイルは問題ない
• 同一コンパイル単位のマクロを呼べない – マクロライブラリは別にjarを作っておくなど
• 式でないものを直接引数に渡せない – aMacro ((val I = 0), …) はNG – 面倒な制限:無名関数などによる回避が必要
What I didn’t Say
• ジェネリックマクロとTypeTag • リフレクションAPIとの関係
• Hygienicマクロ
• その他
Conclusion
• Scala 2.10で入るマクロがアツい…か?
• 割とフツーのマクロ(地味にうれしい)
• 記述がちょっと冗長
• experimentalなので今後の改善に期待
Demo