Hi sebb,

maybe we should start doing this in a smaller component and then others
might pick up afterwards.
I guess Codec is a good candidate?

Thomas



On Wed, Feb 12, 2014 at 1:53 AM, sebb <seb...@gmail.com> wrote:

> On 11 February 2014 22:40, Thomas Neidhart <thomas.neidh...@gmail.com>
> wrote:
> > On 02/10/2014 10:16 AM, Thomas Neidhart wrote:
> >> Hi,
> >>
> >> this is an issue I was thinking about for some time now, and it is quite
> >> some recurrent theme that we face in Commons.
> >>
> >> Considering our release practice, it is actually quite hard to come up
> >> with new features as the API is more or less fixed once it has been
> >> included. Ideally, this could or should be handled with alpha/beta
> >> releases were we gather feedback on a new API, but due to limited
> >> resources this does not seem feasible. From experience in Math we also
> >> see that when we want to extend an existing API for further uses, it is
> >> sometimes impossible to be backwards compatible simply because the
> >> original API did not foresee such things, which is quite normal I guess.
> >>
> >> Thus, I would like to discuss another approach. Add certain annotations
> >> to the code that clearly mark the mark the current state of a class/type
> >> and which allows us to break compatibility for such classes even in
> >> minor releases.
> >>
> >> As a first step I would foresee the following annotations:
> >>
> >>  * Internal: Only for internal use, no guarantee about BC or may even be
> >> removed without warning
> >>  * Beta: New API, may be changed in minor releases after gathering
> >> feedback from the community
> >>
> >> Additionally, I would like to introduce also the annotations from the
> >> jcip (jcip.net <http://jcip.net>). I do not know if we can add them as
> >> dependency, but we could also add them ourselves. IMO this would be of
> >> great benefit to our users if it is clear if a certain class is
> >> Immutable, ThreadSafe or Not and one does not have to analyze the source
> >> code to assert him/herself.
> >>
> >> I created a ticket for this, and started with two annotations so far:
> >>
> >> https://issues.apache.org/jira/browse/MATH-1098
> >>
> >> So what do you think about that?
> >
> > It looks like I am pretty much the only one that sees a value in this
> > stuff, so I guess it is better to not change anything.
>
> I am keen that code should be documented to say whether a class is
> supposed to be thread-safe / immutable / not thread-safe etc.
> Also to document how mutable variables are protected (@GuardedBy).
> I think this is important both for the user of the code, and
> particularly for the maintainer.
> There's no point struggling to ensure thread-safety for a class that
> is not intended to be shared across threads, equally if a class is
> supposed to be shareable it is vital to ensure updates don't break it.
>
> I think the best way of doing this is via annotations (plus inline
> comment if really needed).
>
> As an example of why I think annotations are better, compare:
>
> @GuardedBy("this")
> private int index;
>
> with
>
> /*
> * thread-safety of the index is guaranteed by synchronising on the
> class instance
> */
> private int index;
>
>
> > Thomas
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
> > For additional commands, e-mail: dev-h...@commons.apache.org
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
> For additional commands, e-mail: dev-h...@commons.apache.org
>
>

Reply via email to