Totally understandable, but then I think the Go team should also drop any 
proposals related to “improved error handling” - because you are going to 
arrive back where you started - maybe with the a slightly different syntax and 
that hardly seems worth the effort. Great engineering is built by standing on 
the shoulders of giants. I haven’t seen any arguments that refute their 
findings.

> On Oct 24, 2022, at 10:52 PM, Ian Lance Taylor <i...@golang.org> wrote:
> 
> On Mon, Oct 24, 2022 at 8:49 PM Robert Engels <reng...@ix.netcom.com 
> <mailto:reng...@ix.netcom.com>> wrote:
>> 
>> I’ve read that many times and I don’t believe it holds much water. Even the 
>> example cited about handling the inability to open a file - the function 
>> can’t handle this because it does not know the intent which leads to the
>> 
>> If err != nil {
>>  return err
>> }
>> 
>> boilerplate. This is exactly what checked exceptions are designed to address.
>> 
>> Sure, it you don’t properly decompose your functions the Go error handling 
>> makes this safer, but properly decompose the functions and checked 
>> exceptions make things far far easier.
> 
> Thanks, but this has been discussed at great length in the past.  We
> don't need to rehash yet again.
> 
> Ian
> 
> 
> 
>>> On Oct 24, 2022, at 10:28 PM, Ian Lance Taylor <i...@golang.org> wrote:
>>> 
>>> On Mon, Oct 24, 2022 at 5:57 PM Robert Engels <reng...@ix.netcom.com> 
>>> wrote:
>>>> 
>>>> But that highlights the value of exceptions - the non error path is very 
>>>> clean. For example when writing a file - it often doesn’t matter the 
>>>> reason it failed within the write function - could be an invalid path, 
>>>> illegal file name , out of disk space.  If the code is properly decomposed 
>>>> that function can’t handle it - so it throws - and hopefully a higher 
>>>> level function is able to cope (by handling the specific exception) - 
>>>> maybe asking the user for a different file name or a different destination 
>>>> device.
>>>> 
>>>> And the writing function can easily cleanup any temp state due to the 
>>>> stack unwinding and AutoClosable, etc.
>>> 
>>> I did not mean to imply that that was the only consideration for error 
>>> handling.
>>> 
>>> Go style is to avoid exceptions for other reasons
>>> (https://go.dev/doc/faq#exceptions).
>>> 
>>> Ian
>>> 
>>> 
>>>>>> On Oct 24, 2022, at 6:18 PM, Ian Lance Taylor <i...@golang.org> wrote:
>>>>> 
>>>>> On Sun, Oct 23, 2022 at 9:31 PM 'Daniel Lepage' via golang-nuts
>>>>> <golang-nuts@googlegroups.com> wrote:
>>>>> 
>>>>> ...
>>>>> 
>>>>> 
>>>>>> 3. Streamlining shouldn't only apply to error handling that terminates 
>>>>>> the function.
>>>>>> 
>>>>>> Unlike panics, errors are values, and should be treated as such, which 
>>>>>> means that the calling function should be able to decide what to do, and 
>>>>>> this should include continuing. Frequently it won't - a lot of error 
>>>>>> handling is just return fmt.Errorf("more context %w", err) - but any 
>>>>>> proposal that assumes that it *always* won't is, IMO, confusing errors 
>>>>>> with panics. This is the question that first started this thread - I 
>>>>>> didn't understand why all the existing error proposals explicitly 
>>>>>> required that a function terminate when it encounters an error, and 
>>>>>> AFAICT the answer is "because people are used to thinking of errors more 
>>>>>> like panics than like return values".
>>>>> 
>>>>> For what it's worth, I see this differently.  The existing language is
>>>>> not going to go away, and it's pretty good at handling the cases where
>>>>> an error occurs and the function does not return.  Those cases are by
>>>>> their nature all distinct.  They are not boilerplate.  The way we
>>>>> write them today is fine: easy to read and not too hard to write.
>>>>> When people writing Go complain about error handling, what they are
>>>>> complaining about is the repetitive boilerplate, particularly "if err
>>>>> != nil { return nil, err }".  If we make any substantive changes to
>>>>> the language or standard library for better error handling, that is
>>>>> what we should address.  If we can address other cases, fine, but as
>>>>> they already work OK they should not be the focus of any substantive
>>>>> change.
>>>>> 
>>>>> 
>>>>>> Is part of the problem that the discussion around the 
>>>>>> try/check/handle/etc. proposals got so involved that nobody wants to 
>>>>>> even consider anything that looks too similar to those? Would it be more 
>>>>>> palatable if I proposed it with names that made it clearer that this is 
>>>>>> about the consolidation of error handling rather than an attempt to 
>>>>>> replace it entirely?
>>>>>> 
>>>>>> onErrors {
>>>>>>  if must Foo(must Bar(), must Baz()) > 1 {
>>>>>>    ...
>>>>>> }
>>>>>> } on err {
>>>>>> ...
>>>>>> }
>>>>> 
>>>>> While error handling is important, the non-error code path is more
>>>>> important.  Somebody reading a function should be able to easily and
>>>>> naturally focus on the non-error code.  That works moderately well
>>>>> today, as the style is "if err != nil { ... }" where the "..." is
>>>>> indented out of the normal flow.  It's fairly easy for the reader to
>>>>> skip over the error handling code in order to focus on the non-error
>>>>> code.  A syntactic construct such as you've written above buries the
>>>>> lede: what you see first is the error path, but in many cases you
>>>>> actually want to focus on the non-error path.
>>>>> 
>>>>> Ian
>>>>> 
>>>>> --
>>>>> You received this message because you are subscribed to the Google Groups 
>>>>> "golang-nuts" group.
>>>>> To unsubscribe from this group and stop receiving emails from it, send an 
>>>>> email to golang-nuts+unsubscr...@googlegroups.com.
>>>>> To view this discussion on the web visit 
>>>>> https://groups.google.com/d/msgid/golang-nuts/CAOyqgcXHaQk9TfuAz-TUFCsz_-0kDKa_14f3gYER2ufHbhM73Q%40mail.gmail.com.
>>> 
>>> --
>>> You received this message because you are subscribed to the Google Groups 
>>> "golang-nuts" group.
>>> To unsubscribe from this group and stop receiving emails from it, send an 
>>> email to golang-nuts+unsubscr...@googlegroups.com.
>>> To view this discussion on the web visit 
>>> https://groups.google.com/d/msgid/golang-nuts/CAOyqgcUBs8UWdHMji-gLK0Z_Lt1mZ59tFaK9YT3UzEQ%2BPYKU8A%40mail.gmail.com.
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "golang-nuts" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to golang-nuts+unsubscr...@googlegroups.com.
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/golang-nuts/CAOyqgcUDCMegGnDHJRxqwBnqt3jaEtCoXJJ9LYFP0kGCbj0Yvw%40mail.gmail.com
>  
> <https://groups.google.com/d/msgid/golang-nuts/CAOyqgcUDCMegGnDHJRxqwBnqt3jaEtCoXJJ9LYFP0kGCbj0Yvw%40mail.gmail.com>.

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/9853839F-86E4-4B82-A02D-D53CDFB1197A%40ix.netcom.com.

Reply via email to