まだ継続してメンテナンスするかどうかわからないけど、以下のようなニュースが飛び込んで来たので、そろそろ試すか、と試した結果をメモ。
結果としては数十分から数時間書き換えた程度で、それなりに動きました。
最初scalazをやろうかとおもったけど、kind-projectorがコンパイラプラグインだから、そのままでは不可能そうなのでscalapropsにしました。
https://t.co/a4wLyNU08r
— Kenji Yoshida (@xuwei_k) 2019年12月18日
以前から
「Scala 2.x系はScala 2.14を出して、それを2.xの最後にしてその次がScala 3」
と言っていたけど
「Scala 2.14を出すのをやめてScala 2.13の次はScala 3にする」
という、わりと重大な発表がされましたよ
scalapropsをdotty 0.20.0-RC1でビルドしてみたら、macroもcompiler pluginも使っていないから、多少修正すればわりと普通に動くのだけど、一部のファイルのcompile時にcompilerがエラー(stacktrace)出して死んだ…
— Kenji Yoshida (@xuwei_k) 2019年12月19日
https://github.com/scalaprops/scalaprops/compare/scalaprops:f9297e9...scalaprops:9986a9d
tweetでは最初0.20.0-RC1といったけど、0.21.0-RC1で動きました
- toString() 呼び出し時に () つけるな、と怒られる
- scalaz.LazyNone呼び出し時に逆にカッコつけろ、と言われる
def this() {
はdef this() = {
になおせ、と言われる- enumがkeywordなのでバッククオートで括らないと駄目
==
が型安全になって怒られた(変な比較してた)- FloatとIntの共通の型で?推論させると、今までFloatになっていたが、AnyValにされてしまったので明示的にtoFloatで変換
- implicit valやdefに型を書け、と怒られるので付与(ローカル変数だとしても)
forAll { fa: F[A] =>
みたいなやつをカッコつけろ、と怒られるforAll { (fa: F[A]) =>
- 一部のテストファイルが、implicitの規則か型推論の規則が変わったせいでコンパイル通らないので一旦除去(詳細調べてない)。全体からすると数%程度
- scalacOptionsで "-doc-source-url" の指定が変わったのか、そのままだとdoc生成が動かない
- case classのunapplyの仕様が変わっていてcase classからGenやCogen生成する用のメソッドの型が合わない
dottyで関連する話がissueに上がってて、unapplyのreturn typeについては "it certainly is a serious incompatibility with Scala 2."と小田好先生に認識はされてそうですね(つまりdottyのバグ)https://t.co/7o4p1oRmYb
— Taisuke OE (@OE_uia) 2019年7月4日