Retiring Checked Exceptions Was: Throwing Functions
Brian Goetz
brian.goetz at oracle.com
Mon Nov 14 23:15:49 UTC 2022
A brief reminder: this is getting out of the charter of amber-dev.
On 11/14/2022 5:58 PM, forax at univ-mlv.fr wrote:
>
>
> ------------------------------------------------------------------------
>
> *From: *"Archie Cobbs" <archie.cobbs at gmail.com>
> *To: *"Nathan Reynolds" <numeralnathan at gmail.com>
> *Cc: *"Brian Goetz" <brian.goetz at oracle.com>, "John Hendrikx"
> <hjohn at xs4all.nl>, "Remi Forax" <forax at univ-mlv.fr>, "amber-dev"
> <amber-dev at openjdk.org>, "amber-spec-experts"
> <amber-spec-experts at openjdk.java.net>, "Ron Pressler"
> <ron.pressler at oracle.com>
> *Sent: *Monday, November 14, 2022 5:33:35 PM
> *Subject: *Re: Retiring Checked Exceptions Was: Throwing Functions
>
> On Sat, Nov 12, 2022 at 5:26 PM Nathan Reynolds
> <numeralnathan at gmail.com> wrote:
>
> > I've found that there are a lot of people out there who
> quietly think checked exceptions are ... pretty OK.
>
> Count me in this camp. Checked exceptions are so much better
> than error return codes.
>
>
> I like checked exceptions also.
>
> But so what? Of course everyone including me is going to have some
> opinion... the deeper question is, what are we trying to optimize
> for in a programming language?
>
> Well I'm sure everyone has an opinion on that question as well..
> but at least that question is a little closer to the heart of the
> matter.
>
> A problem I've seen with programming language design happens in
> other fields as well. Consider building architecture for example.
> Architects can sometimes drift from optimizing for the humans that
> will occupy the space (what should be their goal) to optimizing
> for simplicity, beauty, and elegance (what they really want to be
> their goal).
>
> Simplicity, beauty, and elegance are all well and good until they
> start detracting from the more important goal of serving the
> humans. Have you ever had dinner in a nice restaurant that has
> sleek & beautiful architecture, but because of all the open space
> it's really drafty and because of the hard concrete ceilings and
> resulting terrible acoustics you can barely understand what anyone
> across the table is saying? (yes, that just happened a few weeks ago)
>
> So here's my opinion on what we should be optimizing for, from my
> own little perspective.
>
> I'm not a language designer (those folks are a lot smarter than me
> :) I'm just a regular Java user for 20+ years. My main development
> responsibility right now is an enterprise web application with
> ~150,000 lines of code, plus millions of LOC incorporated by
> reference (Spring, Hibernate, Tomcat, Linux, etc.).
>
> But the windows on my screen are only ~54 lines tall.
>
> That means I can inspect at most 0.03% of the code at any one
> time, and yet I'm supposed to somehow ensure this whole thing
> works properly without any bugs.
>
> Therefore, to me the most important property of a programming
> language is this: how hard is it to look at a chunk of code on the
> screen and be able to convince myself that it will do what it's
> supposed to and not contribute any bugs?
>
> Is most of the critical information there in front of me? Can I
> convince myself I'm looking at a seaworthy vessel of logical
> correctness?
>
> Or are there a bunch of "leaks" that I either have to patch, or
> (almost worse) do a bunch of research to finally realize that in
> fact they really aren't leaks after all?
>
> How hard is it to hunt down the information that's not explicitly
> on the screen that I need to feel confident in what I'm looking at?
>
> No doubt Java would be more simple, beautiful, and elegant without
> checked exceptions. But checked exceptions are explicit
> information on the screen relating to what error cases can
> possibly occur. They appear pretty much when and where you need to
> see them. And the compiler guarantees that you won't accidentally
> miss one.
>
> From the perspective of "Help me prove this code is correct and
> handles all the possible error cases" what's not to love about that??
>
> Features that help my cause:
> - Compile time explicit strong typing
> - Precisely defined semantics (compare to C: order of execution,
> memory model, etc.)
> - Easily accessible Javadocs that specify behavior precisely
> - Compiler warnings
> - @Overrides
> - Checked exceptions
>
> Features that don't help my cause (they're not bad, they're just
> less important):
> - Anything that optimizes for the speed of writing code rather
> than the speed of reading it
> - Anything that optimizes for code brevity (if that were the
> goal, we'd all be using perl!)
>
> An example of the latter is the new "var" keyword. Yes it makes it
> faster to WRITE code, but it makes it a tiny bit slower to READ
> code. It means to understand what "foo" is, I have to do one
> little tiny extra step of type inference in my head. Not a big
> deal, and I'm certainly not opposed to the feature, but I probably
> won't use it much.
>
> Java's "target market" as it were is large enterprise projects.
> Regarding such projects, a wise person once said: /You write code
> once, but you maintain it forever./
>
>
> What if checked exceptions work like unchecked casts ?
>
> What if instead of a compiler error you still have a warning when you
> suppress a checked exception, so you can write code like this
>
> public void m() throws IOException {
> var input = ...
> Runnable runnable = () -> {
> input.read();
> };
> runnable.run()
> ; }
>
> and you get two warnings, one because you have suppressed the
> IOException inside the Runnable and one because you have a throws
> IOException with no IOException thrown inside the body of m() ?
>
> So IOException will work seamlessly with streams, methods that takes
> lambdas, etc.
>
>
>
> -Archie
>
> --
> Archie L. Cobbs
>
>
> Rémi
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/amber-dev/attachments/20221114/71e1b18a/attachment-0001.htm>
More information about the amber-dev
mailing list