Re: Ada exception block does NOT work?



Jean-Pierre Rosen wrote:

There are no predefined exceptions in C++

There are.
In particular, creating a new object on the free store can result in failure due to inability of the system to allocate memory. This is how you create new object on the free store:


int *p1 = new int;
MyType *p2 = new MyType();

etc.

In case of memory allocation error, the above will result in the std::bad_alloc exception being thrown.
This is predefined and standard exception in C++.


therefore things like arithmetic overflow have undefined semantics

The "therefore" part above is not correct. Since there *are* predefined exceptions in C++, dealing with arithmetic anomalies certainly was based on other, unrelated policies.
Whether this is good or bad in any particular context is another issue.



Why do you claim that Ada's exceptions are "better integrated into the language than in the languages that throw and catch them"?

Every sequence of statements can have an exception handler in Ada, while in C++/Java/C# you must add an extra level of nesting.

You add the nesting if you want to handle the exception. If you don't want to handle it, you don't add the nesting. This is rather the result of having a *pair* of parentheses to denote a block, with no sensible way of extending this punctuation. In Ada, "begin" and "end" are not a closed pair and are easier to extend with any other keyword, thus making a "comb" of arbitrary length. But this is a syntax issue.


I treat Ada's "begin" as having implicit "try" if there is any handler downstream. Is there anything inherently wrong in this?

This gives the feeling that dealing with exceptions is something you just put in very special places, while in Ada you are more inclined to considering exceptions everywhere.

But then we will drift to discuss whether it makes sense to deal with exceptions everywhere or maybe only where the actual handler has something to do. I haven't seen enough real Ada code to have any opinion what is good in the Ada context.
Don't you do this:


begin
    -- ...
    Some_Procedure_That_Might_Raise;
    -- ...
end;

and just let the exception (if any) travel up the chain to where there is enough context to actually *do* somethng with the exception?


Note that those other languages can throw regular objects as exceptions

This boils down to the (controversial) question of how much information should be associated to an exception.
[...]
So, you see the question is quite open...

Yes, it is and I understand the concerns you mention. But I'm still not sure about the "integration with the language" issue. In what way the Ada exceptions are more integrated with the language than the C++ exceptions (or take any other language from the "throwing" family)?



-- Maciej Sobczak : http://www.msobczak.com/ Programming : http://www.msobczak.com/prog/ .



Relevant Pages

  • Re: Ada exception block does NOT work?
    ... > parent language in not checking certain core operations. ... generally exceptions ... > But as we know from SPARK, use of Ada in such environments ... >> have propagated out of the scope of their definitions. ...
    (comp.lang.ada)
  • Re: Ada exception block does NOT work?
    ... >> Ada has had exceptions, well integrated with the rest of the language, ... >> since Ada 80. ... > language that has no history issue like this. ... An exception at is handled by the handler, ...
    (comp.lang.ada)
  • Re: Ada exception block does NOT work?
    ... > Note that those other languages can throw regular objects as exceptions, ... Well Ada 83 had exceptions but not objects with dispatching so exceptions ... is far better integrated into the language then in C++. ... In Ada can clone any object without the aid of ...
    (comp.lang.ada)
  • Re: Silly and stupid post-condition or not ?
    ... reason for that is that access types are type-safe (in the absence of ... "All Ada features which require ... the profile and contract of a subprogram. ... it's perfectly reasonable to prove useful things about exceptions. ...
    (comp.lang.ada)
  • Re: Seeking for papers about tagged types vs access to subprograms
    ... `pragma Restrictions ` which should even ... Initially I just wanted to get ride of function returning unconstrained types and the exceptions runtime and keep only the last‑chance handler, but it appears the high level parts of the runtime depends on the exceptions support (ex. ... SPARK is often said to be used for application with time and memory bounds requirement, but I don't know any way to prove timing bounds in SPARK. ... May be there would be a hope to do something similar to what SPARK did, just with bigger consequences, re‑factoring Ada outside of Ada. ...
    (comp.lang.ada)