SlideShare a Scribd company logo
1 of 17
Download to read offline
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	
  

More Related Content

Similar to Scala Macros makes it easy to provide useful libraries

Scalaの現状と課題
Scalaの現状と課題Scalaの現状と課題
Scalaの現状と課題Kota Mizushima
 
RcppEigen and SVD
RcppEigen and SVDRcppEigen and SVD
RcppEigen and SVDXiangze
 
Scalaプロダクトのビルド高速化
Scalaプロダクトのビルド高速化Scalaプロダクトのビルド高速化
Scalaプロダクトのビルド高速化kuro kuro
 
Beginners Scala in FAN 20121009
Beginners Scala in FAN 20121009Beginners Scala in FAN 20121009
Beginners Scala in FAN 20121009Taisuke Shiratori
 
Scala.jsはじめました!
Scala.jsはじめました!Scala.jsはじめました!
Scala.jsはじめました!K Kinzal
 
rpscala35-scala2.9.0
rpscala35-scala2.9.0rpscala35-scala2.9.0
rpscala35-scala2.9.0Kenji Yoshida
 
Scalaでのプログラム開発
Scalaでのプログラム開発Scalaでのプログラム開発
Scalaでのプログラム開発Kota Mizushima
 
サーバサイドエンジニアが 1年間まじめにSPAやってみた
サーバサイドエンジニアが 1年間まじめにSPAやってみたサーバサイドエンジニアが 1年間まじめにSPAやってみた
サーバサイドエンジニアが 1年間まじめにSPAやってみたItaru Kitagawa
 
SpringOne 2016 報告 Reactive APIの設計・実装・使用
SpringOne 2016 報告 Reactive APIの設計・実装・使用SpringOne 2016 報告 Reactive APIの設計・実装・使用
SpringOne 2016 報告 Reactive APIの設計・実装・使用Takuya Iwatsuka
 
ES6,7で書ける JavaScript
ES6,7で書ける JavaScriptES6,7で書ける JavaScript
ES6,7で書ける JavaScriptShin Sekaryo
 
ビッグじゃなくても使えるSpark Streaming
ビッグじゃなくても使えるSpark Streamingビッグじゃなくても使えるSpark Streaming
ビッグじゃなくても使えるSpark Streamingchibochibo
 
Metaprogramming
MetaprogrammingMetaprogramming
MetaprogrammingAkura Pi
 
Futureのおまじないを理解する(LT)
Futureのおまじないを理解する(LT)Futureのおまじないを理解する(LT)
Futureのおまじないを理解する(LT)Hideaki Tarumi
 
Scalaプログラミング・マニアックス
Scalaプログラミング・マニアックスScalaプログラミング・マニアックス
Scalaプログラミング・マニアックスTomoharu ASAMI
 
Scala Warrior and type-safe front-end development with Scala.js
Scala Warrior and type-safe front-end development with Scala.jsScala Warrior and type-safe front-end development with Scala.js
Scala Warrior and type-safe front-end development with Scala.jstakezoe
 
Scala Performance Tuning Tips
Scala Performance Tuning TipsScala Performance Tuning Tips
Scala Performance Tuning TipsKota Mizushima
 
Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]Ra Zon
 

Similar to Scala Macros makes it easy to provide useful libraries (20)

Scalaの現状と課題
Scalaの現状と課題Scalaの現状と課題
Scalaの現状と課題
 
RcppEigen and SVD
RcppEigen and SVDRcppEigen and SVD
RcppEigen and SVD
 
Scalaプロダクトのビルド高速化
Scalaプロダクトのビルド高速化Scalaプロダクトのビルド高速化
Scalaプロダクトのビルド高速化
 
Beginners Scala in FAN 20121009
Beginners Scala in FAN 20121009Beginners Scala in FAN 20121009
Beginners Scala in FAN 20121009
 
Scala.jsはじめました!
Scala.jsはじめました!Scala.jsはじめました!
Scala.jsはじめました!
 
rpscala35-scala2.9.0
rpscala35-scala2.9.0rpscala35-scala2.9.0
rpscala35-scala2.9.0
 
Start-padrino
Start-padrinoStart-padrino
Start-padrino
 
Scalaでのプログラム開発
Scalaでのプログラム開発Scalaでのプログラム開発
Scalaでのプログラム開発
 
サーバサイドエンジニアが 1年間まじめにSPAやってみた
サーバサイドエンジニアが 1年間まじめにSPAやってみたサーバサイドエンジニアが 1年間まじめにSPAやってみた
サーバサイドエンジニアが 1年間まじめにSPAやってみた
 
SpringOne 2016 報告 Reactive APIの設計・実装・使用
SpringOne 2016 報告 Reactive APIの設計・実装・使用SpringOne 2016 報告 Reactive APIの設計・実装・使用
SpringOne 2016 報告 Reactive APIの設計・実装・使用
 
ES6,7で書ける JavaScript
ES6,7で書ける JavaScriptES6,7で書ける JavaScript
ES6,7で書ける JavaScript
 
ビッグじゃなくても使えるSpark Streaming
ビッグじゃなくても使えるSpark Streamingビッグじゃなくても使えるSpark Streaming
ビッグじゃなくても使えるSpark Streaming
 
Metaprogramming
MetaprogrammingMetaprogramming
Metaprogramming
 
Futureのおまじないを理解する(LT)
Futureのおまじないを理解する(LT)Futureのおまじないを理解する(LT)
Futureのおまじないを理解する(LT)
 
TypeScript超入門
TypeScript超入門TypeScript超入門
TypeScript超入門
 
Scalaプログラミング・マニアックス
Scalaプログラミング・マニアックスScalaプログラミング・マニアックス
Scalaプログラミング・マニアックス
 
Scala Warrior and type-safe front-end development with Scala.js
Scala Warrior and type-safe front-end development with Scala.jsScala Warrior and type-safe front-end development with Scala.js
Scala Warrior and type-safe front-end development with Scala.js
 
Scala Performance Tuning Tips
Scala Performance Tuning TipsScala Performance Tuning Tips
Scala Performance Tuning Tips
 
Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]
 
Scala web framework比較
Scala web framework比較Scala web framework比較
Scala web framework比較
 

More from Kota Mizushima

ドワンゴにおける新卒エンジニア向けScala研修について
ドワンゴにおける新卒エンジニア向けScala研修についてドワンゴにおける新卒エンジニア向けScala研修について
ドワンゴにおける新卒エンジニア向けScala研修についてKota Mizushima
 
株式会社ドワンゴにおけるScala教育の現状
株式会社ドワンゴにおけるScala教育の現状株式会社ドワンゴにおけるScala教育の現状
株式会社ドワンゴにおけるScala教育の現状Kota Mizushima
 
Scala Daysに行ってみて - あるいはスイス旅行記 -
Scala Daysに行ってみて - あるいはスイス旅行記 -Scala Daysに行ってみて - あるいはスイス旅行記 -
Scala Daysに行ってみて - あるいはスイス旅行記 -Kota Mizushima
 
About Capabilities for Uniqueness and Borrowing
About Capabilities for Uniqueness and BorrowingAbout Capabilities for Uniqueness and Borrowing
About Capabilities for Uniqueness and BorrowingKota Mizushima
 
Scala + Finagleの魅力
Scala + Finagleの魅力Scala + Finagleの魅力
Scala + Finagleの魅力Kota Mizushima
 
日本Scalaユーザーズグループ発足
日本Scalaユーザーズグループ発足日本Scalaユーザーズグループ発足
日本Scalaユーザーズグループ発足Kota Mizushima
 
Implicit Implicit Scala
Implicit Implicit ScalaImplicit Implicit Scala
Implicit Implicit ScalaKota Mizushima
 
Implicit Explicit Scala
Implicit Explicit ScalaImplicit Explicit Scala
Implicit Explicit ScalaKota Mizushima
 
言語アップデート -Scala編-
言語アップデート -Scala編-言語アップデート -Scala編-
言語アップデート -Scala編-Kota Mizushima
 
ScalaのソースをEclipseでビルドしてみた
ScalaのソースをEclipseでビルドしてみたScalaのソースをEclipseでビルドしてみた
ScalaのソースをEclipseでビルドしてみたKota Mizushima
 
Scalaの限定継続の応用と基本
Scalaの限定継続の応用と基本Scalaの限定継続の応用と基本
Scalaの限定継続の応用と基本Kota Mizushima
 
メタプログラミングって何だろう
メタプログラミングって何だろうメタプログラミングって何だろう
メタプログラミングって何だろうKota Mizushima
 
帰って来たNemerle
帰って来たNemerle帰って来たNemerle
帰って来たNemerleKota Mizushima
 
Scala Daysに行ってみて
Scala Daysに行ってみてScala Daysに行ってみて
Scala Daysに行ってみてKota Mizushima
 
Javaバイトコード入門
Javaバイトコード入門Javaバイトコード入門
Javaバイトコード入門Kota Mizushima
 

More from Kota Mizushima (20)

ドワンゴにおける新卒エンジニア向けScala研修について
ドワンゴにおける新卒エンジニア向けScala研修についてドワンゴにおける新卒エンジニア向けScala研修について
ドワンゴにおける新卒エンジニア向けScala研修について
 
株式会社ドワンゴにおけるScala教育の現状
株式会社ドワンゴにおけるScala教育の現状株式会社ドワンゴにおけるScala教育の現状
株式会社ドワンゴにおけるScala教育の現状
 
Macros in nemerle
Macros in nemerleMacros in nemerle
Macros in nemerle
 
Scala Daysに行ってみて - あるいはスイス旅行記 -
Scala Daysに行ってみて - あるいはスイス旅行記 -Scala Daysに行ってみて - あるいはスイス旅行記 -
Scala Daysに行ってみて - あるいはスイス旅行記 -
 
Power of Scala
Power of ScalaPower of Scala
Power of Scala
 
こわくないScala
こわくないScalaこわくないScala
こわくないScala
 
Scala is-unscared
Scala is-unscaredScala is-unscared
Scala is-unscared
 
About Capabilities for Uniqueness and Borrowing
About Capabilities for Uniqueness and BorrowingAbout Capabilities for Uniqueness and Borrowing
About Capabilities for Uniqueness and Borrowing
 
Scala + Finagleの魅力
Scala + Finagleの魅力Scala + Finagleの魅力
Scala + Finagleの魅力
 
日本Scalaユーザーズグループ発足
日本Scalaユーザーズグループ発足日本Scalaユーザーズグループ発足
日本Scalaユーザーズグループ発足
 
Implicit Implicit Scala
Implicit Implicit ScalaImplicit Implicit Scala
Implicit Implicit Scala
 
Implicit Explicit Scala
Implicit Explicit ScalaImplicit Explicit Scala
Implicit Explicit Scala
 
言語アップデート -Scala編-
言語アップデート -Scala編-言語アップデート -Scala編-
言語アップデート -Scala編-
 
Scalaz
ScalazScalaz
Scalaz
 
ScalaのソースをEclipseでビルドしてみた
ScalaのソースをEclipseでビルドしてみたScalaのソースをEclipseでビルドしてみた
ScalaのソースをEclipseでビルドしてみた
 
Scalaの限定継続の応用と基本
Scalaの限定継続の応用と基本Scalaの限定継続の応用と基本
Scalaの限定継続の応用と基本
 
メタプログラミングって何だろう
メタプログラミングって何だろうメタプログラミングって何だろう
メタプログラミングって何だろう
 
帰って来たNemerle
帰って来たNemerle帰って来たNemerle
帰って来たNemerle
 
Scala Daysに行ってみて
Scala Daysに行ってみてScala Daysに行ってみて
Scala Daysに行ってみて
 
Javaバイトコード入門
Javaバイトコード入門Javaバイトコード入門
Javaバイトコード入門
 

Scala Macros makes it easy to provide useful libraries

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