| Title: | DIGITAL UNIX (FORMERLY KNOWN AS DEC OSF/1) |
| Notice: | Welcome to the Digital UNIX Conference |
| Moderator: | SMURF::DENHAM |
| Created: | Thu Mar 16 1995 |
| Last Modified: | Fri Jun 06 1997 |
| Last Successful Update: | Fri Jun 06 1997 |
| Number of topics: | 10068 |
| Total number of notes: | 35879 |
Hi,
As far as I know, there are at least 4 different ways to handle
exceptions (and especially, synchronous signals as exceptions)
on Digital UNIX V3.2:
1) with the Ada language ;
2) with the C++ language ;
3) with the DECthreads Exception Package ;
4) with the Exception Handling Library.
And, as far as I know too, these exception handling schemes are not
compatible between each other (Well, I don't know precisely to which
extent, but, at least, I have experimented this between DECthreads
and the three others 8-(
Now, I was told that this would be solved with Digital UNIX V4.0.
My questions are the following :
* is it true with V4.0B ? if not, with which release will it be
the case ? and when ?
* does - or will - this "unified exception handling mechanism" encompass
every cases of interoperability ?
Indeed, we can easily ;-) imagine the following scenario :
// pthread_create'd routine :
TRY
{
...
// call an Ada written routine :
ADA_BLOCK :
begin
...
-- call a C or C++ routine
try
{
...
}
...
}
catch/except
{
...
}
...
exception
...
end ADA_BLOCK ;
...
}
CATCH
{
...
}
ENDTRY
So, our requirement is that each function level could rely on the
underlying exception handling mechanism to make its own exception
statements work no matter the exception cause is (namely, a user-
defined exception explicitely thrown or a synchronous signal being
delivered by the system).
I'll be waiting for your comments/answers on this before coming
with other questions on the matter ;-)
Thank you very much for your attention,
Xav
| T.R | Title | User | Personal Name | Date | Lines |
|---|---|---|---|---|---|
| 8958.1 | some info | DECC::SEIGEL | Tue Feb 25 1997 17:07 | 33 | |
Ada, C (SEH), C++, and the native exceptions facility (libexc) all work
fine together (even before V4.0) because Ada, C, and C++ exceptions are
layered on top of the native exceptions facility. They can co-exist
in the same program and catch each other's exceptions. If an Ada or
C exception propagates thru a C++ frame, the C++ runtime handler will
make sure the proper destructors get called.
DECthreads exceptions were a problem because they used their own
home-grown mechanism. However, as of V4.0, DECthreads exceptions
now also uses libexc.
However, there are some things you should keep in mind:
1. You cannot use DECthreads exception mechanisms inside of an Ada
function. I doubt it will even compile.
2. As of v4.0, DECthreads handlers can catch Ada, C, and C++
exceptions, and vice-versa.
3. You might want to avoid using DECthreads exceptions support in a
function that also uses C or C++ exceptions support. I think it
is supposed to work, but it may still have problems.
Note that C++ provides implicit exception handling to ensure
that destructors get called. Hence, you should be careful
about using DECthreads exception support in C++.
If you had more specific questions, they might be easier to answer.
For example, what exactly are you looking for in terms of
inter-operability ?
Harold
| |||||