Usually (so far always) I try to use immutable collection in Scala, especially so that if I give a reference to a collection to some other part of my program I cannot override the original source by accident. Using breeze, I would like to know: Why was it decided to have DenseVector be a mutable collection?
Is this just a (maybe unwanted) side effect of using in Arrays in the background? If so, why were Arrays used, instead of another (immutable) collection?
Performance.
A DenseVector
backed by anything other than an array would be substantially slower. It could wrap an ImmutableArray
which wraps an Array
, but this would force some operations which can avoid copies by being in-place to copy, maybe interact weirdly with specialization, etc.
I don't know how important this is (I suspect not much), but for people coming to Breeze from numerical computing (instead of from Scala) mutability is expected. E.g. it makes it simpler to port an algorithm which is implemented in Matlab or in R to Breeze.