Mongoose Reborn
In any other context, this would probably be a bad thing:
But in this case, coming to a screeching halt is exactly what I wanted.
M3VM, the third virtual machine for Mongoose, has officially booted some code (even if that code was a single halt-catch-fire instruction). This is the third time in two years that I've rewritten the VM from scratch, proving hands-down that I have very weird hobbies.
This time, it's in C++, which has been trippy. I haven't written any large C++ apps in three years, and I really dislike the language — but it happens to be ideal for this, so I'm ignoring the nasty bits and making do. M2VM was written in GNU C, and M3VM isn't much different — but I can bundle my functions into classes now. For an object-head like me, that's a big plus.
Working with a higher level of abstractions has also let me focus less on the details, and more on the goal. I've built the object model the way I wanted it, and I'm working on the neat Self-like optimizations I've had planned.
To get to the triumphant HALT, the machine had to
The rewrites are quicker each time. Not only is the line count of M3VM significantly lower than M2VM, it took less than a week (part-time) to write. It's also considerably smarter — the garbage collector, my fourth, has learned a lot of neat tricks, and runs in milliseconds even for fragmented 64MB heaps.
Soon, I'll have the compiler working, so I can quit writing code in a hex editor. :-)
(P.S. If you, too, are authoring files in a hex editor, you need to go download Hex Fiend. Seriously. It is, hands down, the best hex editor I've ever used — including the ones I've written.)
Mnemosyne:~/Projects/m3/vm cbiffle$ ./vmtest test.mgm
HEAP: 0x2800400 - 0x2801400
HALT
But in this case, coming to a screeching halt is exactly what I wanted.
M3VM, the third virtual machine for Mongoose, has officially booted some code (even if that code was a single halt-catch-fire instruction). This is the third time in two years that I've rewritten the VM from scratch, proving hands-down that I have very weird hobbies.
This time, it's in C++, which has been trippy. I haven't written any large C++ apps in three years, and I really dislike the language — but it happens to be ideal for this, so I'm ignoring the nasty bits and making do. M2VM was written in GNU C, and M3VM isn't much different — but I can bundle my functions into classes now. For an object-head like me, that's a big plus.
Working with a higher level of abstractions has also let me focus less on the details, and more on the goal. I've built the object model the way I wanted it, and I'm working on the neat Self-like optimizations I've had planned.
To get to the triumphant HALT, the machine had to
- Load the base module, in the new Mongoose Module format;
- Wire all the objects together, including the ones that have to exist in phantom form (like Object, Class, and Array) before they are loaded;
- Start the interpreter, written in Mongoose and translated by Ruby to C++;
- Resolve the entry-point method by name;
- Fall over screaming.
The rewrites are quicker each time. Not only is the line count of M3VM significantly lower than M2VM, it took less than a week (part-time) to write. It's also considerably smarter — the garbage collector, my fourth, has learned a lot of neat tricks, and runs in milliseconds even for fragmented 64MB heaps.
Soon, I'll have the compiler working, so I can quit writing code in a hex editor. :-)
(P.S. If you, too, are authoring files in a hex editor, you need to go download Hex Fiend. Seriously. It is, hands down, the best hex editor I've ever used — including the ones I've written.)
0 Comments:
Post a Comment
<< Home