Scala 3のmacroによる型安全かつ実行時にリフレクションにならないClose型クラス(ローンパターン)の実装

というのがおそらく作成できたけれど、もっと書き方改善可能なところあったら教えて下さい。 このくらいすでに、Scala 3でも前例が存在する気もするけど、とりあえず(あまり前例は調査はせずに)自作しました。

  • テスト書いてあるとおり、指定されたcloseメソッドがなかったらコンパイル時にエラーです
  • コンパイル時にはstructural typeのような感じですが、本物のメソッド呼び出しに、コンパイル時に置き換えてるはずなので、実行時に余計なコストはかからないはずです*1

ところでScala 3側のbugなのかsbt側のbugなのか、仕様なのかわからないけど、これ全部いっしょにコンパイルすると(typeCheckErrorsなど使うと?) 変なエラーが出るので、いい感じに分けてコンパイルするかなにか工夫をしないといけなかった、面倒・・・。

gist.github.com

*1:もちろん型クラスのインスタンス生成コストくらいはあります。Scalaの普通のstructural typeみたいに、リフレクションにはならない、の意味。型クラス自体をさらにinlineは単純には無理だった https://twitter.com/xuwei_k/status/1398978228400754688