https://issues.apache.org/jira/browse/CASSANDRA-20038
On Wed, Oct 30, 2024 at 2:40 PM Brandon Williams <dri...@gmail.com> wrote: > Allow in tests, forbid elsewhere is my vote and simple to implement. > > Kind Regards, > Brandon > > On Wed, Oct 30, 2024 at 6:46 AM Štefan Miklošovič > <smikloso...@apache.org> wrote: > > > > against vars: > > > > Benjamin > > Stefan > > Benedict > > Yifan > > > > somewhere in the middle: > > > > Dinesh > > > > Caleb +1 in tests and +0 in prod code. > > David - against flat out banning, limiting it just for some places > > > > Josh prod / test on/off switch. > > > > for: > > > > Jon > > > > Correct me if I am wrong and I have "miscategorized" somebody. > > > > From what I see, I think the outcome is that we might use this in tests > and let's just forbid it in prod code. My reasoning behind this is that we > might all learn how to live with this in tests and we may re-evaluate in > the future if its usage proved to be beneficial and we are comfortable to > have it in prod code as well (or we go to ban its usage in tests too). In > other words, if the majority just can't live without this in prod code we > can take a look at this again in the future. > > > > Not banning it in tests does not mean that from now on we need to use > vars there. It just means that tests which will introduce the usage of vars > will not be rejected. > > > > Does this sound reasonable to everybody? > > > > On Wed, Oct 30, 2024 at 12:31 PM Benjamin Lerer <ble...@apache.org> > wrote: > >> > >> I recently faced some var usage in the CQL layer part where it was > making the code pretty hard to understand. I am in favor of prohibiting it. > >> > >> Le mar. 29 oct. 2024 à 20:32, Caleb Rackliffe <calebrackli...@gmail.com> > a écrit : > >>> > >>> Josh's example of "good" usage seems defensible, because the declared > type is already obfuscated to Collection anyway, and my eyeballs are going > to skip to the right anyway to see the instantiated type. I'm +0 on > prohibiting it in non-test code, and -1 on prohibiting it in tests. > >>> > >>> On Tue, Oct 29, 2024 at 2:23 PM Jon Haddad <j...@rustyrazorblade.com> > wrote: > >>>> > >>>> When I first saw var as a Java keyword, my initial reaction was one > of skepticism for the reasons already mentioned. However, in practice, > I've been using var for years across many code bases (Java and Kotlin) and > have never had an issue with readability. I find it to be significantly > more pleasant to work with. > >>>> > >>>> Jon > >>>> > >>>> > >>>> > >>>> > >>>> On Tue, Oct 29, 2024 at 12:13 PM Štefan Miklošovič < > smikloso...@apache.org> wrote: > >>>>> > >>>>> I get that there might be some situations when its usage does not > pose any imminent problem but the question is how we are going to enforce > that _at scale_? What is allowed and what not ... Sure we can have a code > style for that, but its existence itself does not guarantee that everybody > will adhere to that _all the time_. People are people and make mistakes, > stuff is overlooked etc. > >>>>> > >>>>> Upon the review we will argue whether "this particular usage of var > is meaningful or not" and "if the codestyle counts with this or not" and as > many reviews we will have there will be so many outcomes. Dozens of people > contribute to the code and more than that reads it, everybody has some > opinion about that ... Sure, just use var when you prototype etc but I > don't think it is a lot to ask to merge it without vars. Come on ... > >>>>> > >>>>> On Tue, Oct 29, 2024 at 8:08 PM Yifan Cai <yc25c...@gmail.com> > wrote: > >>>>>> > >>>>>> I am in favor of disallowing the `var` keyword. > >>>>>> > >>>>>> It does not provide a good readability, especially in the > environments w/o type inference, e.g. text editor or github site. > >>>>>> > >>>>>> It could introduce performance degradation without being noticed. > Consider the following code for example, > >>>>>> > >>>>>> Set<String> allNames() > >>>>>> { > >>>>>> return null; > >>>>>> } > >>>>>> > >>>>>> boolean contains(String name) > >>>>>> { > >>>>>> var names = allNames(); > >>>>>> return names.contains(name); > >>>>>> } > >>>>>> > >>>>>> Then, allNames is refactored to return List later. The contains > method then runs slower. > >>>>>> > >>>>>> List<String> allNames() > >>>>>> { > >>>>>> return null; > >>>>>> } > >>>>>> > >>>>>> > >>>>>> - Yifan > >>>>>> > >>>>>> On Tue, Oct 29, 2024 at 11:53 AM Josh McKenzie < > jmcken...@apache.org> wrote: > >>>>>>> > >>>>>>> (sorry for the double-post) > >>>>>>> > >>>>>>> Jeremy Hanna kicked this link to a style guideline re: inference > my way. Interesting read for those that are curious: > https://openjdk.org/projects/amber/guides/lvti-style-guide > >>>>>>> > >>>>>>> On Tue, Oct 29, 2024, at 2:47 PM, Josh McKenzie wrote: > >>>>>>> > >>>>>>> To illustrate my position from above: > >>>>>>> > >>>>>>> Good usage: > >>>>>>> > >>>>>>> Collection<String> names = new ArrayList<>(); > >>>>>>> > >>>>>>> becomes > >>>>>>> > >>>>>>> var names = new ArrayList<String>(); > >>>>>>> > >>>>>>> > >>>>>>> Bad usage: > >>>>>>> > >>>>>>> Collection<String> names = myObject.getNames(); > >>>>>>> > >>>>>>> becomes > >>>>>>> > >>>>>>> var names = myObject.getNames(); > >>>>>>> > >>>>>>> > >>>>>>> Effectively, anything that's not clearly redundant in assignment > shouldn't use inference IMO. Thinking more deeply on this as well, I think > part of what I haven't loved is the effective splitting of type information > when constructing generics: > >>>>>>> > >>>>>>> Map<InetAddressAndPort, RequestFailureReason> > failureReasonsbyEndpoint = new ConcurrentHashMap<>(); > >>>>>>> > >>>>>>> vs. > >>>>>>> > >>>>>>> var failureReasonsByEndpoint = new > ConcurrentHashMap<InetAddressAndPort, RequestFailureReason>(); > >>>>>>> > >>>>>>> > >>>>>>> I strongly agree that we should optimize for readability, and I > think using type inference to the extreme of every case where it's > allowable would be the opposite of that. That said, I do believe there's > cases where judicious use of type inference make a codebase more readable > rather than less. > >>>>>>> > >>>>>>> All that said, accommodating nuance is hard when it comes to style > guidelines. A clean simple policy of "don't use type inference outside of > testing code" is probably more likely to hold up over time for us than > having more nuanced guidelines. > >>>>>>> > >>>>>>> On Tue, Oct 29, 2024, at 2:19 PM, Štefan Miklošovič wrote: > >>>>>>> > >>>>>>> Yes, for now it is pretty much just in SAI. I wanted to know if > this is a thing from now on or where we are at with that ... > >>>>>>> > >>>>>>> I am afraid that if we don't make this "right" then we will end up > with a codebase with inconsistent usage of that and it will be even worse > to navigate in it in the long term. > >>>>>>> > >>>>>>> I would either ban its usage or allow it only in strictly > enumerated situations. However, that is just hard to check upon reviews > with 100% accuracy and I don't think there is some "checker" to check > allowed usages for us. That being said and to be on the safe side of things > I would just ban it completely. > >>>>>>> > >>>>>>> Sometimes I am just reading the code from GitHub and it might be > also tricky to review PRs. Not absolutely every PR is reviewed in IDE, some > reviews are given without automatically checking it in IDE too and it would > just make life harder for reviewers if they had to figure out what the > types are etc ... > >>>>>>> > >>>>>>> On Tue, Oct 29, 2024 at 7:10 PM Brandon Williams <dri...@gmail.com> > wrote: > >>>>>>> > >>>>>>> On Tue, Oct 29, 2024 at 12:15 PM Štefan Miklošovič > >>>>>>> <smikloso...@apache.org> wrote: > >>>>>>> > I think this is a new concept here which was introduced recently > with support of Java 11 / Java 17 after we dropped 8. > >>>>>>> > >>>>>>> To put a finer point on that, 4.1 has 3 hits, none of which are > valid, > >>>>>>> while 5.0 has 172. If 'sai' is added to the 5.0 grep, 85% of them > are > >>>>>>> retained. > >>>>>>> > >>>>>>> Kind Regards, > >>>>>>> Brandon > >>>>>>> > >>>>>>> > >>>>>>> >