Scala2.11から、scala-library.jarがxmlやparsersなどに細かく分かれます

2.10のときは、actorが分離されてなおかつdeprecatedになりましたが、2.11でも(当初言っていたとおり)scala-library.jarがscala-xml.jarとscala-parser-combinators.jarの3つにわかれます。


「3つに分かれる」というのは、これ書いている2.11.0-M4の時点の情報なので、2.11.0.finalが出る際には、変わっている(更に細かく分かれる?)可能性もあります。

2.10からactorはdeprecatedでしたが、scala-xmlscala-parser-combinatorsは(少なくとも今のところ)「deprecatedにするために分けた」というわけではないようです*1


ちなみに、Scalaのcompilerも2.11.0.finalまでに「REPL関連」「Scaladoc関連」「コンパイラ本体」といったように分ける予定があるらしいです。(どのように分けるのかは完全には決まってない?)このコンパイラ側の変更に関しては、おそらく2.11では間に合わなかったみたいで、2.12でやる予定になったみたい。



これにより、androidScalaをやってるユーザーなどにはかなり恩恵がありますね。

Scala2.10.2のscala-library.jarは、訳6.8MByte(7121818byte)だったのが
Scala2.11.0-M4の時点で5.5MByte(5798106byte)になっています。

http://repo1.maven.org/maven2/org/scala-lang/scala-library/2.10.2/
http://repo1.maven.org/maven2/org/scala-lang/scala-library/2.11.0-M4/

これなら、ギリギリproguardやらなくてもそのままいけるかもしれません(試したわけではない)
proguardするしないにかかわらず、Androidでjarのサイズは大問題(proguardの処理自体にも時間かかるし)なので。


また、個人的には以下のようなことを考えてますが、みんないつ頃から対応始めるんでしょうかね

誤解のないようにいっておくと、もちろん依存を追加すれば引き続きxmlやparser-combinatorは使えるので、無理に急ぐ必要はありません*2

まだあまり必要ないでしょうが、Scala2.10以前と、2.11をsbtでcross buildする場合*3は、以下のような感じで地味にif文を書くことになりますScalaのversionと、xmlやparser-combinatorのversionが関係なくなったので、最新の書き方はScala公式ページを見てください。

libraryDependencies <++= scalaVersion{ v =>
  if((v startsWith "2.9") || (v startsWith "2.10")) Seq()
  else Seq(
    "org.scala-lang" % "scala-parser-combinators" % v,
    "org.scala-lang" % "scala-xml" % v
  )
},


あと、モジュールが分かれる話とは関係ないですがついでに書いておくと、普通にsbt0.12.xを使うと、Scala2.11.xでsbt-consoleが動作しません。

https://groups.google.com/d/msg/simple-build-tool/Yz6hDX0lnHg/Bi0bdYmP2SsJ

「sbt0.13.xのlauncherを使ってsbt0.12を起動させる」と使えるようです。もちろん、sbt0.13はScala2.11対応してるようです。

*1:一部のclassが細かくdeprecated指定されたり、削除されたりは行われてますが

*2:が、依存分けられて整理されていたほうがうれしいですよね?という話(依存は少なければそれに越したことはないという話) 

*3:かつ、xmlやparserに依存を続ける場合