scala.collection.immutable.:: が実はimmutableではない件が気になったのでちょっとだけ昔のソース調べてみた

まぁ上記の会話のとおり、普通とくに問題ないはずです。で、ちょっと調べてみた結果
まず、githubscala/scalaからたどれる、一番古いとおもわれる v1.0.0-b5 というtag
https://github.com/scala/scala/blob/v1.0.0-b5/sources/scala/$colon$colon.scala#L18

  • immutableになってる
  • serializeのためのwriteObjectとかreadObjectなどは存在しない
  • ListBufferはない

つぎに v1.4.0+3

v2.0.0

さらにその間のcommitまで調べてみて、見つけた
https://github.com/scala/scala/commit/99b6474dabc8a4bcc9282f041d48fb9671c4f2b8#L13L914
private[scala] var tlにすると同時に、ListBufferから参照してる


というわけで、serializeのためではなく、なんらかの理由(パフォーマンスなのか?)でListBufferから直接アクセスして書き換えたいためにprivate[scala] var なフィールを内部に持つようになったんじゃないかなーという勝手な予想。2005-12-21 という、かなり昔からこうなっていたようですね。あと、private[collection] ではなく private[scala] なのは、2.7.7までListはscala packageの直下に置かれていた名残だと思う


追記:

コップ本書いてありましたね、すいません・・・(・ω・`)
http://www.artima.com/pins1ed/implementing-lists.html#22.2