Inform 7 v10.1.0 is now open-source

Well, for what it’s worth, I use Sublime Text as well, so that may add at least 1 vote to things. I know the TextMate grammars used by Sublime Text are also used by VS Code, which is reasonably popular these days.

3 Likes

I wrote a short blog post on how to install Inform from source, setup a simple project from scratch, compile it and package it, all on the command line: https://www.hoowl.se/getting_started_writing_interactive_fiction_with_inform7.html

Inform worked fine so far on the ARM CPU of my main laptop – a very pleasant surprise :smiley:

Now I am very much looking forward to getting back to those WIP I started several months ago!

11 Likes

i7-helpers has a couple of scripts to facilitate creating a new project and compiling it. They’re quick and dirty things with no error-checking, but they’ve been helpful to me already. Usage directions are in the scripts; creating, compiling, and running a new project could look like this:

$ i7init newproj
$ emacs newproj/newproj.ni
$ i7 newproj
$ glulxe newproj/newproj.ulx

(I’ll stress that these are stopgaps for use in the next couple of weeks, not anything durable.)

EDITED: also, if you have ifsitegen.py it automatically creates a Quixe website. Comment out that bit to taste.

3 Likes

Er… for the dummies in the room, can someone explain what all this means? There is a newfangled version of Inform? Which is kinda available but not really? Or is this only relevant to seriously codey people and I shouldn’t worry about it?

5 Likes

For the first time the source code of the compiler has been published. At the moment it’s only a preview and anyone who wants to use it has to compile it themselves and run in from the command line. Later this month a full release with the Windows, Mac, and Linux editor apps will be published.

6 Likes

One thing it means is that people can modify inform now, so if there’s something you wish Inform could do you could ask a (very) codey person to do and theoretically they could add it. Before only Graham Nelson could add features to Inform, now anyone can add features (to their own version).

7 Likes

More people can contribute bug fixes too.

8 Likes

For at least the next couple weeks, it’s chiefly of interest to codey people, but in the latter half of May new IDEs bundled with the new version should be out. Even then, overt differences should be small. Thus far it looks like the language itself is close to unchanged.

It’s extraordinary that things like Dynamic Objects or Data Structures ever existed, given the lack of documentation of internals that had to be overcome to write them.

Now we get to find out what’s possible when the internals are both documented and open for all to see.

8 Likes

I guess this is why I had no idea it wasn’t open before. I assumed it was, because how else could people write extensions unless they knew how Inform worked? And I’ve never seen a release number like 10.1.0 on anything in my Inform program.
Anyway, thanks to all for explaining. Since my major problem with Inform is that it can’t read my mind, I don’t think this is going to change my world.

5 Likes

Yeah, the version numbering system is now all numbers. This will be easier to remember.

2 Likes

Many thanks for bravely asking the question that the rest of the dummies (like me) were afraid to ask.

8 Likes

The original Inform was written on an Acorn, which was the computer ARM wa invented for!

4 Likes

Probably also worth mentioning: the new bug tracker shows some hundreds of bugs reported for 6M62 as resolved.

3 Likes

I’m going to be honest: I find Jira very confusing. It looks like it won’t even show you by default who created a bug report?

We’re still finding our way with Jira: sorry for any unfriendliness it shows.

Bear in mind that the vast majority of issues on the tracker now go back to the previous Mantis tracker, so those are bug reports migrated from there. We couldn’t show them as being created by their original reporters because Mantis user accounts were different from Jira ones - e.g. a reporter called Sally23 on Mantis might not even have a Jira account, let alone one with the same name. So we ended up having to have the old bug reports all listed in Jira as by Hugo Labrande, who did all the migration work. This means that right now it’s not very helpful to list the original reporter in the main listing… That will change, of course.

The identity of the original reporter does live on in the text of the bug report, though.

4 Likes

It’s true that, as Zed says, hundreds of bugs have been fixed, but although there were a lot of reported issues, there were really only a couple which were at all serious. The most important was to do with failing to punctuate “if” and “repeat” lines with a colon at the end and using a semicolon instead - a very easy thing to do by accident, and which newcomers to Inform often get wrong - where the compiler was responding very badly (I think it gave an internal error) rather than giving a sensible problem message.

Otherwise, almost everything reported was really a bit of an edge case - good to fix, but unlikely to affect many people. In retrospect, I think v9.3 (as we must now call 6M62…) was in reasonably good condition. Once we had the Jira tracker up, I took a deep breath before wading into the big pile of bugs, not sure how awful it would all be, but the experience wasn’t so awful after all - the story I’d been telling myself for years about how the rewrite of the compiler would make maintenance easier turned out to be more or less true.

5 Likes

Inform was indeed first written on an Acorn machine, running an ARM chip - an Acorn Archimedes with a 20 MB hard drive, which at the time seemed cavernously huge. (Incredibly, the very first ARM chips were second processors for the BBC Micro, a machine so old that its primary storage was on cassette tape, and which was my second ever computer - though I certainly couldn’t afford a second processor for it.) Inform then moved on to a RISC PC, also by Acorn, also running ARM, and it was on that machine that Inform 6 was written. It was only in 2000 that I defected to the world of Apple, picking up Inform on an iMac running System 9. We changed computers more often back then, when performance of CPUs was tripling every few years.

18 Likes

// The original Inform was written on an Acorn, which was the computer ARM wa invented for!

The tradition continues with the Raspberry Pi. :slight_smile:

@GrahamNelson I think something is genuinely wrong with the JIRA configuration right now. I claim that new bugs filed today do not include any reporter.

https://inform7.atlassian.net/jira/software/c/projects/I7/issues shows a list of issues, including “assignee” (naturally they’re almost all “unassigned”) and “reporter.” All of the Mantis bugs have reporters, e.g. https://inform7.atlassian.net/browse/I7-2068 was reported by H Labrande, but none of the bugs filed since Apr 8 have a reporter; the reporter is listed as “unassigned” which is clearly wrong. e.g. https://inform7.atlassian.net/browse/I7-2081

Also, none of these bugs are visible when logged out, so there’s no way to Google search for Inform bugs. That seems bad to me. (Though I guess it may be your preference…?)

Things I learned compiling the Friends of I7 extensions with the new Inform:

I’ll note this small difference in behavior 'cause someone else will hit it at some point… I got errors like this:

  >--> I ran into a mistake in the source code for a kit: kit source error in
    function 'random': unexpected '('. The Inform 6 syntax source files for
    kits are a very low-level part of Inform, and errors like this will only
    occur if the standard installation has been amended or damaged, or if you
    are doing something quite unusual.

for Disappearing Doors and Xorshift for very different reasons. Disappearing Doors includes a couple lines like:

  if (addr == 0 || door.#found_in ~= 2*WORDSIZE)
        "(BUG) Cannot activate/deactivate door: malformed found_in: ", (name) door;

The I7 compiler will accept unaccompanied string literals, but if one is followed by, e.g., (name) door it really wants the print statement there.

The issue in Xorshift was: @log_shift xorshift_seed (-3) -> temp; and it wasn’t the (- like you might have thought. @log_shift xorshift_seed ( -3 ) -> temp; and @log_shift (xorshift_seed) -3 -> temp; also fail. It seems to really not like parentheses after opcodes.

Also, on Linux and I presume other systems with case-sensisitive filenames, extensions aren’t found if the directory named after the author either has a word beginning with a lower-case letter (Friends of I7) or has a capital letter anywhere but in the first character of a word (AW Freyr, Jesse McGrew). The docs say:

The name of an extension, and of an author, should be written in Sentence Capitalisation: that is, upper case for the first letter in each word. […] It is permitted for author names to include upper-case letters within words, as with the “G” in Jesse McGrew.

so the Friends of I7 case is arguably not a bug, depending on how strongly one reads “should”, but the other case is, reported as I7-2079.

Also, this:

Include (-
! code
-) instead of "Section Name" in "Template.i6t".

no longer works. Replacements are on a per-function basis now and should be

Include (-
! code
-) replacing "FunctionName".

It’s no longer meaningful for inclusions to specify before or after some given template: order is handled automagically. For now, these are ignored, but the usage is deprecated and slated to go away.

It’s stricter regarding what kinds can have what properties. EasyDoors gets:

inform7: no permission for 'K16_easydoor' to have this property: 'P_openable'
inform7: no permission for 'K16_easydoor' to have this property: 'P_openable'
  >--> An internal error has occurred: inter error. The current sentence is 'An
    easydoor is usually openable' (/home/zed/github/i7/External/Extensions/Hanon
    Ondricek/Easy Doors.i7x, line 11); the error was detected at line 272 of
    "inter/building-module/Chapter 3/Produce.w". This should never happen, and
    I am now halting in abject failure.

This still works…

Include (-
  has openable
-) when defining an easydoor.

but since the compiler doesn’t recognize the existence of the property while validating parsing, trying to refer to openable in regard to an easydoor generates an error. (Include [...] when defining is deprecated now, also.) I’m guessing in a case like this one, it’s best to create a new property.

EDIT: The compiler is actually fine with An easydoor can be openable or unopenable. It’s An easydoor can be unopenable or openable. that causes an error.

3 Likes