Inform

Zマシンと Glulx

Inform は全バージョンでソースコードからZコードのファイル（ストーリーファイル）を生成する。生成されたファイル群をZコードインタプリタ（Zコードの仮想機械仕様またはZマシン仕様を実装したプログラム）で実行する。Zマシン(Z-machine)は1979年にインフォコムがインタラクティブフィクションのために開発したものである。Zコードインタプリタはほとんど全てのコンピュータに移植されており、Zコードは変更することなくそれらのプラットフォーム上で実行可能である。
Andrew Plotkinは、自身が設計した仮想機械Glulx向けのファイルを生成するInform 6の非公式版を開発した。Glulxは開発されてから数十年を経て古くなったZマシンの各種制限への対処として設計されたものである。2004年2月29日にリリースされたInform 6.3で、Plotkinの成果が正式版に取り入れられ、Inform 6は2種類の仮想機械に対応するようになった。Inform 7の初期のバージョンはGlulxに対応していなかったが、2006年8月に対応版がリリースされた。

コンパイラ

Informコンパイラは、Inform 6向けのソースコードからZマシンまたはGlulxで実行可能なファイル（ストーリーファイル）を生成する。

プログラミング言語

Inform言語は、オブジェクト指向かつ手続き型である。言語の基本要素はオブジェクトで、オブジェクトは親子関係のオブジェクトツリーで管理される。この親子関係は場所を表すのにも使われているため、あるオブジェクトの親となっているオブジェクトは、子オブジェクトを保持している (hold) とも言われる。オブジェクトはツリー上を移動できる。トップレベルオブジェクトは例えば、ゲーム内の部屋などの場所を表し、家具や小物やノンプレイヤーキャラクター、プレイヤーのキャラクター、背景効果などがオブジェクトとして保持される。親子関係は任意であり、例えばlivingroom（居間）オブジェクトがinsurancesaleman（保険外交員）オブジェクトを保持し、insurancesalemanオブジェクトがbriefcase（かばん）オブジェクトを保持し、briefcaseオブジェクトがinsurancepaperwork（保険書類）オブジェクトを保持するといったことが考えられる。
初期のInformでは、オブジェクトはいわゆるオブジェクト指向プログラミングのオブジェクトとは異なるもので、クラスに相当する概念がなかった。その後、クラス定義が追加され、オブジェクトはクラスに属せるようになった。オブジェクトやクラスは複数のクラスを継承できる。インタラクティブフィクションゲームには一般に多数のオブジェクトが登場する。そのためInformでの多くのオブジェクトは「メタクラス」オブジェクト以外のクラスを継承しない。しかし、オブジェクトには属性（ブーリアン型のプロパティ、sceneryやedibleなど）があることが多く、Informライブラリがそれを認識する。普通の言語であれば、これら属性は継承によって実装されるべきものである。
以下にInform 6のソースコードの例を示す。
[ Main;
    print "Hello World^";
];

ライブラリ

InformシステムにはInformライブラリがあり、インタラクティブフィクションのプログラミングで難しい部分のほとんどを自動化している。特にプレイヤーが入力するテキストの構文解析器と、部屋やドアやプレイヤーの持ち物などのオブジェクト（とそのプロパティ）を保持する世界モデルが含まれる。
Informコンパイラから見ればInformライブラリは必須ではない。代替ライブラリもいくつか存在し、PlutypusやInformATEなどがある（後者はスペイン語向け）。

ゲームでの例

Informライブラリを使ったInformのソースコードの例を以下に示す。Inform 6を前提としている。Inform 7では全く文法が異なるが、レガシーコードであることを示すよう修正を加えれば、Inform 7でも使用可能である。
 Constant Story "Hello World";
 Constant Headline "^An Interactive Example^";

 Include "Parser";
 Include "VerbLib";

 [ Initialise;
     location = Living_Room;
     "Hello World";
 ];

 Object Kitchen "Kitchen";
 Object Front_Door "Front Door";

 Object Living_Room "Living Room"
     with
         description "A comfortably furnished living room.",
         n_to Kitchen,
         s_to Front_Door,
     has light;

 Object -> Salesman "insurance salesman"
     with
         name 'insurance' 'salesman' 'man',
         description "An insurance salesman in a tacky polyester 
               suit.  He seems eager to speak to you.",
         before [;
             Listen:
                 move Insurance_Paperwork to player;
                 "The salesman bores you with a discussion
                  of life insurance policies.  From his
                  briefcase he pulls some paperwork which he
                  hands to you.";
         ],
     has animate;

 Object -> -> Briefcase "briefcase"
     with
         name 'briefcase' 'case',
         description "A slightly worn, black briefcase.",
     has container;

 Object -> -> -> Insurance_Paperwork "insurance paperwork"
     with
         name 'paperwork' 'papers' 'insurance' 'documents' 'forms',
         description "Page after page of small legalese.";

 Include "Grammar";

IDE

Inform 7には、Mac OS XとWindowsで動作する統合開発環境 (IDE) が付属する。Mac OS X版IDEはAndrew Hunterが開発し、Windows版IDEはDavid Kinderが開発した。
Inform 7 IDEには、Inform 7のソースコード編集のためのテキストエディタが含まれる。他のソースコードエディタと同様、シンタックス強調機能がある。引用符で囲まれた文字列は色付きで表示される。章節見出しは太字で大きく表示される。コメントはやや小さいフォントで別の色付きで表示される。
IDE にはZコードインタプリタも組み込まれている。Mac版IDEのインタプリタは、Andrew Hunterが開発したZoom インタプリタを基本としている。Windows版IDEのインタプリタはWinFrotzに基づく。
開発者が組み込みのインタプリタでゲームをテストすると、IDEの "skein" または "transcript" ビューにその進行状況が報告される。skeinビューでは、分岐する木構造としてプレイヤーのコマンドを追跡する。分岐においてゲームの同じ部分を再生せずに開発中ゲームの異なる経路を再試行でき、迅速なテストが可能である。経路には注釈をつけたり、正解としてマークしたりできる（それをテキストでのウォークスルー用に出力可能）。transcriptビューでは、プレイヤーのコマンドとゲームの応答を記録する。応答が正しければ、それを "blessed" とマークできる。再生したときblessedとマークされた部分は強調されるので、開発者が問題を発見する助けとなる。
IDEは開発中のプログラムに各種索引を提供する。コードをクラス階層として示したり、従来的なIFマップで示したり、本の目次のように示したり、といった様々な形態の表示が可能である。索引上の項目をクリックすると、対応するソースコードにジャンプできる。
IDEは2つのペインを左右に並べて表示する。それぞれのペインには、ソースコード、コンパイルの現在状態、skein、transcript、ソースコードの索引、ゲームの実行中画面、Inform 7の文書、その他プラグイン、設定などが表示できる。これは、多数のペインを同時表示するのではなく2つの向かい合うページのようにペインを表示することで、ノートを模倣しているのである。

コンパイラ

Inform 7のコンパイラはInform 6のソースコードを生成する。その後Inform 6のコンパイラを使ってZコードを出力する。Inform 7は "Natural Inform" と呼ばれていた関係で、そのコンパイラは "NI" とも呼ばれている。

プログラミング言語

特筆すべき機能として、宣言型プログラミングによる強化と、オブジェクトが使われる状況からその型と属性を推論する能力がある。例えば、"John wears a hat."（ジョンは帽子をかぶっている）という文から、"John" という "person" が生成され（wear という動詞の主語は人物だけであるため）、"wearable" 属性を持つ "thing" が生成され（wearの目的語は着用可能でなければならないため）、Johnが帽子を着用している状態に設定される。
また、オブジェクト間の関係も直接サポートしている。例えば、あるオブジェクトの中に別のオブジェクトがあるとか、あるオブジェクトが別のオブジェクトを着用しているといった関係を自動的に抽出する。また、開発者が独自の関係を追加することもできる。例えば、「愛する」とか「嫌う」といった関係を追加することもでき、登場人物間の好悪関係を保持することができる。
Inform 7はドメイン固有言語の一種であり、Inform 6よりも抽象的なレベルでインタラクティブフィクションを構築でき、ソースコードの可読性も向上している。

Inform 7で書かれた主なゲーム

Emily ShortのMystery House Possessed（2005年）は、一般にリリースされた最初のInform 7を使ったゲーム。"Mystery House Taken Over" プロジェクトの一環としてリリースされた。
2006年3月1日、Shortは3つのゲームのリリースを発表した。Bronze（パズル指向の従来型ゲーム）、Damnatio Memoriae（Short 作の Inform 6 のゲーム Savoir-Taire の続編）、Graham Nelson の The Reliques of Tolti-Aphである。2006年4月30日にInform 7のパブリックベータ版を発表すると同時に、3月1日にリリースされた3本を含む6本の「動作例」がソースコードと共に公開された。
Emily ShortのFloatpointはInform 7を使ったゲームとして初めてInteractive Fiction Competitionで優勝した。また、2006年のXYZZY awardsのBest Setting部門とBest NPCs部門でも優勝している。nespresso作のRendition（2007年）は、テキストアドベンチャーゲームの形態をとった政治的実験小説であり、プレイヤーは自身の共犯に立ち向かうことを要求される。この悲劇の手法はACMとケンブリッジ大学で学術的に論じられている。