macros

ロードマップ

EXPERIMENTAL

Eugene Burmako 著
Eugene Yokota 訳

今の所、Scala 2.12 におけるリフレクションおよびマクロ関連の新機能の導入の予定は無いため、 バグ修正や安定化を除けば Scala 2.12 とパラダイス 2.12 の機能は Scala 2.11 とパラダイス 2.11 と同じものとなる。

機能的には、目下労力をさいているのは scala.meta だ。 これは Scala のメタプログラミングの新しい土台となるもので、現行の scala.reflect ベースのものに比べて、よりシンプルに、堅固になり、移植性にも適したものとなる予定だ。 いつの日か scala.meta が scala.reflect を置き換えて、Scala におけるメタプログラミングの新標準となることを目指している。

機能 Scala 2.10 パラダイス 2.10 Scala 2.11 パラダイス 2.11 Scala 2.12 パラダイス 2.12
blackbox と whitebox の分化 No No 1 Yes Yes 1 Yes Yes 1
def マクロ Yes Yes 1 Yes Yes 1 Yes Yes 1
マクロバンドル No No 1 Yes Yes 1 Yes Yes 1
implicit マクロ Yes (since 2.10.2) Yes 1 Yes Yes 1 Yes Yes 1
関数従属性の具現化 No Yes 2 Yes Yes 1 Yes Yes 1
型プロバイダ 一部サポート (see docs) Yes 2 一部サポート (see docs) Yes 2 一部サポート (see docs) Yes 2
準クォート No Yes 1 Yes Yes 1 Yes Yes 1
型マクロ No No No No No No
型指定の無いマクロ No No No No No No
マクロアノテーション No Yes 2 No Yes 2 No Yes 2

1 この機能は、マクロパラダイスに対してコンパイル時でも実行時でもライブラリ依存性を導入しない。そのため、出てきたバイトコードを使ったコンパイルにも、このバイトコードの実行にもマクロパラダイスをクラスパスに通すことを必要としない。

2 この機能は、マクロパラダイスに対してコンパイル時のライブラリ依存性を導入するが、実行時には必要ない。そのため、出てきたバイトコードを使ったコンパイルをするのにユーザ側のビルドにもプラグインを追加する必要があるが、このバイトコードやこのバイトコードによってマクロ展開されたものを実行するのにクラスパスに追加されるものはない。

3 -Yfundep-materialization フラグが有効になっている場合のみ動作する。

blog comments powered by Disqus