<html>
<head>
<style>
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Verdana
}
</style>
</head>
<body class='hmmessage'>
Good point, previously I could say SetCurrentHandlers(MyFPState()) in safe code.<br>Now you can't.<br>There's still ADDRESS used in ThreadInternal.i3 requiring LOOPHOLE but it doesn't<br>appear easy to fix.<br><br>> Arguably, hanging other threads (with which one does not share mutexes etc)<br><br>Mutexes aren't the entire story there I think. Imagine some homegrown spinlock that is exported??<br>In either case, these functions are moved to an unsafe interface, at least until/unless<br>some safe code needs them.<br><br>Thanks,<br> - Jay<br><br>> To: jay.krell@cornell.edu<br>> CC: m3devel@elegosoft.com<br>> Subject: Re: [M3devel] RC merge <br>> Date: Sun, 13 Sep 2009 09:12:07 -0700<br>> From: mika@async.async.caltech.edu<br>> <br>> Jay K writes:<br>> >--_11d51f7d-f47a-4693-89d2-6f3429314a09_<br>> >Content-Type: text/plain; charset="iso-8859-1"<br>> >Content-Transfer-Encoding: quoted-printable<br>> ...<br>> >Good point about passing in ADDRESSes..but I'm not entirely sure I understa=<br>> >nd/agree.<br>> >Can safe code ("directly") generate any ADDRESSes at all? Or only get them =<br>> >from<br>> >unsafe code in the first place?<br>> >ADDRESS only comes from ADR=2C right? And ADR isn't allowed in safe? I'll c=<br>> >heck.<br>> ><br>> >IF safe code CAN generate ADDRESSes=2C then this was a hole:<br>> >PROCEDURE SetCurrentHandlers(h: ADDRESS)=3B<br>> <br>> <br>> No safe code can't generate ADDRESSes without help.  But certainly <br>> safe code can import TWO of these "quasi-unsafe" interfaces, and mix<br>> up which address came whence... so your example is probably still<br>> unsafe.<br>> <br>> ><br>> >and perhaps these:<br>> >PROCEDURE SuspendOthers ()=3B<br>> >(* Suspend all threads except the caller's *)<br>> ><br>> >PROCEDURE ResumeOthers ()=3B<br>> ><br>> >Though probably not the second=2C since safe code can trivially hang/deadlo=<br>> >ck on its own.<br>> <br>> Yes hanging is not a safety violation by the Modula-3 definition.<br>> Arguably, hanging other threads (with which one does not share mutexes etc)<br>> perhaps should be a safety violation, but can it be guaranteed?<br>> <br>> ...<br>> ><br>> >> But in Modula-3 whether an interface is unsafe or not *is* a boolean.<br>> ><br>> >Understood=2C but I still think even in unsafe code=2C LOOPHOLE should be m=<br>> >inimized.<br>> >C and C++ programmers are often taught to minimize casts=2C esp. reinterpre=<br>> >t_cast.<br>> >I think that guidance carries over to Modula's LOOPHOLE=2C even if you are =<br>> >already unsafe<br>> >for other reasons.<br>> <br>> Agreed!<br>>     <br>>     Mika<br>> <br>> ><br>> > - Jay<br></body>
</html>