<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-15">
<META content="MSHTML 6.00.6000.16825" name=GENERATOR></HEAD>
<BODY style="MARGIN: 4px 4px 1px">
<DIV>Mika:</DIV>
<DIV> </DIV>
<DIV>You state that "Checked runtime errors cannot violate invariants of the runtime system, so it ought to be safe to ..."</DIV>
<DIV> </DIV>
<DIV>Are you sure this statement is true for all implementations?</DIV>
<DIV> </DIV>
<DIV>I would tend to think that SPIN was able to do this mapping for itself, but in general, it would be difficult to be able to do this for any arbitrary OS environment, esp with differences in underlying libraries and implementations, which is part of what Greg alluded to in the Threads article you reference.</DIV>
<DIV> </DIV>
<DIV>Note also on pg 47 of the green book under "2.5.7 Safety" the notes about intrinsic safety and when the compiler makes the guarantee vs. the programmer.</DIV>
<DIV> </DIV>
<DIV>I also note from the path in your example (ezm3) that you may not be using the current cm3.  Is it possible that the NIL dereference problem in your example has been solved in a later implementation?</DIV>
<DIV> </DIV>
<DIV>Regards,</DIV>
<DIV>Randy<BR><BR>>>> Mika Nystrom <mika@async.caltech.edu> 4/21/2009 5:41 PM >>><BR><BR>Hello Modula-3ers,<BR><BR>I know this is a question that comes up from time to time, and I<BR>am aware of Greg Nelson's short article in "Threads" about why <BR>Modula-3 doesn't map runtime errors to exceptions, but the Green Book<BR>does allude to mapping runtime errors to exceptions, and I know that<BR>the SPIN OS did that.<BR><BR>How hard would this be to support in CM3?<BR><BR>Attached is a transcript of an interactive session with my current<BR>Scheme environment.  I think it ought to be obvious why I ask about<BR>exceptions.  In Modula-3, from safe code, only checked runtime errors<BR>can occur.  Checked runtime errors cannot violate invariants of the<BR>runtime system, so it ought to be safe to convert them to exceptions<BR>that can be caught, and then permit the program to continue.  <BR><BR>I realize this isn't *always* what you want to do, but in an interactive<BR>environment, making the system dump core on runtime errors sort of<BR>spoils the whole experience.<BR><BR>In this application, there are many places where you may want to<BR>raise an exception that hasn't been declared.  In a non-interactive<BR>environment, it is probably best to go for the core dump, but in<BR>an interactive environment, it seems to me it ought to just return<BR>control to the read-eval-print loop....<BR><BR>     Mika<BR><BR>LITHP ITH LITHENING.<BR>> (define wr (scheme-procedure-stubs-call '(TextWr . New) '()))<BR>wr<BR>> wr<BR><Modula-3 object : TextWr.T, BRANDED TextWr_^%#%^__0001M><BR>> (scheme-procedure-stubs-call '(Wr . PutText) (list wr "hello!") '())<BR>#t<BR>> (scheme-procedure-stubs-call '(TextWr . ToText) (list wr) '())<BR>"hello!"<BR>> (scheme-procedure-stubs-call '(TextWr . ToText) (list wr) '())<BR>""<BR>> (scheme-procedure-stubs-call '(Wr . PutText) (list wr "hello!") '())<BR>#t<BR>> (scheme-procedure-stubs-call '(Wr . PutText) (list wr "hello!") '())<BR>#t<BR>> (scheme-procedure-stubs-call '(Wr . PutText) (list wr "hello!") '())<BR>#t<BR>> (scheme-procedure-stubs-call '(Wr . PutText) (list wr "hello!") '())<BR>#t<BR>> (scheme-procedure-stubs-call '(Wr . PutText) (list wr "hello!") '())<BR>#t<BR>> (scheme-procedure-stubs-call '(TextWr . ToText) (list wr) '())<BR>"hello!hello!hello!hello!hello!"<BR>> (scheme-procedure-stubs-call '(TextWr . ToText) (list '()) '())<BR><BR><BR>***<BR>*** runtime error:<BR>***    Segmentation violation - possible attempt to dereference NIL<BR>***    pc = 0x80c69c8 = LockMutex + 0x28 in /usr/ports/lang/ezm3/work/ezm3-1.0/libs/m3core/src/thread/POSIX/ThreadPosix.m3<BR>***<BR><BR>  use option @M3stackdump to get a stack trace<BR>Abort<BR><BR><BR><BR><BR><BR><BR></DIV></BODY></HTML>