It isn't in the same category because nothing forces immutability. If
Calcite were to return an ImmutableList declared as a List, then it would
still be immutable (i.e. would throw if mutation is attempted).

The byte[] can't do this.


On Wed, Sep 7, 2016 at 7:25 AM, James Taylor <jamestay...@apache.org> wrote:

> What about APIs with byte[] parameters? Lot's of APIs have this, but almost
> all of the time the byte[] is immutable. That's kind of in the same
> category as what-if String were mutable, no?
>
> On Tue, Sep 6, 2016 at 2:11 PM, Julian Hyde <jh...@apache.org> wrote:
>
> > How bad would it be for API designers and users if java.lang.String were
> > mutable? I would say really, really bad. You could add a lot of comments
> to
> > the API documentation, but you’d never really be sure that everyone was
> > adhering to the contract.
> >
> > > On Sep 6, 2016, at 1:59 PM, Ted Dunning <ted.dunn...@gmail.com> wrote:
> > >
> > > What is so bad about declaring that variable as a List and making it an
> > > ImmutableList underneath?
> > >
> > > Guard it in the programmer's mind by comments and naming. And if they
> > don't
> > > believe you, it still can't be changed.
> > >
> > > This avoids Guava leakage in the API and still gives you (nearly) all
> of
> > > the benefits of the ImmutableList type.
> > >
> > > Kind of give a little to get a little.
> > >
> > >
> > >
> > > On Wed, Sep 7, 2016 at 5:10 AM, Julian Hyde <jh...@apache.org> wrote:
> > >
> > >> What is so bad about Guava? I have always found it to be a high
> quality
> > >> library. I hear that they have broken backwards compatibility on one
> or
> > two
> > >> occasions, but I’ve never been affected by that personally.
> > >>
> > >>> On Sep 6, 2016, at 12:04 PM, Andrew Purtell <apurt...@apache.org>
> > wrote:
> > >>>
> > >>> No argument that naming should set expectations of immutability if
> > that's
> > >>> what should be conveyed, but Guava types (or Guava anything) is a
> means
> > >> to
> > >>> an end that can inflict significant pain on downstreamers.
> > >>>
> > >>> On Tue, Sep 6, 2016 at 11:59 AM, Julian Hyde <jh...@apache.org>
> wrote:
> > >>>
> > >>>> Calcite’s API has a large surface area. The API consists not just of
> > >>>> method calls, but also data objects. For example, the Project class
> > [1]
> > >>>> represents a project node in a relational algebra expression. Its
> main
> > >>>> field is “public final ImmutableList<RexNode> exps”. It is very
> > >> important
> > >>>> that everyone, especially the client, understands that that list is
> > >>>> immutable. When you create a Project, you do not need to make a
> > >> defensive
> > >>>> copy of the list because no one is able to modify it.
> > >>>>
> > >>>> Imagine the mayhem if java.lang.String was mutable. As an API
> designer
> > >> you
> > >>>> would have to spell out whether the caller or the provider is
> allowed
> > to
> > >>>> change the string, and at what time. You would worry about thread
> > >> safety,
> > >>>> if the string has been shared with another thread. Well, I believe
> > that
> > >>>> Guava immutable collections prevent the same kinds of mayhem. I
> would
> > >> call
> > >>>> that good API design.
> > >>>>
> > >>>> The immutable collections and functions are in every Guava version,
> so
> > >> we
> > >>>> really don’t care which Guava version we use, as long as it is not
> > >> shaded.
> > >>>>
> > >>>> Julian
> > >>>>
> > >>>> [1] https://calcite.apache.org/apidocs/org/apache/calcite/
> > >>>> rel/core/Project.html <https://calcite.apache.org/
> > >>>> apidocs/org/apache/calcite/rel/core/Project.html>
> > >>>>
> > >>>>> On Sep 3, 2016, at 6:02 PM, Andrew Purtell <
> andrew.purt...@gmail.com
> > >
> > >>>> wrote:
> > >>>>>
> > >>>>> I wouldn't call embedding Guava types in a public API either a
> > service
> > >>>> for users nor good API design, given the pain I've personally seen
> it
> > >>>> inflict on multiple projects given Google's uncaring nature on cross
> > >>>> version compatibility.
> > >>>>>
> > >>>>>> On Sep 3, 2016, at 5:35 PM, Jacques Nadeau <jacq...@apache.org>
> > >> wrote:
> > >>>>>>
> > >>>>>> Do you have a sense of how often we expose these?
> > >>>>>>
> > >>>>>> One random thought, shade Guava and continue to expose the
> > >> shaded.guava
> > >>>>>> classes in public APIs.
> > >>>>>>
> > >>>>>> People could choose to use the unshaded or shaded.
> > >>>>>>
> > >>>>>>> On Sat, Sep 3, 2016 at 11:26 AM, Julian Hyde <jh...@apache.org>
> > >> wrote:
> > >>>>>>>
> > >>>>>>> I'm not keen on shading Guava, because I want to include some of
> > >>>>>>> Guava's classes in Calcite's public API: for example
> ImmutableList
> > >> and
> > >>>>>>> Function. Using these classes in APIs makes better APIs. They
> > should
> > >>>>>>> be in the JDK, but sadly they're not, so we use Guava.
> > >>>>>>>
> > >>>>>>> Calcite's policy has been to support a wide range of Guava
> versions
> > >>>>>>> but to drop support for really old versions. We can use features
> in
> > >>>>>>> newer versions via reflection, as long as we don't introduce a
> link
> > >>>>>>> dependency (i.e. we call via reflection) and we can provide
> > fallback
> > >>>>>>> for older versions. All of this is identical to our policy for
> > JDKs,
> > >>>>>>> really.
> > >>>>>>>
> > >>>>>>> All we need is that our dependencies move off the really old
> > versions
> > >>>>>>> in a timely fashion.
> > >>>>>>>
> > >>>>>>> Julian
> > >>>>>>>
> > >>>>>>>
> > >>>>>>> On Sat, Sep 3, 2016 at 10:20 AM, Andrew Purtell
> > >>>>>>> <andrew.purt...@gmail.com> wrote:
> > >>>>>>>> Use hbase-shaded-client as Maven dep (1.1 and up)
> > >>>>>>>>
> > >>>>>>>>> On Sep 3, 2016, at 10:12 AM, James Taylor <
> > jamestay...@apache.org>
> > >>>>>>> wrote:
> > >>>>>>>>>
> > >>>>>>>>> Does shading of protobuf on the HBase client work (or is that
> > >>>> dependent
> > >>>>>>> on
> > >>>>>>>>> that brave work Stack is doing)?
> > >>>>>>>>>
> > >>>>>>>>> On Sat, Sep 3, 2016 at 10:10 AM, Andrew Purtell <
> > >>>>>>> andrew.purt...@gmail.com>
> > >>>>>>>>> wrote:
> > >>>>>>>>>
> > >>>>>>>>>> James - When Stack is finished coprocessors will work with
> > shaded
> > >>>>>>>>>> protobuf. Not yet.
> > >>>>>>>>>>
> > >>>>>>>>>>>> On Sep 3, 2016, at 10:07 AM, James Taylor <
> > >> jamestay...@apache.org
> > >>>>>
> > >>>>>>>>>>> wrote:
> > >>>>>>>>>>>
> > >>>>>>>>>>> Also agree - shading of guava & protobuf would be super
> > valuable.
> > >>>>>>> Phoenix
> > >>>>>>>>>>> ended up not supporting shading of protobuf because of
> > >> difficulties
> > >>>>>>>>>> getting
> > >>>>>>>>>>> it to work (maybe because HBase dependency?). I think we
> > support
> > >>>>>>> shading
> > >>>>>>>>>> of
> > >>>>>>>>>>> Guava, though. Is that correct, Sergey?
> > >>>>>>>>>>>
> > >>>>>>>>>>>> On Sat, Sep 3, 2016 at 10:02 AM, Jacques Nadeau <
> > >>>> jacq...@apache.org>
> > >>>>>>>>>> wrote:
> > >>>>>>>>>>>>
> > >>>>>>>>>>>> +1 on shading guava/protobuf.
> > >>>>>>>>>>>>
> > >>>>>>>>>>>> On Sat, Sep 3, 2016 at 9:48 AM, Andrew Purtell <
> > >>>>>>>>>> andrew.purt...@gmail.com>
> > >>>>>>>>>>>> wrote:
> > >>>>>>>>>>>>
> > >>>>>>>>>>>>> Since Calcite should become a widely used library (smile) I
> > >>>> think it
> > >>>>>>>>>>>> would
> > >>>>>>>>>>>>> be prudent to shade Guava and protobuf if Calcite depends
> on
> > >>>> them.
> > >>>>>>> Then
> > >>>>>>>>>>>> you
> > >>>>>>>>>>>>> will play very nicely indeed on the classpath no matter
> what
> > >>>>>>> versions
> > >>>>>>>>>> are
> > >>>>>>>>>>>>> required by calling code.
> > >>>>>>>>>>>>>
> > >>>>>>>>>>>>> Jacques - Good lord. Let me see about shading HBase use of
> > >>>> Guava, or
> > >>>>>>>>>>>>> eliminating it. Unfortunately that will be no help in the
> > short
> > >>>>>>> term.
> > >>>>>>>>>>>>> Related, our Stack is wrestling with shading protobuf
> > already,
> > >>>> and
> > >>>>>>> is
> > >>>>>>>>>>>> neck
> > >>>>>>>>>>>>> deep in the Swamp of Classloading at the moment.
> > >>>>>>>>>>>>>
> > >>>>>>>>>>>>>> On Sep 3, 2016, at 9:06 AM, Jacques Nadeau <
> > >> jacq...@apache.org>
> > >>>>>>>>>> wrote:
> > >>>>>>>>>>>>>>
> > >>>>>>>>>>>>>> It isn't a real solution but in Drill we solved the HBase
> > >>>>>>>>>>>> incompatibility
> > >>>>>>>>>>>>>> issue on the server side (for tests only) by patching
> Guava
> > 18
> > >>>> to
> > >>>>>>>>>> allow
> > >>>>>>>>>>>>> the
> > >>>>>>>>>>>>>> HBase Guava calls that are missing. They are really quite
> > >>>> trivial
> > >>>>>>> and
> > >>>>>>>>>>>>>> support Andrew's arguments that Guava is the devil...
> > >>>>>>>>>>>>>>
> > >>>>>>>>>>>>>> https://github.com/apache/drill/blob/master/exec/java-
> > >>>>>>>>>>>>> exec/src/main/java/org/apache/
> drill/exec/util/GuavaPatcher.
> > >> java
> > >>>>>>>>>>>>>>
> > >>>>>>>>>>>>>> On Sat, Sep 3, 2016 at 8:16 AM, Andrew Purtell <
> > >>>>>>>>>>>> andrew.purt...@gmail.com
> > >>>>>>>>>>>>>>
> > >>>>>>>>>>>>>> wrote:
> > >>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>> While that seems very unfriendly of them, the main issue
> is
> > >>>> Guava
> > >>>>>>> is
> > >>>>>>>>>>>> the
> > >>>>>>>>>>>>>>> devil (and protobuf is a minor demon). Would shading be
> an
> > >>>> option?
> > >>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>> On Sep 3, 2016, at 2:03 AM, CPC <acha...@gmail.com>
> > wrote:
> > >>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>> Cassandra driver 3.x require min guava 16.0.1. If it
> > detects
> > >>>> an
> > >>>>>>>>>>>> earlier
> > >>>>>>>>>>>>>>>> version in classpath it stops working.
> > >>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>> On Sep 3, 2016 04:26, "Julian Hyde" <jh...@apache.org>
> > >>>> wrote:
> > >>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>> James & Andrew, I hear you. We’ll stay on Guava 12 if
> we
> > >> have
> > >>>>>>> to.
> > >>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>> But can we try an experiment to see if it’s possible to
> > get
> > >>>> away
> > >>>>>>>>>>>> with
> > >>>>>>>>>>>>>>> 14?
> > >>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>> I propose that Maryann (who is developing the branch of
> > >>>> Phoenix
> > >>>>>>>>>> that
> > >>>>>>>>>>>>>>> uses
> > >>>>>>>>>>>>>>>>> Calcite) tries running with https://github.com/apache/
> > >>>>>>>>>>>>> calcite/pull/277
> > >>>>>>>>>>>>>>> <
> > >>>>>>>>>>>>>>>>> https://github.com/apache/calcite/pull/277>. If we
> > >> discover
> > >>>>>>>>>>>> problems,
> > >>>>>>>>>>>>>>> we
> > >>>>>>>>>>>>>>>>> can try various solutions, like make the DateRangeRules
> > >>>>>>> disabled by
> > >>>>>>>>>>>>>>> default
> > >>>>>>>>>>>>>>>>> (these, and the Druid adapter, are the only parts of
> > >> Calcite
> > >>>>>>> that
> > >>>>>>>>>>>> need
> > >>>>>>>>>>>>>>>>> Guava 14), or even copy the Guava classes that we need.
> > If
> > >>>> there
> > >>>>>>>>>>>>> aren’t
> > >>>>>>>>>>>>>>>>> problems, it means that we’ve slipped out of the
> shackles
> > >> of
> > >>>>>>>>>> inertia
> > >>>>>>>>>>>>>>> that
> > >>>>>>>>>>>>>>>>> are trying to drag us into an early grave.
> > >>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>> Julian
> > >>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>> On Sep 2, 2016, at 5:35 PM, James Taylor <
> > >>>>>>> jamestay...@apache.org>
> > >>>>>>>>>>>>>>> wrote:
> > >>>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>> On the server-side, HBase depends on Guava 12 (because
> > >>>> Hadoop
> > >>>>>>>>>>>> depends
> > >>>>>>>>>>>>>>> on
> > >>>>>>>>>>>>>>>>>> the same). For that reason, we've made sure Phoenix
> can
> > >> work
> > >>>>>>> with
> > >>>>>>>>>>>>> this
> > >>>>>>>>>>>>>>>>>> version too. Phoenix may not need to depend on Calcite
> > on
> > >>>> the
> > >>>>>>>>>>>>>>>>> server-side,
> > >>>>>>>>>>>>>>>>>> and Phoenix and HBase both have shading, so there may
> be
> > >>>> some
> > >>>>>>>>>>>> avenues
> > >>>>>>>>>>>>>>> of
> > >>>>>>>>>>>>>>>>>> escape.
> > >>>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>> Sorry for the muddled answer.
> > >>>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>>> On Fri, Sep 2, 2016 at 5:21 PM, Andrew Purtell <
> > >>>>>>>>>>>> apurt...@apache.org
> > >>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>> wrote:
> > >>>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>>> Use of Guava 14 introduces at least a compile time
> > >> problem
> > >>>>>>> with
> > >>>>>>>>>>>>> HBase,
> > >>>>>>>>>>>>>>>>> upon
> > >>>>>>>>>>>>>>>>>>> which Phoenix depends, so I'm not sure Phoenix can
> move
> > >>>> off of
> > >>>>>>>>>> 13.
> > >>>>>>>>>>>>> I'd
> > >>>>>>>>>>>>>>>>> be
> > >>>>>>>>>>>>>>>>>>> happy to be proven wrong.
> > >>>>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>>>> On Fri, Sep 2, 2016 at 4:35 PM, Julian Hyde <
> > >>>>>>> jh...@apache.org>
> > >>>>>>>>>>>>>>> wrote:
> > >>>>>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>>>> Calcite currently supports a wide range of Guava
> > >> versions,
> > >>>>>>> from
> > >>>>>>>>>>>>>>> 12.0.1
> > >>>>>>>>>>>>>>>>> to
> > >>>>>>>>>>>>>>>>>>>> 19.0*. For https://issues.apache.org/
> > >>>>>>> jira/browse/CALCITE-1334 <
> > >>>>>>>>>>>>>>>>>>>> https://issues.apache.org/jira/browse/CALCITE-1334>
> > I’d
> > >>>>>>> like to
> > >>>>>>>>>>>>> use
> > >>>>>>>>>>>>>>>>>>>> RangeSet, which was introduced in Guava 14.
> > >>>>>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>>>> Would anyone have a problem if we made Calcite’s
> > minimum
> > >>>>>>> Guava
> > >>>>>>>>>>>>>>> version
> > >>>>>>>>>>>>>>>>>>>> 14.0.1?
> > >>>>>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>>>> I see that Hive uses 14.0.1, Phoenix uses 13, Drill
> > uses
> > >>>> 18.
> > >>>>>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>>>> Julian
> > >>>>>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>>>> * Except for the Druid adapter, which requires 14;
> see
> > >>>>>>>>>>>>>>>>>>>> https://issues.apache.org/jira/browse/CALCITE-1325
> <
> > >>>>>>>>>>>>>>>>>>>> https://issues.apache.org/jira/browse/CALCITE-1325>
> > >>>>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>>> --
> > >>>>>>>>>>>>>>>>>>> Best regards,
> > >>>>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>>> - Andy
> > >>>>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>>> Problems worthy of attack prove their worth by
> hitting
> > >>>> back. -
> > >>>>>>>>>>>> Piet
> > >>>>>>>>>>>>>>> Hein
> > >>>>>>>>>>>>>>>>>>> (via Tom White)
> > >>>>>>>
> > >>>>
> > >>>>
> > >>>
> > >>>
> > >>> --
> > >>> Best regards,
> > >>>
> > >>>  - Andy
> > >>>
> > >>> Problems worthy of attack prove their worth by hitting back. - Piet
> > Hein
> > >>> (via Tom White)
> > >>
> > >>
> >
> >
>

Reply via email to