Question/suggestion about exceptions
Graham St Jack
grahams at acres.com.au
Tue Oct 24 16:38:12 PDT 2006
Sean Kelly wrote:
> Ary Manzana wrote:
>> Graham St Jack wrote:
>>> Is there a way to automatically keep track of what exceptions may be
>>> thrown by a function or method? Ideally, what I am looking for is
>>> something like Java's "throws" keyword, but I would be happy with
>>> almost anything.
>>>
>>> It is way too hard to develop reliable code of any size that uses
>>> exceptions extensively, because as things change, you lose track of
>>> what exceptions are thrown from where. Some sort of compiler support
>>> would make this a lot easier.
>>>
>>> What I had in mind was an optional compiler warning and a new
>>> "throws" keyword. The compiler would (optionally) issue a warning if
>>> a function or method can throw an exception that it hasn't declared
>>> that it "throws". With this assistance, it becomes is easy to keep
>>> track of what can be thrown from where. Making it a warning and
>>> optional stops it from breaking existing code, and makes quick code
>>> hacks easy to write still.
>>>
>>> Thoughts?
>>
>> I totally support this idea. Is it hard to implement in the compiler?
>> Of course, there should also be a hierarchy of exceptions, just like
>> Java: RuntimeException dosen't signal an error when not try-catching it.
>>
>> Thoughts? :-)
>
> It won't work with extern (C) functions, since the exception list would
> probably be a part of the mangled function name. This is why 'throws'
> goes basically unused in C++, even though the feature is present.
>
>
> Sean
I can't be too hard to implement in the compiler because Java does it
already. However, a lot of people find the discipline of having to think
about exception handling too disruptive to the creative process (I have
mixed feelings too). This is why I suggested adding the feature as an
optional warning. That way you can crank out code without difficulty,
then go back later and think about exception handling.
It doesn't need to work with extern (C) functions because they don't
throw exceptions, and even if they did, you could wrap the problematic
ones in D code so that exceptions would be tracked from there.
I agree that an exception hierarchy is a good thing, and I like the Java
approach of the compiler errors only being generated for exceptions
rather than "errors" like out-of-memory. Something like that could be
done here too because D uses an exception hierarchy too - maybe by
telling the compiler via a switch what exception base class (and all
specializations) you want to be warned about.
More information about the Digitalmars-d
mailing list