catch/rethrow

James Pelcis jpelcis at gmail.com
Wed Jun 7 15:33:12 PDT 2006


I can't say for sure, but I think one of the uses of a LastCatch instead 
of catch (Object) is efficiency of the compiled code.  It knows that the 
code should be called without worrying about if it meets some criteria. 
  Essentially, I believe it's for optimization when all you need to know 
is that something went wrong.

Of course, I could be totally wrong.  If so, I agree that it serves no 
purpose and should be removed or deprecated.

Sean Kelly wrote:
> But then why have catch{} at all?  It's actually less useful than 
> catch(Object) as it provides no facility to rethrow the exception, and 
> it offers nothing over catch(Object) in what it can catch.  Also, it's 
> possible that a LastCatch block may simply be intended to detect a 
> failure condition and perform some operation (similar to stack(failure)) 
> or that it may need to rethrow the exception if some global condition 
> cannot be met.  Sure, you could use catch(Object) in these instances, 
> but then again, what is the purpose of catch{}?  Surely it can't simply 
> be to avoid typing "(Object o)"?
> 
> James Pelcis wrote:
>> The purpose is to inform the user that there has been an error without 
>> overly interrupting the program.  I think the rationale is that after 
>> you have taken the time to handle an exception, why would you rethrow it?
>>
>> If you disagree, you don't need to have the kind of catch.  You can 
>> always catch either Exception or Object and ignore the LastCatch.
>>
>> Sean Kelly wrote:
>>> Johan Granberg wrote:
>>>> Sean Kelly wrote:
>>>>> But it relies on undocumented (I believe) knowledge that all 
>>>>> exceptions in D are objects ...
>>>>> Sean
>>>>
>>>> quote from the specification (statements throw)
>>>> "Expression is evaluated and must be an Object reference. The Object 
>>>> reference is thrown as an exception."
>>>>
>>>> So it is documented that Exceptions is objects.
>>>
>>> Ah, good to know.  But then what is the purpose of catch{}?  Without 
>>> the ability to rethrow, it seems to have marginal utility.
>>>
>>>
>>> Sean



More information about the Digitalmars-d mailing list