"bearophile" <bearophileh...@lycos.com> wrote in message news:i2knnc$1ft...@digitalmars.com...
Walter Bright:
1. segfaults *are* exceptions.

Aren't exceptions objects?

Bye,
bearophile

Not at all -- exceptions are system-generated events that are implemented in modern languages by the equivalent of a throw statement, and Exception objects are used to communicate information about either system- or user- generated throws. And Walter's point is getting lost -- 'retard' misidentified the issue as giving up speed by going with "exceptions" to avoid "hard crashes" such as segfaults, but of course there is no loss of speed for catching a segfault signal -- an asynchronous event -- and throwing an Exception object rather than calling a C signal catcher. The speed cost doesn't come from using Exceptions, it comes from doing array bounds checking (which, of course, results in an Exception object being thrown if violated). Of course, in D, if you're desperate for it, you can regain the speed by giving up the memory safety and using pointers, in which case an array bounds violation might overwrite something -- and if the thing overwritten is a pointer, that is likely to result in a segfault -- which is an exception, which in D will cause an Exception object to be thrown. Of course, in languages that have them, objects are used to communicate the information about exceptions, but even in C there are (non standard) libraries available that provide a catch/throw/exception-passing mechanism using a stack of setjmp structs and a longjmp for the throw.

Reply via email to