ScalazをDotty対応した知見

少し前に、こっそりと、かなりひさしぶりな(互換壊す)メジャーリリース?となる、7.3.0 finalをリリースしたけど全然リリースノート書いたり宣伝もしていないScalazですが、 もう最近自分しか開発していない感があり、猫のほうが明らかに流行っています。

が、それはそれとして、なにがあろうと、ゆったりとScalazの開発はやれる限り続けようと思うので、"そろそろいけるかな?"と思い、ScalazでのDotty対応をやってみたら(ごく一部を除いて)できたので、その知見をまとめました。

続きを読む

JDK11でGraalを有効にするとScalaのコンパイルが13%くらい速くなった

Graalについて全然詳しくないので、Graal自体の説明はしません、というかできませんが、JDK10以降で

-XX:+UnlockExperimentalVMOptions -XX:+UseJVMCICompiler

というオプションを付与すると有効にできるらしいですね。

というわけで、以下のような条件で計測した結果、結果からいうと13%くらい速く(コンパイル時間が短く)なりました。

続きを読む

play-wsのstandalone版に自動書き換えするscalafixのruleを書いた


https://github.com/xuwei-k/play-ws-scalafix

github.com


歴史とともに、簡単に説明すると

続きを読む

CircleCIにおけるsbtプロジェクトの依存ライブラリの最適なキャッシュ方法の考察

CircleCIにおけるキャッシュの仕組みというか仕様は、他のCIサービスと比べると、少し変わった特徴がある気がします。

といっても、自分は他にはTravisCIくらいしか詳しくないので、実はCircleCIのように色々工夫している方がむしろ最近は主流な可能性もありますが、そこは本題ではないし、詳しくもなく話せないので話しません。

続きを読む

sbtにおけるテストの並列実行の設定詳細解説

いきなり本題というか、一番言いたいことを書くと、まず

テストの fork の設定によってぜんぜん違う。

という点があまり知られていない気がします。 *1

というか、自分も今回調べるまで、微妙に古い知識のままで完璧に知らなかったので、今一度理解した現時点での詳細を今書いています。

sbtにおいて、テストがどう並列化されるか?に関して、関係するというか、今回話すのは、以下の点です

  • Test / parallelExecutionというkey
  • Test / fork が true か falseか
  • concurrentRestrictionsというkey
  • testForkedParallelというkey

また、今から話すのはsbt 1.3.8時点の情報です。

さらに前提として、マシンのCPUのコア数によって挙動が異なる可能性がありますが、ひとまずそれなりに十分にコア数がある、として話を進めます。(少なくとも4以上) *2

*1:もちろん公式ドキュメントには書いてあるのでそれは読みましょうというか、完璧に読んだことある人は、このblog読む必要ないはずです https://www.scala-sbt.org/1.x/docs/Testing.html

*2:specs2などは、更に別の概念として、1つのテストclass内のテスト並列実行する機能があったはずですが、今回はsbt自体の機能の話なので、そこには触れません

続きを読む