Scala2.10 以降に入るかもしれない機能まとめ

このblog書いてる時点の最新の安定版は、2.9.1ですが、version2.9系が出て以降、結構時間も経過し、最近はいろいろと動きがあるので、とりあえず自分が収集できた範囲(というか、自分がある程度興味を持った変更)をまとめておきます。現在trunkに入ってても、いろんな事情があってまだまだどのようなかたちで入るのかは変更になる可能性もあるので、あたりまえですが情報の正当性とか保証しませんよ、まぁ参考程度に。更に新しい情報が入ってきた場合、気が向いたら追記するかもしれないし、しないかもしれない。頻繁に更新するかもしれないので、そうした場合埋まらないように、blogの記事の日付は当分の間未来にしておきます。それと以下の列挙の順は特に意味ありません。あと、「入るかもしれない機能」ってなってますが、逆に「レガシーなので削除されるもの」もメモしてあります


https://github.com/scala/scala/pull/200
promise や future などの、SIP14 に関して別リポジトリで作業していたものも、本体にmergeされたらしい。


mutable な treesetが新たに入るらしい(2.9までは、immutableなtreesetしかなかった)

Scala2.10から、-Xexperimental入れると、case classのproductIteratorの型がIterator Any ではなくなるらしい

http://hacking-scala.posterous.com/new-features-in-scala-210


type currying ?
http://groups.google.com/group/scala-internals/browse_thread/thread/e38c468c43cfa19b
https://twitter.com/#!/scalalog/status/151743809728946176



macroがtrunkに入り始めてる?
https://github.com/scala/scala/commit/e5b9ceba71a9e71fcab6096700019a5a19e0dcbd



Scala 2.10 に dependent method types というのが入るらしいよ


Scala2.10に文字列中の¥{ _ } で式展開する機能が入るかも? => (yuroyoroさんが紹介した最初の案とはある程度異なるけれども)正式に入ったみたい https://github.com/scala/scala/pull/107



8進数リテラルも2.11あたり(?)でdeprecated になるかも ?
https://github.com/scala/scala/commit/2a34d200134c157991c0cfc131dc793dadd098fe

case class が ProductN を継承するようになるらしい
https://github.com/scala/legacy-svn-scala/commit/aa5a8b1651e46fd65e7333bcce4d3af75d1edc23

なにか問題があった(?)らしく、無効にされてた
https://github.com/scala/scala/commit/d7f498ac9cccd7473be8f416a1620548ca8fca9b


???っていうメソッド
http://twitter.com/xuwei_k/status/120100587525251072
http://lampsvn.epfl.ch/trac/scala/browser/scala/trunk/src/library/scala/Predef.scala#L233
こんな風に使えて便利ですね?の図



reflectionが入るらしい
このインタビューの後半あたりでodersky先生が言ってる
以下のinternalのMLでodersky先生が提案したのがきっかけ?
Proposed architecture of Scala's reflection library
自分もよくわかってないけど、このscala.reflect.api パッケージあたりが新たに作ってるところっぽい?



(新たな機能というわけではないが)
AbstractIteratorなどを新たに定義して頑張った結果、Scala自体のlibraryのjarの容量が、1.5MByteくらい減ったらしい
https://github.com/scala/scala/commit/f929fbd349ac9bb3249d227eabcd17fa41e353e8
同じく、使う側はとくに何も変わらないが(インスタンスの?)容量減らすために
AbstractPartialFunctionというのが内部的に導入されるらしい

Functionに関する specialize いろいろ。 scala/Specializable.scalaというファイルが増えてる
https://github.com/scala/scala/compare/4c48abbe5a...bb23d766bc

Tuple2に関するspecialize


deprecatedなものが大量に削除


これも、ユーザーに直接関係するというよりも、どちらかと言うと内部実装の話っぽいけれど↓


無名関数からreturn使って抜けだした場合に内部的に使われているruntime.NonLocalReturnControlというclassのspecialized

+:や:+のextractorについて対称性がおかしいから(?)新たに、:+と+:のオブジェクトを定義するようにして、微妙に動作変わった

Duration

↑これは、macroでやればいいじゃんってことで、なくなったらしいScala.dbc がなくなる

Scala 2.10.0 からは、コンパイル時に親切に警告を出してくれる箇所が増えるらしいよ!

static という、アノテーション
https://github.com/scala/scala/commit/892ee3df93a10ffe24fb11b37ad7c3a9cb93d5de
static アノテーション消えたらしい
https://github.com/scala/scala/commit/fbed8130dc27250b5ea28b45a662479139d0d1f2

色々よくまとまってる資料↓
https://speakerdeck.com/dcsobral/scala-2-dot-10-dot-0-english-version

あとは、Scala-incubatorにあるやつ色々とかScala STMとか、いつ入るのだろうか・・・?