Hi all! I wrote the Glulx interpreter “Git” back in the day (David Kinder now maintains it) and I’m thinking of revisiting it. It could be made a lot faster, and almost as importantly, it needs a new name!
Do we really still need a speed improvement for Glulx? I think so, because even though computers keep getting faster, there are a number of factors working in the other direction:
- People want to play games on the web
- People want to play games on mobile devices
- Inform 7’s library is much bigger and more complex than Inform 6’s
- Some game authors are also writing bigger and more complex games
“Counterfeit Monkey” is a great game, but it feels sluggish on a desktop machine, and it’s really slow on the web or on an iPad. Would there be value in a 10x speedup? Sure!
For web-based IF, there’s Quixe, which is already pretty sophisticated—I don’t see any big gains to be made there. But Javascript is just not that great as a target language, so it’s always going to run a bit slow. It might be worth exploring a server-side solution as an alternative: run the game in a fast native interpreter on a beefy server, while the player’s web browser just handles the I/O and graphics. (TADS 3 uses this approach.)
Okay, how about native code? What’s needed is real JIT compilation (Git is just a faux-JIT; it translates Glulx bytecode into a simpler internal format), but JIT is hard, so we need to leverage a library. The two obvious ones are LLVM and Java 7: both of those do really fancy runtime optimization, and can run interpreted code at near-native speed. Either one would be a fun project.
But take a step back; do we want to install a huge and heavyweight interpreter just to play Glulx games? Probably not. And neither LLVM nor Java 7 is going to work well on the iPad, which a lot of people want to use. (Getting them to work on Android wouldn’t be a picnic either.) Looking around a bit, I found that GNU Lightning is still going—there’s even a new maintainer working on Lightning 2.0. This is a really small and lightweight JIT library; it doesn’t do any optimization, but it’s possible to get pretty good results (Racket uses it: see http://benchmarksgame.alioth.debian.org/u32/benchmark.php?test=all&lang=racket&lang2=gcc for benchmarks); and I think it can be made to work within the restrictions of iOS.
So I’m leaning towards Lightning. It seems like the best approach for iOS, and could be useful in a server solution too. On the other hand, if people are more interested in server-side IF, I think Java is the best approach for that (more secure, and easier to deploy on services like App Engine).
What do you think? Worth doing? Interested in contributing?
Iain