I thought I’d share a few more thoughts on comparing Inform to Dialog, from the lens of converting existing Inform projects (first Sand-dancer, now my newer work).
First of all, I think it is fair to say that Inform is chock-full of features that aren’t present in Dialog. There are concise ways to have Inform track player events over time (
check player taking the cookie the third time: ...); there’s a built-in scene system, there’s (if memory serves) a way to specify the tense (e.g., switch to first person instead of the default second person), there’s the Skein, and map generation, and documentation generation, there’s … well, just so much stuff.
But even after years of working with Inform, I had trouble getting things phrased just right, or even figuring out where to tease out of its massive export of library and game information just the right wording I need. Inform is a whole collection of different grammars (or domain specific languages) … for instance, the DSL embedded in
say strings supports a some conditional logic, but it isn’t quite the same way conditionals occur outside of
Also, Inform can get confusing (perhaps, more so, for an experienced coder) in the distinction between names and other words intended for the compiler, and names and other words intended for the player to enter as commands.
Dialog is just one single grammar, and that’s such a relief. You can easily integrate
text, conditional logic, updates to the world model, or anything else, all in a single block.
There’s also a lot of complexity in how Inform decides which rule applies at which point, along with rulebooks and meta rules about rulebooks to provide various overrides; Dialog has a very simple rule here, defined by the language itself: order in the source. There’s never a doubt about ordering, though you sometimes have to be careful in the order of rules in your source.
That ethic: simple, transparent rules, based on the simplicity of the core language, extends throughout Dialog. When I have problem, I can often just do a search in the standard library’s source and get an answer quickly (if it isn’t obvious from the documentation).
For all that Inform can be more concise, I’m not seeing almost any difference in word count between my Inform and Dialog versions.
Beyond all that, the existence of the Dialog debugger, and its live code reloading capability, makes it far more productive than Inform. I see a typo or mistake, update the source,
@g and see the fix immediately. That power can’t be overstated.
Other Dialog features I love:
- I can organize my code as many small files instead of a single giant document
- The compiler is blindingly fast
- The debugger starts almost instantly
- Documentation organized so I can find what I need quickly
- Compact bytecode output, especially for aamachine