dotty

Scala 3で独自にunion typeのleast upper boundを計算する仕組みを作った

Scala 3では、以下のように | というunion type?or type?という新しい仕様が追加されました。 (仕様というか、少なくとも以下の公式ドキュメントではunionと呼んでるが、Scala 3のquoteのAPI内部ではOrTypeでややこしい) https://docs.scala-lang.org/scal…

scala3profileというsbt/compiler pluginをリリースした

github.com

Scala 3でJavaのアノテーション継承したclassが定義できない問題の対策

github.com

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

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

WartremoverのScala 3対応の発表をした

Compiler Plugin難しい xuwei-k.github.io

2021年の最新技術を使った場合のScalaのコンパイル速度

ここでいう最新技術とは以下です。 JDK8や11よりも、17の方が速い? M1 Macが速い?(2021年最新のM1 Maxではなく、2020のMacbook Pro 13インチのM1です・・・。M1 Max欲しい!!! => 最後に追記したぞ) Scala 2より3の方が速い? 自分の最近の経験上、それ…

Scala 3でMatchableに推論されたら警告かエラーにするcompiler plugin

scala.Matchable自体の解説はしませんが、AnyValやAnyやAnyRefや Product with Serializable と同様に、それに推論されたら、わりとミスなことが多い気がするので、作ってみました。

Scala 3のMatch Typesを使って型レベルsort

今までのScala 2だとAux Patternやimplicit色々使って書くようなやつが、3だとこうやって書けるよ、という話。 https://gist.github.com/xuwei-k/924c69482c972d7bac496922ed725f79 でもこれだと、型は生成出来ても、valueOfなどで実際の値が生成できないん…

Scala 3でマクロで特定のsealed trait, classを継承したobjectを全て取得する

というのを書いたので貼っておきます。 Listで返す版と、Tupleで返す版。 https://gist.github.com/xuwei-k/7c3f662a78fdd39ce00db43900470848 https://gist.github.com/xuwei-k/c798d8faa3f4f163be0aad150b327d07:

2020年11月現在のScala 3(Dotty)とScala 2のコンパイル速度比較

最初に結論 Scala 2.13.3 と 3.0.0-M2-bin-20201031-1ab76c1-NIGHTLY をscalaz最新版でベンチマークしたところ、 Scala 2.13.3は平均約57秒、Scala 3の最新版は平均約31秒で 約45%短縮!!! めでたいなぁ。 他の条件で計測した場合にどうなるのかわからない…

DottyのMatch Typeを使ってコンパイル時にFibonacciを計算する

見た目通りで、あまり難しくないので、特に説明することがない。 macroさえ使わずに書けますね。 shapelessにあったような色々な機能が標準で装備されています。 みなさん、Match Type使ってもっと複雑な色々な計算書いてみましょう。 ちなみに、この単純な…

Scala 2.13.4からのTASTy読み取り機能

というものが追加されるらしいです。

ScalazをDotty対応した知見

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