"値の範囲をint32にしちゃって、内部はint64にすれば..."にしたら、オレンジ版の方が大幅に速くなった><;
System.Int32 ver. Elapsed Time: 1790 ms
Subrange ver. Elapsed Time: 217 ms
値の検証もコンパイラにやらせよう: Scala 3でRefinement TypesやるにはIronっていうライブラリが良さそう - Lambdaカクテル https://blog.3qe.us/entry/2024/02/19/040745
これは単にnullableなら未チェック、non-nullableなら範囲チェック済で安全って方式だけど、Roslynソースジェネレータを使ってnullable用の型とnon-nullable用の型で自動で名前をわけたら、もうちょっと見やすくなりそう><