Scala 2.13.0-M4 からの新しいコレクションライブラリの変更

まだ色々未確定な情報が多い可能性ありますが、ひとまずtweetしたものをまとめました
2
Kenji Yoshida @xuwei_k

そもそもheadをlazyにしたら、メモリ節約する観点からすると大抵の場合tailはlazyにしなくていい(tailのheadがlazyになるので、つまり実質tailもlazyになる)とも言える。 が、tail自体を評価するタイミングによってconsかemptyか変えるような(変なこと?する)場合はtailのlazy必要とも言えるし難しい

2018-04-24 19:34:15
Kenji Yoshida @xuwei_k

バグ報告したはいいけど、これコンパイラの最適化によって(?) github.com/scala/bug/issu… 実はリークしない気もしてきた

2018-04-24 19:47:08
Kenji Yoshida @xuwei_k

いやそんなことないか、それだと個々の要素の評価は遅延されるけど、LazyListの長さが一瞬で決まることになって、無限の長さのLazyList作成不能になる(?)からダメか?

2018-04-24 19:48:19
Kenji Yoshida @xuwei_k

しかし、LazyList、先頭もlazyになったことと引き換えに、たぶん要素数に比例して微妙にメモリ多く消費するようになる可能性ある(あるいはlazy valが2重になったことにより速度も遅くなる可能性もゼロではない?)気がするんだけど、そのトレードオフどうなんだろう

2018-04-24 20:23:16
Kenji Yoshida @xuwei_k

@todesking いや、CanBuildFromとるtoは使い方変わる(implicit paramだけだったのがそうでない引数取るようになる)けど、他のtoListやtoVectorはそのまま残りますよ(implicit部分微妙に変わる可能性あるが、ソースコード互換はあるといえるので影響あまりない) Streamが非推奨になるのでtoStreamは非推奨ですけど

2018-04-24 21:26:03
Kenji Yoshida @xuwei_k

CanBuildFrom使ったAPI頑張って維持しつつ2.12以前と現状の2.13のクロスビルド不可能ではなさそうだけど、現状の2.13がどの程度安定してるのかわからない(また何度か変わって振り回されるのは避けたい)ので、今クロスビルドするなら一旦CanBuildFrom使うの避けるのが無難という結論になってしまうなぁ

2018-04-24 23:29:14
scala contributors @scala_contrib

contributors.scala-lang.org/t/scala-2-13-p… Scala 2.13 progress report 🍥SethTisue wrote: The new 2.13 collections have now been merged onto the 2.13.x scala/scala branch, in github.com/scala/scala/pu…

2018-04-26 18:09:57
Kenji Yoshida @xuwei_k

Scala 2.13 の新しい ImmutableArray ここで使われるのか、なるほど。 2.12 以前は mutable.WrappedArray だったという内部実装に依存したコード書いてるライブラリがあるので、それが影響うけるなぁ pic.twitter.com/nOupQJLJFD

2018-04-28 13:10:41
拡大
Kenji Yoshida @xuwei_k

そういえばscalikejdbcもCanBuildFrom結構使うようになってるなぁ、つらい twitter.com/xuwei_k/status…

2018-04-29 09:06:01
Kenji Yoshida @xuwei_k

Scala 2.13 から foldLeft や foldRight の記号メソッドの /: と :\ 非推奨になるらしい github.com/scala/scala/bl…

2018-04-29 09:16:45
Kenji Yoshida @xuwei_k

Function0 の数はもちろん増えてるけど、 jol で計測すると、sizeはpaddingの影響でStreamと変わりなしか

2018-04-29 16:50:14
Kenji Yoshida @xuwei_k

いやこれ受け取る側より、可変長引数を foo(xs: _*) の形式で受け渡す場合に、Scala 2.13 以降は xs が immutable になっている必要あるから、これクロスビルドの際面倒だな・・・。まぁ toSeq か toList かなにか呼んでしまえばいいだけか・・・?

2018-04-29 21:20:17
Kenji Yoshida @xuwei_k

あと新しいコレクションに関してバグ報告したやつ、今のところ2つくらい修正された github.com/scala/bug/issu… github.com/scala/bug/issu…

2018-04-29 21:35:23
がくぞ @gakuzzzz

toを使って任意のCollectionに対応できるように導入したけどtoが変わるとこの辺ぜんぶに影響でてしまうなぁ。ちゃんと2.13対応考えないと…… twitter.com/xuwei_k/status…

2018-04-30 18:18:25
Kenji Yoshida @xuwei_k

Scala 2.13のtoは2.12以前のimplicit parameterのみを引数にとるtoとは似てるようで別物というか、別の名前にしてくれたほうがクロスビルドする観点からはやりやすい可能性ある気がしている

2018-04-30 18:52:17
Kenji Yoshida @xuwei_k

例えば2.13以降のメソッド名を “as” とかにするとして、それぞれpimp my libraryパターンで、2.12以前にas生やすか、2.13にtoを生やす、などできるのに、両方toが同じ名前で存在してるのに使い方というか引数や型引数違うとそういうことが出来ない

2018-04-30 19:03:54
∃ugene 🥙yokot∀ @eed3si9n_ja

@xuwei_k scala-collection-compat を使えば両方で新しい方の to が使えるらしいです。 scala> import scala.collection.compat._ scala> val xs = List(1,2,3) scala> xs.to(Vector)

2018-05-01 02:08:36
Kenji Yoshida @xuwei_k

@eed3si9n_ja なるほど?ただ - まだmaven centralに最初のversionリリースされてない - あのライブラリ自体のバイナリ互換維持の方針が今のところよくわからない - Scala 2.10サポートはされないらしい みたいな状態なので、仮に可能でも今すぐは少なくとも使いづらい、などの辛みが

2018-05-01 05:18:34
∃ugene 🥙yokot∀ @eed3si9n_ja

@xuwei_k 今 M4 に向けて色々 merge されてるみたいなので、2.13.x への懸念事項があれば M4 が出る前に scala/bug か contributors.scala-lang.org/t/scala-2-13-p… かで質問/報告するといいのかもしれません。

2018-05-01 05:24:49
Kenji Yoshida @xuwei_k

github.com/scala/scala/pu… maxOption と minOption やっと 2.13 で追加されるのか

2018-05-03 10:56:58
Kenji Yoshida @xuwei_k

メソッド名変えよう、という議論、既にされていた(閉じられてた) github.com/scala/collecti…

2018-05-04 08:43:36
Kenji Yoshida @xuwei_k

(overloadに変更された影響で?)型推論が効かなくなってる pic.twitter.com/h4zntf5LAI

2018-05-08 16:47:36
拡大
Kenji Yoshida @xuwei_k

やはりソース互換とバイナリ互換両方維持しつつ2.13.0-M4のCanBuildFrom関連の変更踏まえてクロスビルドする場合、現状のscala-collection-compatでは駄目で、こういう逆のimplicitが必要という結論になりつつあるが github.com/xuwei-k/json4s… これは果たしてscala-collection-compatに入れるべきなのか

2018-05-10 20:45:13
Kenji Yoshida @xuwei_k

どうせscala-collection-compatがScala 2.10をサポートする気が無いなら、(ソース互換とバイナリ互換維持するbranchでは)結局使えないプロジェクトが結構出てくるから、するとそういうのが入ってもそれほど嬉しくもないから、まぁどうでもいいか・・・という気持ちにもなる

2018-05-10 20:47:57