Inform — это язык программирования и система проектирования для интерактивной фантастики, изначально созданная в 1993 году Грэмом Нельсоном . Inform может генерировать программы, разработанные для виртуальных машин Z-code или Glulx . Версии с 1 по 5 были выпущены между 1993 и 1996 годами. Около 1996 года Нельсон переписал Inform с первых принципов , чтобы создать версию 6 (или Inform 6 ). [3] В течение следующего десятилетия версия 6 стала достаточно стабильной и популярным языком для написания интерактивной фантастики. В 2006 году Нельсон выпустил Inform 7 (кратко известный как Natural Inform ), совершенно новый язык, основанный на принципах естественного языка и новый набор инструментов, основанный на метафоре книгоиздательства.
Компиляторы Inform транслируют код Inform в файлы историй для Glulx или Z-code , двух виртуальных машин, разработанных специально для интерактивной фантастики. Glulx, который может поддерживать более крупные игры, используется по умолчанию.
Z-machine изначально была разработана компанией Infocom в 1979 году для своих интерактивных художественных произведений. Поскольку существует по крайней мере один такой интерпретатор для почти каждой основной и второстепенной платформы, это означает, что один и тот же файл Z-code может быть запущен на множестве платформ без каких-либо изменений. Первоначально Inform ориентировалась только на Z-machine.
Эндрю Плоткин создал неофициальную версию Inform 6, которая также могла генерировать файлы для Glulx , виртуальной машины, которую он разработал для преодоления многих ограничений Z-machine, существовавшей несколько десятилетий. Начиная с Inform 6.3, выпущенной 29 февраля 2004 года, Inform 6 включал официальную поддержку обеих виртуальных машин, основанную на работе Эндрю Плоткина. Ранний выпуск Inform 7 не поддерживал Glulx, но в августе 2006 года поддержка Glulx была реализована.
Inform изначально был создан Грэмом Нельсоном в 1993 году. В 1996 году Нельсон переписал Inform с первых принципов, чтобы создать версию 6 (или Inform 6). В течение следующего десятилетия версия 6 стала достаточно стабильной и популярным языком для написания интерактивной фантастики.
Система Inform 6 состоит из двух основных компонентов: компилятора Inform , который генерирует файлы историй из исходного кода Inform, и библиотеки Inform , набора программного обеспечения, которое выполняет большую часть сложной работы по анализу текстового ввода игрока и отслеживанию модели мира. Название Inform также относится к языку программирования Inform , который понимает компилятор.
Хотя Inform 6 и Z-Machine изначально разрабатывались с расчетом на интерактивную фантастику, было разработано много других программ, включая интерпретатор BASIC , учебник LISP (в комплекте с интерпретатором), игру «Тетрис» и версию игры «Змейка» .
Компилятор Inform генерирует файлы для Z-machine или Glulx (также называемые файлами историй) из исходного кода Inform 6 .
Язык программирования Inform является объектно-ориентированным и процедурным . Ключевым элементом языка являются объекты. Объекты поддерживаются в дереве объектов, в котором перечислены родительско-дочерние отношения между объектами. Поскольку родительско-дочерние отношения часто используются для представления местоположения, объект, который является родителем другого объекта, часто говорят, что он «держит» его. Объекты можно перемещать по дереву. Обычно объекты верхнего уровня представляют комнаты и другие локации в игре, которые могут содержать объекты, представляющие содержимое комнаты, будь то физические предметы, неигровые персонажи, персонаж игрока или фоновые эффекты. Все объекты могут содержать другие объекты, поэтому объект livingroom
может содержать insurancesaleman
объект, который содержит briefcase
объект, содержащий insurancepaperwork
объект.
В ранних версиях Inform объекты отличались от понятия объектов из объектно-ориентированного программирования, поскольку не существовало такого понятия, как класс. В более поздних версиях была добавлена поддержка определений классов и объекты могли быть членами классов. Объекты и классы могут наследоваться от нескольких классов. Интерактивные художественные игры обычно содержат много уникальных объектов. Из-за этого многие объекты в Inform не наследуются ни от одного класса, кроме «метакласса» Object. Однако объекты очень часто имеют атрибуты (булевы свойства, такие как scenery
или edible
), которые распознаются библиотекой Inform. В других языках это обычно реализуется через наследование.
Вот простой пример исходного кода Inform 6.
! Квадратные скобки определяют процедуру. Это основная процедура, которая не принимает аргументов. [ Main ; print "Hello, World! ^ " ; ];
Процедурные части, операторы и операторы в значительной степени заимствованы из C, за исключением того, что -->x
вместо [x]
используется для взятия индексов массива. Процедуры определяются в квадратных скобках, как в Main
процедуре выше, [5], но вызываются с круглыми скобками, как в C. Символ @
используется для экранирования символов и для вызова сырых кодов операций Z-машины. [6]
Система Inform также содержит библиотеку Inform, которая автоматизирует почти всю самую сложную работу, связанную с программированием интерактивной фантастики ; в частности, она включает в себя анализатор текста , который анализирует ввод игрока, и модель мира, которая отслеживает такие вещи, как объекты (и их свойства), комнаты, двери, инвентарь игрока и т. д.
Компилятор Inform не требует использования библиотеки Inform. Доступно несколько библиотек-заменителей, например, Platypus [7] и InformATE, библиотека, которая кодирует Inform на испанском языке. Некоторые игры могут вообще не использовать библиотеку, например, прямой порт Zork в Inform 6. [5]
Вот пример исходного кода Inform 6, который использует библиотеку Inform. Пример кода Inform 6 ниже можно использовать в Inform 7, но не без специального разграничения, указывающего на то, что это встроенный устаревший код.
Постоянная история "Привет, франшиза" ; Постоянный заголовок " ^ Интерактивный пример ^ " ;Включить "Parser" ; Включить "VerbLib" ;[ Инициализация ; location = Living_Room ; "Привет, мир" ; ];Объект Kitchen "Кухня" ; Объект Front_Door "Входная дверь" ;Объект Living_Room "Гостиная" с описанием "Уютно обставленная гостиная". , n_to Kitchen , s_to Front_Door , имеет свет ;Объект -> Продавец "страховой агент" с именем 'страхование' 'продавец' 'мужчина' , описание "Страховой агент в безвкусном костюме из полиэстера. Кажется, он горит желанием поговорить с вами." , до [; Слушать : переместить Insurance_Paperwork на игрока ; "Продавец утомляет вас обсуждением полисов страхования жизни. Из своего портфеля он достает какие-то документы, которые он вам передает." ; ], имеет анимацию ;Объект -> -> Портфель "портфель" с названием 'портфель' 'кейс' , описание "Слегка потертый черный портфель." , имеет контейнер ;Объект -> -> -> Insurance_Paperwork "страховая документация" с названием 'paperwork' 'papers' 'insurance' 'documents' 'forms' , описание "Страница за страницей небольшого юридического текста." ;Включить «Грамматику» ;
30 апреля 2006 года Грэм Нельсон объявил о выпуске бета-версии Inform 7 в группе новостей rec.arts.int-fiction. [13] Inform 7 состоит из трех основных частей: IDE Inform 7 с инструментами разработки, специализированными для тестирования интерактивной фантастики, компилятора Inform 7 для нового языка и « Стандартных правил », которые формируют основную библиотеку для Inform 7. Inform 7 также опирается на библиотеку Inform и компилятор Inform из Inform 6. Компилятор компилирует исходный код Inform 7 в исходный код Inform 6, который затем компилируется отдельно Inform 6 для генерации файла истории Glulx или Z-кода . Inform 7 также по умолчанию пишет файлы Blorb , архивы, которые включают Z-код вместе с необязательными «обложками» и метаданными, предназначенными для целей индексации. Полный набор инструментов Inform 7 в настоящее время доступен для Mac OS X , Microsoft Windows и Linux (с 2007 года).
По состоянию на 2023 год [обновлять]Inform 7 и его инструменты остаются в стадии разработки. [14] С апреля 2022 года Inform 7 имеет открытый исходный код и разрабатывается на GitHub . [15]
Inform 7 некоторое время назывался Natural Inform , но позже был переименован в Inform 7. Это старое название объясняет, почему компилятор Inform 7 называется «NI». [16]
Inform 7 поставляется с интегрированной средой разработки (IDE) для Mac OS X, Microsoft Windows и Linux. Mac OS X IDE была разработана Эндрю Хантером. Microsoft Windows IDE была разработана Дэвидом Киндером. Linux IDE (известная как GNOME Inform) была разработана Филиппом Чименто. [17]
Inform 7 IDE включает текстовый редактор для редактирования исходного кода Inform 7. Как и многие другие редакторы программирования, он имеет подсветку синтаксиса. Он выделяет кавычки одним цветом. Заголовки организационных разделов (тома, книги, главы, части и разделы) выделены жирным шрифтом и увеличены. Комментарии выделены другим цветом и немного уменьшены.
IDE включает встроенный интерпретатор Z-кода . Интерпретатор IDE Mac OS X основан на интерпретаторе Zoom Эндрю Хантера с участием Джесси МакГрю [ требуется ссылка ] . Интерпретатор IDE Microsoft Windows основан на WinFrotz .
Когда разработчик тестирует игру во встроенном интерпретаторе, прогресс отслеживается в представлениях «skein» и «transcript» IDE. Skein отслеживает команды игрока как дерево ветвящихся возможностей. Любую ветвь дерева можно быстро перепройти, что позволяет повторять разные пути в разрабатываемой игре без повторного прохождения тех же частей игры. Пути также можно аннотировать примечаниями и помечать как решения, которые можно экспортировать в виде текстовых пошаговых инструкций. С другой стороны, стенограмма отслеживает как команды игрока, так и ответы игры. Правильные ответы из игры можно пометить как «благословенные». При повторном воспроизведении стенограммы или ветви skein будут выделены отклонения от благословенной версии, что может помочь разработчику найти ошибки.
IDE также предоставляет различные индексы в разрабатываемую программу. Код отображается в виде иерархии классов, традиционной карты IF, оглавления в виде книги и в других формах. Щелчок по элементам в индексе приводит к переходу к соответствующему исходному коду.
IDE представляет две панели рядом друг с другом для работы. Каждая панель может содержать исходный код, над которым ведется работа, текущий статус компиляции, нить, транскрипт, индексы исходного кода, запущенную версию игры, документацию для Inform 7 или любых установленных расширений к нему или настройки. Концепция заключается в имитации рукописной книги автора путем представления двух «разворотных страниц» вместо множества отдельных окон. [13]
Известные особенности включают в себя сильный уклон в сторону декларативного стиля программирования на основе правил и способность выводить типы и свойства объектов из того, как они используются. Например, утверждение "Джон носит шляпу." создает "человека" с именем "Джон" (поскольку только люди способны носить вещи), создает "вещь" со свойством "носимый" (поскольку только объекты, помеченные как "носимый", могут быть надеты), и устанавливает Джона как носящего шляпу.
Другим примечательным аспектом языка является прямая поддержка отношений, которые отслеживают ассоциации между объектами. Это включает в себя автоматически предоставляемые отношения, например, один объект содержит другой или объект, который носят, но разработчик может добавлять свои собственные отношения. Разработчик может добавлять отношения, указывающие на любовь или ненависть между существами, или отслеживать, какие персонажи в игре встречались друг с другом.
Inform 7 — это язык программирования, ориентированный на определенную область , предоставляющий писателю/программисту гораздо более высокий уровень абстракции, чем Inform 6, и легко читаемый исходный код. Логические и арифметические операторы общего назначения написаны на естественном языке (см., например, пример «Физика» в The Inform Recipe Book ). [18]
В ранней версии Inform 7 компилятор транслирует код в Inform 6, подобно тому, как CFront делал это с C++ и C. [16] Текущий компилятор (начиная с версии 10 2022 года) дополнительно способен транслировать код непосредственно в C для собственного исполняемого файла [ сомнительно – обсудить ] и генерировать «индексный мини-сайт», описывающий историю. [19]
Выражения в Inform 7 имеют форму полных предложений. Пустые строки и отступы в некоторых местах имеют структурное значение. Основная форма программы Inform 7 выглядит следующим образом:
«Привет, мир!» от «IF Author»Мир — это комната.Когда начнется игра, скажите «Привет, мир!»
Ниже представлена повторная реализация приведенного выше примера «Hello Deductible», написанного на Inform 7. Он основан на библиотеке, известной как «The Standard Rules», которая автоматически включена во все компиляции Inform 7.
«Hello Deductible» от «IF Author»Заголовок статьи — «Интерактивный пример» .Гостиная — это комната. «Уютно обставленная гостиная».Кухня находится к северу от гостиной.Входная дверь находится к югу от гостиной.Входная дверь — это дверь. Входная дверь закрыта и заперта.Страховой агент — мужчина в Гостиной. Описание: «Страховой агент в безвкусном костюме из полиэстера. Кажется, он горит желанием поговорить с вами». Под «мужчиной» следует понимать страхового агента.Страховой агент несет портфель. Описание: «Слегка потертый черный портфель». Под «чемоданом» следует понимать портфель.Страховая документация в портфеле. Описание: "Страница за страницей мелкого юридического жаргона". Под "бумагами " следует понимать "бумаги" или "документы" или "формы" .Вместо того, чтобы слушать страхового агента:сказать "Продавец утомляет вас обсуждением полисов страхования жизни. Из своего портфеля он достает какие-то бумаги, которые передает вам." ;передать страховые документы игроку.
Mystery House Possessed (2005) Эмили Шорт [20] была первой игрой Inform 7, выпущенной для широкой публики. Она была выпущена как часть проекта "Mystery House Taken Over".
1 марта 2006 года Шорт объявила о выпуске еще трех игр: [21] Bronze [22] (пример традиционной игры с интенсивными головоломками) и Damnatio Memoriae [23] (продолжение ее отмеченной наградами игры Savoir-Faire для Inform 6) к ним присоединилась The Reliques of Tolti-Aph [24] (2006) Грэма Нельсона . Когда 30 апреля 2006 года была анонсирована публичная бета-версия Inform 7, были доступны шесть «рабочих примеров» работ среднего и большого масштаба вместе с их исходным кодом, включая три игры, выпущенные ранее 1 марта. [25] [26] [27]
Floatpoint Эмили Шорт стала первой игрой Inform 7, занявшей первое место в Interactive Fiction Competition . [28] Она также выиграла награды XYZZY Awards 2006 за лучший сеттинг и лучших NPC. [29] Rendition от Nespresso (2007) — это политический художественный эксперимент в форме текстовой приключенческой игры. Её подход к трагедии обсуждался в академическом плане как Ассоциацией вычислительной техники [30] , так и Кембриджским университетом . [31]
В этом примере I6 очень близко следует за C.
{{cite journal}}
: Цитировать журнал требует |journal=
( помощь )