以前書いてから増えた分の解説。
以前と同様、特に記述がないものは全部SyntacticRuleなので、100%正しく書き換えや警告出せる保証がないです。
続きを読む今更な話題なのですが、解説したくなったので解説を書いておきます。
続きを読む少しふざけたタイトルをつけましたが、以下、基本的に超真面目なマニアックな話をします。
Scala 3から、ある程度の定型的なtype classのinstance生成時に低レベルなmacroを書かずに便利に綺麗に書けるMirrorという仕組みが標準で追加されています。
https://github.com/lampepfl/dotty/blob/3.1.3-RC2/library/src/scala/deriving/Mirror.scala
雑に一言で説明すると、shapeless 2における Generic
や LabelledGeneric
に近いものが標準に入りました。
今回は、それ自体の紹介ではなく、タイトルに書いた通り、それの内部実装の話です。よってMirrorそのものの詳細な使い方や説明はしません。
また、versionはひとまずScala 3.1.3-RC2、としておきます。
さて、
続きを読む概要や結論を先に書いておくと、適切にプロファイルを取って、適切にボトルネック箇所を見つけて対処しましょう。 という話になるのですが、大まかな概要というか、結果的に使った方法を書くと
といった感じです。タイトルに、
続きを読む1週間前のScalaMatsuriで発表 し、色々と話をしたわけですが、それから数日経ってScala 3対応版のwartremoverリリースして、さらに色々と試行錯誤していたら、以下のようなことに気が付き、
あっ、よく考えたら、Scala 3のlibrary側のQuotes使ったwartremoverでのlinter、tasty inspectorのinterfaceもそのままそれみたいだから、これそのまま再利用出来るのでは???
— Kenji Yoshida (@xuwei_k) March 24, 2022
(compileとは別の任意のタイミングで .tasty ファイルに対してlinter実行が出来るのでは???)https://t.co/lUx65cX94U
やってみたら出来ました、という話。ScalaMatsuriの発表の最後の方で言及していたTASTyの話ですね。その時はこれに全く気がついていなかった。
続きを読む