<table cellspacing="0" cellpadding="0" border="0" ><tr><td valign="top" style="font: inherit;">In the case of adding procedures not in all the cases is Ok for INTERFACEs as pointed in the SPwM3 (green book, Chapter 6, page 156), also online available from ftp://gatekeeper.research.compaq.com/pub/DEC/SRC/research-reports/SRC-053.pdf " (page 26) "a module exporting a safe INTERFACE must guarantee that 'no programming error' by a safe client of that interface can lead to an unchecked runtime error."<br>Following the same idea exposed there, is possible to call the RegularFile functions of FilePosix Interface and get runtime errors? which are the guarantees that protect from causing an unchecked runtime error? <br>For instance a buggy code could use concurrently threads locking when writing the files concurrently, it will make a mess in the file and so may hole/leaks in memory? (could the file could be an IO port like parallel or serial)?<br>I would like to
 hear your comments on that, let me know what else is missing to know the FilePosix is safe.<br>Thanks in advance,<br> <br>--- El <b>lun, 29/12/08, Jay <i><jay.krell@cornell.edu></i></b> wrote:<br><blockquote style="border-left: 2px solid rgb(16, 16, 255); margin-left: 5px; padding-left: 5px;">De: Jay <jay.krell@cornell.edu><br>Asunto: [M3devel] current tinderbox status, broken by me?<br>Para: "m3devel" <m3devel@elegosoft.com><br>Fecha: lunes, 29 diciembre, 2008 9:07<br><br><pre> NEXT    Fatal Error: bad version stamps: SocketPosix.m3<br>4678          <br>4679          version stamp mismatch: Compiler.Platform<br>4680             => SocketPosix.m3<br>4681             => Compiler.i3  <br>4682          version stamp mismatch: Compiler.ThisPlatform<br>4683             => SocketPosix..m3<br>4684             => Compiler.i3  <br>4685  NEXT     *** execution of cm3
 -build<br>-DROOT=´/home/m3/work/cm3-ws/birch.elegosoft.com-2008-12-30-01-00-04/cm3´<br>-DCM3_VERSION_TEXT=´d5.7.0´ -DCM3_VERSION_NUMBER=´050700´<br>-DCM3_LAST_CHANGED=´2008-03-16´  && cm3 -ship<br>-DROOT=´/home/m3/work/cm3-ws/birch.elegosoft.com-2008-12-30-01-00-04/cm3´<br>-DCM3_VERSION_TEXT=´d5.7.0´ -DCM3_VERSION_NUMBER=´050700´<br>-DCM3_LAST_CHANGED=´2008-03-16´  failed ***<br>4686          compile return value: 0<br>4687          [end compile 2008.12.30 02:25:17]<br>4688          *** COMPILE FAILED<br>No More Errors<br> <br> <br>1)<br>Is it reasonable to suggest that the compiler output the source to clashing<br>definitions?<br>Or is that a bogus naive suggestion?<br>It is probably legitimate, at least to identify the files in question.<br>Could be that not enough information is around to identify "what<br>changed", just some "summary hash".<br> <br><br>2) Is it really broken?<br>I did go slightly round and round on this.<br>I
 had another new platform defined in one or another file and then when I<br>backed down and just did one reasonly finished platform, I forgot at first to<br>cleanup all the debris.<br>But it certainly worked when I commited.<br>I'm progressing on the native build, so if it is broken, I expect to run<br>into it myself.<br> <br> <br>3) Is it reasonable to annotate a type with some sort of "relax, additions<br>are safe" annotation?<br>Probably not. It's probably too gray and more complicated than that, since<br>additions in general are not as safe as people thing. Adding to a record --<br>folks might be copying based on the size and might get back an older smaller<br>version. Adding to an enum, folks might be switching on it and expect to have<br>the range covered. Adding a function to an interface though, probably ok. Not<br>the case here, and perhaps not something the compiler even complains about.<br>One that that might be eek-out-able is adding to an
 enum, and such annotated<br>types, switches on them must have an else clause, and they must not be used for<br>array indexing?<br>Eh, maybe just leave it alone.<br> <br> <br>Anything else? Is this just basically how it has to be?<br>OR, how about, can the duplicity be eliminated?<br>Like, can Compiler.i3 be fully generated by the compiler?<br>Similarly, Csetjmp.i3 should be generated by the compiler, eh?<br> Or at least partly? You know, the size and alignment of the jmp_buf is<br>recorded in both Csetjmp.i3 and Target..i3. Duplication is generally bad imho</pre></blockquote></td></tr></table><br>