As I work on multi-threading Suneido I wonder if I shouldn't be shifting direction.
Does it really make sense to implement your own VM these days? Wouldn't it make more sense to re-implement Suneido on top of an existing VM such as Java?
For example, jRuby (Ruby re-implemented on the Java VM) in some cases outperforms the original C version of Ruby.
And Groovy also demonstrates that it is possible to implement a highly dynamic language on top of the Java VM.
The JVM would handle low level issues like garbage collection and JIT and multi-threading and 64 bit. (Although you'd still have to deal with higher level multi-threading issues.)
It could provide access to Java libraries so we didn't have to continually "re-invent the wheel".
It would not solve the current issue of a non-portable Windows UI. As with my current project, it could be server only to start with.
It would allow portability to everywhere that the JVM is available.
I'd have to not only learn Java, but also learn JVM issues that a normal Java programmer doesn't have to worry about. That's a little intimidating.
Of course, the other big question is why not just use an existing language/database? The big reason now, is that we have a big (to us) application written with Suneido's language and database. The thought of re-writing or porting it all to another platform is way too scary.
Moving to something like the JVM that allowed interoperability with other JVM based languages (and other databases) might actually allow us to incrementally move to another language if we chose to.
Obviously, this wouldn't be a minor decision, but it is food for thought.