Inform

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 16:21, 2 июня 2016.
Inform
Inform 7 IDE Icon.png
Спроектировано Graham Nelson
OS Windows, OS X, Linux
Портал: http://inform7.com/
Диалект
Inform 6, Inform 7

Inform - язык программирования и система разработки интерактивных историй, изначально созданный в 1993 году Грэмом Нэльсоном. Inform может генерировать программы для виртуальных машин Z-Code и Glulx. Версии с 1 по 5 были выпущены между 1993 и 1996 годами. В 1996 году Нэльсон переписал Inform, используя основные принципы, создав таким образом шестую версию (или Inform 6). В течение следующих десяти лет шестая версия стабилизировалась и приобретала популярность среди писателей интерактивных историй. В 2006 Нэльсон выпустил Inform 7 (изначально называвшийся "Естественный Inform"), полностью новый язык, основанный на принципах естественных языков и новом наборе инструментов для написания историй.

История

Разработка и реализация интерактивных историй (текстовых компьютерных игр) началась в 1970-ых. Тогда игры писались на универсальных языках программирования профессиональными программистами и/или студентами старших курсов. Позднее разрабатывались специализированные языки для написания интерактивных историй. Такие языки широко используются любителями, которые имеют мало или совсем никаких познаний в области компьютерных технологий. Однако большинство языков программирования интерактивных историй очень похожи на традиционные языки программирования, таких как C. Таким образом они могут быть трудны для использования людьми, не имеющими опыт в программировании. Inform представляет совершенно новый подход к написанию интерактивных историй, который очень привлекателен для начинающих авторов. в Inform 7 автор может писать на языке, очень похожем на обычный письменный английский. При написании игр необходимо соблюдать определенные правила, и Inform 7 менее терпим к грамматическим двусмысленностям.

Z-Machine и Glulx

Все версии Inform генерируют файлы в Z-code (также называемые как файлы историй) из исходного кода. Эти файлы затем могут быть запущены любым интерпретатором Z-Code. Поскольку существует по крайней мере один интерпретатор почти для каждой крупной платформы, Z-Code файл может быть запущен на множестве платформ без каких-либо изменений. Андрей Плоткин создал неофициальную версию Inform 6, которая могла генерировать файлы для Glulx. Glulx - виртуальная машина, которую он разработал для преодоления многих ограничений устаревшей Z-машины. Начиная с Inform 6.3, выпущенной в феврале 2004 года, Inform 6 официально поддерживает обе виртуальные машины. В своей первой версии Inform 7 не поддерживал Glulx, но в следующих обновлениях эта поддержка была добавлена.

Inform 6

Inform 1-6
Класс языка:

объектно-ориентированный, процедурный

Автор:

Graham Nelson

Испытал влияние:

естественные языки, C

Повлиял на:

Inform 7

Сайт:

http://inform7.com/sources/i6n/

ОС:

Windows, OS X, Linux, другие

Система Inform 6 состоит из двух крупных частей: компилятор, который генерирует файлы историй из исходного кода Inform, и библиотеки Inform, комплекта программ, которые выполняют самую сложную работу разбора ввода текста игрока и слежения за состоянием модели мира. Название Inform также отсылается к языку программирования Inform, который воспринимается компилятором. Хотя Inform 6 и Z-Машина были изначально разработаны для интерактивных историй, с их использованием было разработано множество других программ, включая интерпретатор BASIC, обучение LISP (вместе с интерпретатором), игру Тетрис и версию игры "змейки".

Компилятор Inform 6

Компилятор Inform генерирует файлы для Z-Машины или Glulx из исходного кода Inform 6

Язык программирования Inform 6

Язык программирования Inform является объектно-ориентированным. Ключевым элементом языка являются объекты. Объекты поддерживаются деревом объектов, которое перечисляет отношение родитель-ребенок между объектами. Объекты могут перемещаться по дереву. Обычно объекты высших уровней представляют комнаты и другие локации в игре, которые могут содержать объекты, представляющие содержимое комнат, вещей, неигровых персонажей, персонажа игрока или фоновые эффекты. Все объекты могут содержать объекты. Например гостиная может содержать страхового агента, который содержит чемодан, в котором содержится объект "страховые бумаги". В ранних версиях Inform понятие объекта отличалось от такового в объектно-ориентированной парадигме программирование. Позднее была добавлена поддержка определений классов, что позволило сделать объекты членами классов. Поддерживается множественное наследование. Многие объекты не наследуют никакой класс, кроме метакласса Object. Однако объекты часто имеют свойства, которые обрабатываются библиотекой Inform. Простой пример исходного кода на Inform 6:

 [ Main;
     print "Hello World^";
 ];

Библиотека Inform 6

Система Inform также содержит библиотеку, которая автоматизирует большую часть работы, связанной с разработкой интерактивных историй. Она включает текстовый обработчик, который разбирает ввод игрока и модель мира, которая следит за состоянием объектов (комнаты, двери, инвентарь игрока и т. д.) Компилятор Inform не требует использования Inform библиотеки. Существует несколько замен, таких как Platypus и InformATE (библиотека, которая кодирует Inform на испанском языке).

Пример игры

Ниже приведен пример исходного кода Inform 6, который использует библиотеку Inform. Код Inform 6 может быть использован в Inform 7 с применением специальных обозначений об использовании устаревших форм.

Constant Story "Hello Deductible";
 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";

Inform 7

Inform 7
Класс языка:

декларативный, процедурный

Автор:

Graham Nelson

Испытал влияние:

Inform 6

Сайт:

http://inform7.com/

ОС:

Windows, OS X, Linux, другие

30 апреля 2006 года Грэм Нэльсон объявил о бета-выпуске Infrom 7. Inform 7 состоит из 3 основных частей: Inform 7 IDE с инструментами разработки специализированными для тестирования интерактивных историй, Inform 7 компилятор для нового языка и "The Standard Rules" (правила стандарта), которые описывают ядро библиотеки Inform 7. Inform 7 также опирается на Inform библиотеку и Inform компилятор шестой версии. Компилятор компилирует исходный код Inform 7 в исходный код Inform 6, который затем компилируется отдельной компилятором Inform 6 для создания Glulx или Z-code файлов. В настоящее время полный набор инструментов Inform 7 доступен для Mac OS, Microsoft Windows и Linux. Inform 7 называли "естественным Inform" короткий промежуток времени, но позднее он был переименован в Inform 7. Старое имя объясняет, почему компилятор Inform 7 называют "NI" (Natural Inform).

Inform 7 IDE

Inform 7 поставляется со встроенной средой разработки (IDE) для Mac OS X, Microsoft Windows и Linux. Mac OS IDE разрабатывалась Андреем Хантером. Версия IDE под Mircosoft Windows разрабатывалась Дэвидом Киндером. IDE под линукс (известная, как GNOME Infrom) разрабатывалась Филиппом Чименто. Inform 7 IDE включает текстовый редактор для правки исходного кода. Как и многие редакторы языков программирования, редактор Inform 7 IDE поддерживает цветовое выделение синтаксических конструкций. Inform 7 IDE включает в себя встроенный Z-code интерпретатор. Когда разработчик тестирует игру встроенным интерпретатором, прогресс игрока отслеживается в "skein" и "транскрипт" отображениях IDE. "skein" отслеживает команды игрока в виде дерева ветвящихся возможностей. Можно быстро перейти в любую ветвь дерева, что позволяет проверить различные пути игры без необходимости переигрывать уже произошедшие события. Пути также можно помечать и комментировать, что упрощает исправление ошибок разработчиком. IDE также предоставляет различные указатели. Код можно отобразить в виде иерархии классов, традиционной карты интерактивной истории, содержания и других форм.

Язык программирования Inform 7

Отличительной чертой является сильная предрасположенность к декларативному, опирающемся на правила стилю программирования и возможностью выделения типов и свойств объектов из контекста, в котором они используются. Например выражение "John wears a hat" (Джон носит шляпу) создаст персонажа Джон (т.к. только люди способны носить вещи), вещь со свойством "можно носить" (поскольку только вещи со свойством "можно носить" можно носить) и устанавливает Джону свойства "носит шляпу". Другим заметным аспектом языка является прямая поддержка отношения с отслеживанием связей между объектами. Это включается в себя автоматически предоставляемые отношения, как один объект содержит другой, или объект носят, но разработчик может добавляет свои отношения. Разработчик может добавить отношение любви или ненависти вещами, или отслеживать какие персонажи в игре уже встречали друг друга. Inform 7 является сильно ориентированным на свою область языком программирования, предоставляющим писателю/программисту значительно больший уровень абстракции, чем Inform 6 и более удобочитаемый исходный код.

Пример игры

Утверждения Inform 7 представляют из себя завершенные предложения. Пустые строки и отступы могут быть значительны в определенных местах программы. Ниже приведен пример игры, представленной выше на языке Inform 6:

"Hello Deductible" by "I.F. Author"The story headline is "An Interactive Example".The Living Room is a room. "A comfortably furnished living room."
The Kitchen is north of the Living Room.
The Front Door is south of the Living Room.
The Front Door is a door. The Front Door is closed and locked.The insurance salesman is a man in the Living Room. The description is "An insurance salesman in a tacky polyester suit. He seems eager to speak to you." Understand "man" as the insurance salesman.A briefcase is carried by the insurance salesman. The description is "A slightly worn, black briefcase."  Understand "case" as the briefcase.The insurance paperwork is in the briefcase. The description is "Page after page of small legalese." Understand "papers" or "documents" or "forms" as the paperwork.Instead of listening to the insurance salesman: 
	say "The salesman bores you with a discussion of life  insurance policies.  From his briefcase he pulls some paperwork which he hands to you.";
	move the insurance paperwork to the player.

Ссылки

  • The official manual of Inform - официальный мануал для разработчика от Грэма Нэльсона. Является учебником и техническим документом в одном. Доступен бесплатно на официальном сайте, а также в печатном виде на английском языке: мягкая обложка (ISBN 0-9713119-0-0) и твердая обложка (ISBN 0-9713119-3-5).
  • The Inform Beginner's Guide написанный Роджером Фирсом и Соней Кссерих (ISBN 0-9713119-2-7) предлагает более мягкое введение в Inform. Доступно бесплатно на их официальном сайте.
  • The SPAG Interview - Интервью с создателями Грэмом Нэльсоном и Эмили Шорт о разработке Inform 7.
  • "Natural Language, Semantic Analysis and Interactive Fiction" - Статья о разработке Inform 7, написанная автором языка Грэмом Нэльсоном.
  • www.firthworks.com