Allow in tests, forbid elsewhere for now would be my vote.
> On 30 Oct 2024, at 11:45, Š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
> <mailto: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
>> <mailto: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
>>> <mailto: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
>>>> <mailto: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
>>>>> <mailto: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
>>>>>> <mailto: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
>>>>>>>>> <mailto:dri...@gmail.com>> wrote:
>>>>>>>>> On Tue, Oct 29, 2024 at 12:15 PM Štefan Miklošovič
>>>>>>>>> <smikloso...@apache.org <mailto: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
>>>>>>>>
>>>>>>>