<!DOCTYPE html><html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<p>Hi,<br>
I've been following this thread from afar. To be honest, the cost
in terms of spec complexity don't seem to be worth the increased
expressiveness.</p>
<p>(A) seems simple enough, but I tend to agree that it does look a
bit ad-hoc, and will break when more complex control flow is
involved.</p>
<p>With (C) and (D) we seem to hit diminishing returns quickly (do
we really want to know which assignments are or aren't possible
given the type of exception thrown by statement and the catch
we're in - seems overkill).</p>
<p>(B) seems the best compromise, in the sense that at least there's
only a predicate on statement. But DA/DU is already a complex
beast as it is, and I just don't see enough of a justification to
"fix" this. Of course this subjective.<br>
</p>
<p>Maurizio<br>
</p>
<div class="moz-cite-prefix">On 16/07/2024 18:57, Archie Cobbs
wrote:<br>
</div>
<blockquote type="cite" cite="mid:CANSoFxuFOJ_29JZHAddqRzuXJguu5msX46AyxhuxLhNsBCWwYA@mail.gmail.com">
<div dir="ltr">
<div>OK so just to summarize the various options...</div>
<div><br>
</div>
<div>A. "Last assignment" - the original simple fix that only
applies when the last statement is an assignment statement</div>
<div>B. "Simple throws" - classify all statements in two buckets
"can throw" and "cannot throw"; assume any "can throw"
statement can throw anything type of exception<br>
</div>
<div>C. "Complex throws, any checked" - classify all statements
by which exception types they can throw; assume methods can
throw any unchecked or checked exceptions</div>
<div>D. "Complex throws, declared checked" - classify all
statements by which exception types they can throw; assume
methods can throw any unchecked or declared
checked exceptions<br>
</div>
<div><br>
</div>
<div>And of course "do nothing" is always the default option :)<br>
</div>
<div><br>
</div>
<div>I'd also like to hear other folks' opinions.</div>
<div><br>
</div>
<div>-Archie<br>
</div>
</div>
<br>
<div class="gmail_quote">
<div dir="ltr" class="gmail_attr">On Tue, Jul 16, 2024 at
12:35 PM Attila Kelemen <<a href="mailto:attila.kelemen85@gmail.com" moz-do-not-send="true" class="moz-txt-link-freetext">attila.kelemen85@gmail.com</a>>
wrote:<br>
</div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div dir="ltr">
<div class="gmail_quote">
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div dir="ltr">
<div class="gmail_quote">
<div style="margin-left:40px"><span style="font-family:monospace">final int x;</span></div>
<div style="margin-left:40px"><span style="font-family:monospace">int neg_x = 0;<br>
</span></div>
<div style="margin-left:40px"><span style="font-family:monospace">try {</span></div>
<div style="margin-left:40px"><span style="font-family:monospace"> x = method();</span></div>
<div style="margin-left:40px"><span style="font-family:monospace"> neg_x = -x;
// "trailing trivial stuff"<br>
</span></div>
<div style="margin-left:40px"><span style="font-family:monospace">} catch (Exception
e) {</span></div>
<div style="margin-left:40px"><span style="font-family:monospace"> x = 0;<br>
</span></div>
<div style="margin-left:40px"><span style="font-family:monospace">}</span><br>
</div>
<div><br>
</div>
<div>
<div>At this point, is it even worth it to do this
more complicated analysis? It's not much gain
for all that work when compared to the original
simpler fix.</div>
</div>
</div>
</div>
</blockquote>
<div><br>
</div>
<div>If it is worth it or not of course is a question of
preference. To my mind, it is much cleaner than the
special rule for "last statement is assignment". I think
the only way to decide if it is worth it or not is if
many more people would voice their opinion. To me it
just feels too special to talk about the "last
assignment" and what is that last statement.</div>
<div><br>
</div>
<div>To me actually the most strange property of the "last
assignment" rule is that an "if-else" chain would not
work. Not so much that I want to make one more trivial
assignment. But I think if the rule wants to allow the
"if-else" chain then it is probably easier to allow your
last example as well.</div>
<div><br>
</div>
<div>As for the exceptions: There can be other middle
grounds here to simplify stuff. I originally thought
that a statement or expression can either throw an
exception or not, and if it can, we assume that it may
throw literally anything (so, `x = a.b;` is assumed to
potentially throw an `IOException`). That would make the
rules a lot simpler, yet would be still less surprising
in my opinion.</div>
</div>
</div>
</blockquote>
</div>
<br clear="all">
<br>
<span class="gmail_signature_prefix">-- </span><br>
<div dir="ltr" class="gmail_signature">Archie L. Cobbs<br>
</div>
</blockquote>
</body>
</html>