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