WinGlulxe vs WinGit?

Is there any difference between Windows Glulxe and Windows Git? They seem to have identical library files with same date/time stamps, but Windows Git has about 30 more kb in the executable itself. Interfaces and functionality seem identical. Is there a preference of one over the other?

WinGit claims to run 5 times faster than WinGlulxe. I believe the difference is mainly seen with large and complex games, which have lots of rule to process.

I’m guessing it’s a size vs speed tradeoff here.

Hope this helps.

The difference is also noticeable on slow computers, like mine. :slight_smile: Git is definitely faster.

Oh. I guess on a year-old laptop running a 36-room game the difference is negligible. I do notice the web runners are pretty slow.

It really depends on the games. I’ve seen heftier games zoom by with Git that could take a couple of seconds (huge, ain’t it? :stuck_out_tongue:) on Glulxe.

However - the way Git handles memory makes it so that some really complex games don’t run in Git (most offenders seem to be Spanish games. Maybe they’re using a somewhat different tool, maybe the thing they call SuperGlus, which makes some less-than-ideal use of memory that stumps Git but not Glulxe?) but will run fine in Glulxe.

Glulxe follows the classic pattern used by interpreter engines (and CPUs, for that matter) in general since the dawn of time: as it goes along it reads the next instruction opcode from memory, figures out what it means, and then executes it. If the code loops back and executes the same instructions again they get decoded each time the interpreter comes to them. This is fine for simple games, as the interpreter will be spending most of its time waiting for the operating system to do things like draw text on the display.

However, if your game contains lots of complicated code, you’ll end up executing the same instructions millions or even billions of times, and all those CPU cycles spent figuring out how to execute each instruction will add up into a noticeable delay. Git is designed on the “just in time compiler” pattern, so that it caches as much information on each instruction as it can, so that all that decoding and figuring out can be done once. With something like Alabaster, this makes a significant difference.

Git does not implement an obscure feature that was in the Glulx specification, called “1- and 2-byte local variables”. This was left out for speed reasons - Git would have had to check constantly for this feature, and each check would have slowed things down ever so slightly. Inform never generated code using this feature, so it never really mattered. The only compiler that ever did use it was old versions of the Spanish Superglus system. It turned out in the end that Glulxe’s implementation of this feature wasn’t really correct, either, so rather than try to handle a hardly used feature that added unnecessary complexity, Zarf has deprecated it from the Glulx specification. Unless you’re trying to play games compiled with Superglus, you can safely ignore all this.

What David said. :slight_smile: