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) > >> > >> > >