kmizuの日記

プログラミングや形式言語に関係のあることを書いたり書かなかったり。

Scalaのマクロは「実験的」(experimental)な機能です

タイトルがほとんど全てを表していますが、念のため説明します。

Scala 2.10からマクロが言語機能として導入され、Scala 2.11でも維持されています。ただし、あくまで現状のマクロは「実験的」な機能であり、ファイル毎に

import scala.language.experimental.macros

と書くか、コンパイラオプションで

-language:experimental.macros

と指定する必要があります。Scalaのライブラリ設計者には、新しい機能を使ってライブラリをもっと便利にしたいという人が多いことからか、マクロを使ったライブラリが既に多く存在しています。しかし、繰り返しますが、現状のマクロは「実験的」です。

Macros - blackbox vs whitebox - Scala Documentation

今の所は、Scala 2.12 ではマクロやリフレクション関連の変更は予定されていない。全機能が Scala 2.10 と 2.11 同様に実験的機能扱いのままで、機能が削除されることもない。本稿が書かれた背景となった状況は変わったが、書かれた内容はまだ生きているのでこのまま読み進んでほしい。

と書かれているので、Scala 2.12でも現状のマクロがそのまま使える可能性は高いですが、あくまで暫定的な判断であって、仕様が固まったわけではありません。マクロを使う事やマクロを使ったライブラリを使うことには多少のリスクが存在することを理解しておいてください。また、(コンパイル時に完全なプログラムを走らせることができる)マクロには、原理的にIDEによるサポートの恩恵が受けにくくなる(現在最良のScala IDEであるIntelliJ IDEAでさえ)というデメリットがあることも考える必要があります。以上を考慮した上でマクロを使うのは自由ですが、トレードオフが存在する事は意識する必要があります。