<html>
<head>
<style>
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Verdana
}
</style>
</head>
<body class='hmmessage'>
<DIV> </DIV>
<DIV> > In reading your post, you state that you deoptimized the native implementation to make it match Cygwin. </DIV>
<DIV> </DIV>
<DIV>It is such a slight deoptimization, I think it is ok.</DIV>
<DIV> </DIV>
<DIV>Are you comfortable with only slightly optimizing never inlining integrated backend? Not optimal.</DIV>
<DIV>But it sure does build faster than gcc.</DIV>
<DIV>Great for productivity.</DIV>
<DIV>And its "always only slightly optimizing" mode generates much better code than gcc's default "no optimization at all" mode. But gcc with optimizing should be able to beat it handily -- e.g. inline.</DIV>
<DIV> </DIV>
<DIV> </DIV>
<DIV>Do you use gcc's optimizer or not?</DIV>
<DIV>I usually don't. I want to be able to debug line by line with a close correlation of binary to source.</DIV>
<DIV>I have plenty of experience debugging optimized code, and it can be an interesting fun educational challenge, but unless I'm really bored, I'd rather not do it.</DIV>
<DIV>If you don't use the optimizer, then again, not optimal.</DIV>
<DIV>I wouldn't mind /some/ optimization, esp. some inlining and constant propagation, but I dislike it when the debugger jumps around with no clue as to what "line" of code I am on (because "lines" of code often don't exist in optimized code, a line can go away, or get split up, or become shared with other "lines", etc.).</DIV>
<DIV> </DIV>
<DIV> </DIV>
<DIV>Are you aware of the cost of PushEFrame/try/raise/finally in Modula-3?</DIV>
<DIV>
<DIV>Nobody seems to care much.</DIV>
<DIV>Granted, SOLgnu/sun does it better, so people care.</DIV>Almost anything is more efficient.</DIV>
<DIV>Windows/x86 C/C++ does something similar but way more optimized.</DIV>
<DIV>All other C/C++ systems use "stack walking" and incur little cost from the "try" alone.</DIV>
<DIV> Though raise is often more expensive.</DIV>
<DIV> </DIV>
<DIV> </DIV>
<DIV>Ok, granted, my deoptimization is to make PushEFrame even less efficient.</DIV>
<DIV>It is already space (stack) and CPU inefficient.</DIV>
<DIV>I made it more space (stack) inefficient.</DIV>
<DIV>Could contribute to stack exhaustion.</DIV>
<DIV> </DIV>
<DIV> </DIV>
<DIV> </DIV>
<DIV> > IMO, ultimately we need a turn-key download and install routine for Modula-3</DIV>
<DIV> > that just works, out-of-the-box. If you give me an EXE, a CMD, or a BAT, for the install</DIV>
<DIV> </DIV>
<DIV>Can you try the uploaded archives I produced?</DIV>
<DIV>Are they really too difficult to use?<BR>You extract them, optionally rename the root directory, run vcvars, add cm3 to %PATH%, and are done.</DIV>
<DIV>Arguably much better than the older interactive cminstall.</DIV>
<DIV>Not sure about the non-interactive variant.</DIV>
<DIV> </DIV>
<DIV>I understand your point.</DIV>
<DIV> </DIV>
<DIV>No Python is needed to download and run.</DIV>
<DIV>No Python is really needed to build the system, but cm3 itself only builds a package at a time.</DIV>
<DIV>The sh and Python automation is around cd'ing around and building, in the right order, with some filtering, and my Python adds ability to pick target platform on the command line, without messing around every time with config files and %PATH% and such. It is nice and convenient, it adds features that cm3 doesn't provide, but you don't have to have it.</DIV>
<DIV> </DIV>
<DIV> > BTW, I can certainly help in maintaining the CMD/BAT install routines or in making a better CMINSTALL.</DIV>
<DIV> </DIV>
<DIV>Your cmd/bat are actually still probably correct or very nearly so.</DIV>
<DIV>The dependency orders rarely/never change.</DIV>
<DIV>The main change is that sysutils was added.</DIV>
<DIV>And perhaps that the dependency order became "more important" but not actually "different".</DIV>
<DIV>That is, probably for a long time, an old cm3 could compile a current m3core/libm3.</DIV>
<DIV>Now you need a cm3 with LONGINT support to build them (which itself is now a few years old).</DIV>
<DIV>So you must first build the compiler with the old compiler, THEN build the current runtime.</DIV>
<DIV>The "upgrade" scripts handle this.</DIV>
<DIV>Again you can just cd around in the right order, with some repetition (you build the compiler first</DIV>
<DIV>against the old runtime, then build the current runtime, then rebuild the compiler against the new runtime; arguably not needed but very much what you want to do).</DIV>
<DIV> </DIV>
<DIV>[redundancy here due to bad editing, sorry]</DIV>
<DIV> </DIV>
<DIV>Also, if you are bootstrapping from an older build, then you use their m3core and libm3, and then build the compiler up in dependency order starting with sysutils.</DIV>
<DIV> </DIV>
<DIV>If you are building from scratch with a current compiler, then you can start with m3core and go up from there.</DIV>
<DIV>(Or import-libs on Windows, if needed, but this really just a workaround for old distributions, like 4.1, like before Tony's change to remove the "gcdefs" stuff.)</DIV>
<DIV> </DIV>
<DIV> > At one point, I thought we had a file that showed the package build order and dependencies.</DIV>
<DIV> </DIV>
<DIV>I was a big proponent of this, and it now exists and is in use..but I don't use it usually. :)</DIV>
<DIV>It is the scripts/pkginfo.txt file.</DIV>
<DIV>All the sh scripts use it I believe. Therefore the tinderbox uses it I believe.</DIV>
<DIV>My cmd that I don't use (scripts/win) I think use it.</DIV>
<DIV>My python code does not use it. Oops.</DIV>
<DIV>Well, I think I did implement it at least, so I didn't push someone else to and then not use it.. :)</DIV>
<DIV>(Pick your evil -- do something yourself, and then not use it, or push someone else to, and then not use it).</DIV>
<DIV> </DIV>
<DIV>Eh, I should just use it from the Python, not a big deal.</DIV>
<DIV> </DIV>
<DIV>Not only the build order, but the file also aids in package set selection.</DIV>
<DIV>It doesn't do the filtering though, oh well.</DIV>
<DIV> </DIV>
<DIV> - Jay</DIV></body>
</html>