Scala 3のinlineによるcompile時間増大に対処する方法

概要や結論を先に書いておくと、適切にプロファイルを取って、適切にボトルネック箇所を見つけて対処しましょう。 という話になるのですが、大まかな概要というか、結果的に使った方法を書くと

  1. sbtのTask毎の時間を記録する機能を使う
  2. Scala 3 compilerのログを多めに出してphase毎の時間を出す
  3. Scala 3のcompiler pluginを書いて特に時間がかかっているファイルを見つけ出す
  4. 普通のinlineやsummonFromだけで書いていたものを、あえてQuotes使ったlow level macroに書き換えて、compile time debugする
  5. 遅い原因となったinstanceを半手動定義する

といった感じです。タイトルに、

続きを読む

WartRemoverをScala 3のTASTy inspector経由で動かす

1週間前のScalaMatsuriで発表 し、色々と話をしたわけですが、それから数日経ってScala 3対応版のwartremoverリリースして、さらに色々と試行錯誤していたら、以下のようなことに気が付き、

やってみたら出来ました、という話。ScalaMatsuriの発表の最後の方で言及していたTASTyの話ですね。その時はこれに全く気がついていなかった。

続きを読む

Scala 3移行の発表をした

speakerdeck.com

発表中にも言ったし、以前色々tweetしていたりもするんですが、本業での方が、コード量多かったり、時期がはやくてcompilerやlibraryが安定してなかったりで、色々辛かったりその分面白い話もあったんですが、とにかく具体的なそれなりな大規模な事例発表?ができたのは良かったですね。

続きを読む

Scala 3のmatch typeでcompile timeにString literalをparseして評価する

できました。

続きを読む

unused-codeという未使用コードの検知、削除のsbt-plugin & scalafix rule作ってリリースした

イデアというか初期実装は、1年近く前に遡るのですが、それをしっかり作り直して整理してリリースしました。

https://github.com/xuwei-k/unused-code

まだまだ追加したい機能や改善点などありますが、初期versionでも、結構しっかり作ったつもりなので(?)割と既に実用的なはずなので、試してみてのフィードバックお待ちしています。

続きを読む