Please see branch CSV-216 for a KISS implementation that uses a
CSVMutableRecord subclass.

I do not believe this feature warrants creating interfaces or
framework-like code. I do not believe we need to start leaning the JDBC-way.

Gary

On Thu, Aug 17, 2017 at 3:04 PM, Simon Spero <sesunc...@gmail.com> wrote:

> On Aug 15, 2017 8:01 PM, "Gilles" <gil...@harfang.homelinux.org> wrote:
>
> Saying that making record mutable is "breaking" is a bit unfair when we do
> > NOT document the mutability of the class in the first place.
> >
>
> I'm stating a fact: class is currently immutable, change would make it
> mutable; it is functionally breaking.
> I didn't say that you are forbidden to do it; just that it would be unwise,
> particularly if it would be to save a few bytes.
>
>
> Exactly.
>
> TL;DR. This is almost always a breaking semantic change; the safest  ways
> of implementing it are binary breaking; it's unlikely to have a major
> performance impact; it might be better to create a new API module for
> enhancements, with current package as legacy or implementation.
>
> If a class previously exposed no mutators, adding one is usually a major
> change. This is especially true for final classes, but it still affects use
> cases where an instance is owned by another class, which may rely on the
> lack of mutability to avoid making defensive copies.
> Of course, a final class that has a  package-private getter  to a shared
> copy of its backing array could be considered to be sending mixed
> messages...
>
> It is possible that a mutable class might have significant performance
> advantages over an immutable one beyond saving a few bytes. For example, if
> the updates are simple, and depend on the previous value of the cell, then
> a mutable version might have better cache behavior. If there's other
> sources of cache pressure this might have a higher than expected impact.
> The costs of copying the original values might also be relatively
> significant.
>
> For an ETL use case these issues are unlikely to be limiting factors; for a
> start, there's a non-zero chance that a  CSVRecord was extracted  by
> parsing a CSV file. Also a transform will require conversion to some sort
> of Number (or String allocation).
>
> The current API doesn't easily support adding alternate implementations of
> the relevant types. Implementation classes are final, and important  return
> types are concrete.
>
> One solution might be to treat the current code as almost an implementation
> module, define a separate API module, and add extra interfaces and
> alternate  implementations to support  the target use case (mutable
> records, streams, reactivex, transform functions or what have you).
>
> Simon
>

Reply via email to