4 ms·
Thanks for sharing. Adding another piece of history in my VM collection.
by kinleyd 15y ago
Thanks for sharing. Adding another piece of history in my VM collection.
- Newky 15y agoI'm interested in what else you have in a historic VM collection, I quite like the idea of opening up my VM manager and seeing a list of historic systems? Can you elaborate a little?
- kinleyd 15y agoOops, "historic" isn't quite what my collection is yet - the hyperbole comes from enthusiasm, can't help myself. The majority are different Linux distros I'm trying, plus Windows XP and 7, and OS X. The history section currently includes only the present Unix 7 and a version of the OpenGenera Lisp Machine which I'm still trying to convert to VirtualBox.
- RexRollman 15y agoI have BeOS running on VirtualPC but I would love to have Nextstep on a VM. In some ways, I like it more than Mac OS X.
- frou_dh 15y agoThere's a torrent out there of a fully patched OpenStep 4.2 ready to run in a VM.
- RexRollman 15y agoThanks for the head's up. I'll look for it.
- kinleyd 15y agoThere are torrents for NeXTstep 3.3 as well. I'm downloading it right now, let's see how they work. :) Any more suggestions for VMs of other classic systems worth pursuing (and available for download)?
- kinleyd 15y agoNice. I've got both OpenStep 4.2 and NeXTstep 3.3 running on VirtualBox VMs. Still to get the vga (color) and mouse drivers working, but it's quite a thrill to get Steve Job's baby on my system. Nice to think that Tim Berners-Lee got the www going on this system too, even if NeXTstep itself wasn't a commercial success. :)
- kator 15y agoFunny but true I ran into it while thinking I wanted to see the classic gmtime() function. It's so funny to see how the gmtime function set's the struct tm's fields: /* * generate hours:minutes:seconds */ *tp++ = hms%60; d1 = hms/60; *tp++ = d1%60; d1 /= 60; *tp++ = d1; It uses a pointer and does *tp++ = value rather then p->tm_hour = XX Very efficient but would be frowned upon in modern code reviews. Sometimes I think the "art" of performance has been lost to our modern development values.
- jlangenauer 15y agoActually, on x86 at least, I'm not sure there'd be much difference even from a naive compiler - the modern version would compile to a LEA instruction followed by a MOV, whereas the old version would be an INC instruction followed by the MOV. From memory, both the INC and LEA instructions execute in one clock tick.
- kator 15y agoTrue. I imagine modern compilers optimize this sort of stuff very quickly. Back in the time that code was written it was better to just optimize directly in the code and not wonder if the compiler would do it for you. I'm not advocating the code, more I wonder about how much the general population of developers has lost connection with the underlying performance of things. The systems we work with today are so powerful that they forgive errors that just could not be ignored on older systems. I recently re-wrote a streaming MapReduce job from Perl to C code and improved it literally 10x in speed. I resisted doing it because most of my team doesn't understand C well enough to slice and dice a bunch of pointers and buffers etc. I wanted maintainable code that the rest of my team could maintain. But in the end I needed performance so short of writing it in assembly C was the next best thing.
- masklinn 15y ago> True. I imagine modern compilers optimize this sort of stuff very quickly. Just checked with Clang (and otool), in Os and O2 the disassembly is exactly the same whether one uses struct accesses or raw pointer assignments. There are differences in O0 though.