On Tue, Apr 25, 2023 at 12:26 PM Kenneth Knowles <k...@apache.org> wrote:

> This is great work. Thanks for writing about it.
>
> I hold a stronger opinion than "the danger of nullness and the validity of
> the warnings depend on the code context": nullness is a solved problem, and
> type systems solved it, decades ago in some languages and more recently in
> Java. Nullness errors are a choice, and we should not choose to have them.
> Treat them as you would treat any other type error.
>
> And I hold even strong opinions than that! Almost all the time, unclear
> nullness/typing has an underlying cause of lack of clarity in design and
> thinking. This is why fixing nullness almost always improves the code, but
> also why it can be difficult to do after the fact, because it can require
> fixing a bad or broken design. But sometimes it is easy, and you should do
> it with gusto in either way :-)
>
> And more! If checkerframework cannot determine the correctness of
> something, probably neither can you. You may think you can, but you are
> probably wrong. And even if you are correct today, the next person coming
> along will not have your internal mental state and will easily break it.
>
> As an example of both of the above: it can be very hard to fix API designs
> like DoFn (or JUnit classes, etc) of the start/doSomething/end variety that
> rely on a caller to invoke methods in a particular order and have
> significant inter-method stateful dependencies that are not at all
> guaranteed by their design.
>

Maybe warrants a new topic, but has there been any talk about what a newer,
more principled Beam 3.0 user facing API might look like and if not,  is it
something you've given some thought to?





> Such APIs are extremely fragile and the source of a huge number of bugs
> because it is very easy and common to invoke methods in an order or
> multiplicity that was not designed for. Not at all coincidentally, it is
> quite hard and annoying to add the needed "Requires" and "Ensures"
> annotations to get them to type check, and also very hard and annoying to
> satisfy those requirements when calling the methods. This is all a feature
> - the design was bad, and the difficulty setting up and satisfying the
> invariants helps you realize it.
>
> /lecture :-)
>
> Kenn
>
> On Tue, Apr 25, 2023 at 9:56 AM Damon Douglas <damondoug...@apache.org>
> wrote:
>
>> Hello Everyone,
>>
>> *For those experienced with Beam*:
>>
>> PR/26413 [1] begins the long journey of addressing [2] which is a subtask
>> of [3].  千里之行,始於足下 :-)
>>
>> *For those beginning on the learning path*:
>>
>> The pull request referenced in the email is not directly related to Beam
>> but involves a Java annotation called SuppressWarnings.  Per its namesake,
>> it suppresses warnings according to the values you set in the annotation.
>> In [2] and [3]'s context the particular setting is "nullness" that
>> suppresses any warnings related to potentially null references in the code.
>>
>> In the Beam repository, we utilize The Checker Framework [4] to help
>> maintain a clean codebase.  When such annotation applies, it will
>> essentially mask these warnings and let the code pass without errors.  When
>> removing the SuppressWarnings with "nullness" annotation, the checks fail.
>>
>> Why is this a big deal?  The danger of nullness and the validity of the
>> warnings depend on the code context.  However, as of this writing there are
>> many Java classes in our repository with the SuppressWarnings annotation.
>> What is the likelihood they are masking something serious?
>>
>> Here in our discussion would be a great place to be practical and relay
>> what can be done when receiving a null-related error from the checker
>> framework.  However, I want to wait after I do more of these and find
>> validation through peer review.  Then, I will follow-up with the dev list.
>>
>> Meanwhile, you can take a look at my attempt in the PR [1].
>>
>> Best,
>>
>> Damon
>>
>> *References*:
>> 1. https://github.com/apache/beam/pull/26413
>> 2. https://github.com/apache/beam/issues/20498
>> 3. https://github.com/apache/beam/issues/20497
>> 4. https://checkerframework.org/
>>
>>
>>
*~Vincent*

Reply via email to