Язык программирования INFORM
INFORM — это язык программирования высокого уровня, предназначенный для создания интерактивной художественной литературы (interactive fiction), а также текстовых квестов и приключенческих игр. Разработан британским программистом Грэмом Нельсоном (Graham Nelson) в 1993 году. INFORM является одним из наиболее популярных инструментов для написания текстовых игр, использующих парсер (анализатор ввода) для обработки команд пользователя. Язык предоставляет разработчику мощные средства для описания игрового мира, объектов, персонажей, их взаимодействий и логики повествования, при этом оставаясь относительно доступным для авторов без глубоких знаний в области программирования.
История
Предпосылки и создание
В начале 1990-х годов, после пика популярности текстовых квестов 1980-х, сообщество разработчиков интерактивной литературы искало способы упростить создание игр. Существовавшие тогда языки, такие как TADS (Text Adventure Development System), были функциональны, но требовали от авторов значительных усилий по программированию. Грэм Нельсон, будучи математиком и программистом, поставил цель создать язык, который бы сочетал бы логику программирования с естественностью английского языка.
Первая версия, Inform 6, была выпущена в 1993 году. Она была реализована на языке C и компилировала исходный код в виртуальную машину Z-machine, созданную Джоэлом Бересом (Joel Berez) и Марком Бланком (Marc Blank) для игр компании Infocom. Inform 6 быстро завоевал популярность благодаря своей гибкости, производительности и возможности создавать игры, совместимые с классическими интерпретаторами Z-machine.
Inform 7
В 2006 году, после более чем десяти лет разработки, Грэм Нельсон выпустил Inform 7. Это была радикально новая версия языка, которая кардинально изменила подход к написанию кода. Inform 7 основан на принципе «естественного языка» (natural language). Вместо традиционного синтаксиса с ключевыми словами, скобками и точками с запятой, код на Inform 7 представляет собой грамматически правильные предложения на английском языке. Например, вместо if (player has sword) { print "You are armed."; } в Inform 7 пишется: if the player carries the sword, say "You are armed.".
Это нововведение сделало Inform 7 невероятно доступным для писателей, сценаристов и геймдизайнеров, не имеющих опыта программирования. Однако Inform 7 остаётся полноценным языком программирования с поддержкой процедурных конструкций, типов данных, наследования и объектно-ориентированных принципов. Он компилируется в виртуальную машину Glulx, которая является более современной и мощной, чем Z-machine, и поддерживает Unicode, мультимедиа и большие объёмы памяти.
Современное состояние
По состоянию на 2024 год, Inform 7 остаётся основным языком для разработки интерактивной литературы. Сообщество разработчиков активно поддерживает его, выпуская обновления, расширения и документацию. Существует множество игр, написанных на Inform, включая как любительские проекты, так и коммерческие релизы. Inform 6 также продолжает использоваться, особенно для проектов, требующих максимальной производительности или совместимости со старыми платформами.
Архитектура и принципы работы
Виртуальные машины
Игры, написанные на Inform, не компилируются в исполняемые файлы для конкретной операционной системы. Вместо этого они компилируются в байт-код для одной из виртуальных машин:
- Z-machine: историческая виртуальная машина, разработанная Infocom. Inform 6 поддерживает версии Z-machine от 1 до 8. Игры для Z-machine могут быть запущены на практически любом устройстве с помощью интерпретатора (например, Frotz, Gargoyle).
- Glulx: более современная виртуальная машина, созданная Эндрю Плоткиным (Andrew Plotkin). Glulx поддерживает 32-битную адресацию, что позволяет создавать игры с большим объёмом текста и сложной логикой. Inform 7 компилируется исключительно в Glulx.
Компилятор Inform 7
Компилятор Inform 7 (ni) представляет собой сложную программу, которая анализирует естественно-языковой код, строит семантическое дерево и генерирует байт-код для Glulx. Он включает в себя:
- Парсер английского языка, способный понимать грамматические конструкции.
- Систему типов, основанную на «видах» (kinds) — например,
room,thing,person,number. - Механизм правил (rules), который определяет, как игра реагирует на действия игрока.
Расширения
Inform 7 имеет встроенную систему расширений (extensions). Расширения — это файлы с кодом, которые добавляют в язык новые возможности: поддержку диалогов, нелинейное повествование, работу с мультимедиа, генерацию случайных событий и многое другое. Расширения распространяются через библиотеку расширений Inform (Inform Extension Library) и могут быть легко подключены к проекту одной строкой кода.
Синтаксис и возможности
Inform 6
Inform 6 использует синтаксис, напоминающий C или Pascal. Основные элементы:
- Объекты:
Object room "Kitchen" { ... } - Свойства:
description "A small, dusty room." - Действия:
[Take; print "Taken."; return true;] - Условия:
if (player in kitchen) { ... } - Циклы:
for (i=0; i<10; i++) { ... }
Inform 6 предоставляет полный контроль над игровым процессом, но требует от разработчика чёткого понимания структуры программы.
Inform 7
Inform 7 отличается радикально иным подходом. Код пишется на естественном английском языке, но с жёсткими грамматическими правилами. Примеры конструкций:
- Создание комнаты:
The Kitchen is a room. "A small, dusty room." - Создание объекта:
The knife is a thing in the Kitchen. "A rusty knife." - Описание действия:
Instead of taking the knife when the player is not in the Kitchen: say "You can't reach it from here." - Правила:
Every turn: if the player carries the knife, say "The knife feels heavy."
Inform 7 использует концепцию «правил» (rules) вместо функций. Правила определяют, что происходит в ответ на действия игрока или события в игре. Система правил является иерархической: можно задать «правило по умолчанию», а затем переопределить его для конкретных ситуаций.
Применение
Интерактивная художественная литература
Основное применение Inform — создание интерактивных художественных произведений (interactive fiction, IF). Это жанр, в котором игрок взаимодействует с текстовым миром, вводя команды (например, «осмотреть комнату», «взять ключ», «открыть дверь»). Inform позволяет авторам реализовывать сложные сюжетные линии, разветвлённые диалоги, головоломки и нелинейное повествование.
Образование
Inform 7 используется в образовательных целях для обучения основам программирования и логического мышления. Благодаря естественно-языковому синтаксису, новички могут быстро начать создавать свои первые игры, не изучая сложный синтаксис традиционных языков. Inform также применяется в курсах по геймдизайну и цифровым гуманитарным наукам.
Исследования
В академической среде Inform используется для изучения нарративного дизайна, искусственного интеллекта в играх, а также для создания прототипов интерактивных повествований. Некоторые исследователи используют Inform для моделирования сценариев в области когнитивной психологии и лингвистики.
Примеры игр на Inform
- «Curses» (1993) — первая крупная игра на Inform 6, написанная Грэмом Нельсоном. Классический текстовый квест с элементами юмора и головоломок.
- «The Lost City of Zork» (1995) — игра, созданная на Inform 6, вдохновлённая вселенной Zork.
- «The Dreamhold» (2004) — игра на Inform 6, разработанная Эндрю Плоткиным, предназначенная для обучения игроков основам текстовых квестов.
- «Blue Lacuna» (2008) — одна из самых известных игр на Inform 7, созданная Аароном Ридом (Aaron Reed). Отличается глубоким сюжетом и нелинейным повествованием.
- «Counterfeit Monkey» (2012) — игра на Inform 7, в которой игрок может манипулировать словами, изменяя их буквы, чтобы решать головоломки.
Интересные факты
- Inform 7 является одним из немногих языков программирования, чей синтаксис основан на естественном языке. Другие примеры включают язык AppleScript (для автоматизации macOS) и язык SQL (для работы с базами данных), но Inform 7 уникален тем, что его код читается как литературный текст.
- Компилятор Inform 7 написан на языке C и включает в себя более 300 000 строк кода.
- Грэм Нельсон, создатель Inform, является также автором нескольких книг по интерактивной литературе и математике.
- Сообщество разработчиков Inform ежегодно проводит конкурс «Annual Interactive Fiction Competition» (IFComp), где авторы со всего мира представляют свои игры на Inform и других платформах.
Критика
Несмотря на свою популярность, Inform 7 подвергается критике за:
- Сложность отладки: естественно-языковой синтаксис может приводить к неоднозначностям, которые компилятор интерпретирует не так, как задумал автор. Ошибки часто трудно локализовать.
- Производительность: игры на Inform 7, особенно с большим объёмом текста и сложной логикой, могут работать медленнее, чем аналоги на Inform 6 или TADS.
- Ограниченная совместимость: Inform 7 компилируется только в Glulx, что ограничивает возможность запуска на старых устройствах, поддерживающих только Z-machine.
- Англоцентричность: Inform 7 ориентирован на английский язык. Существуют попытки адаптации для других языков (например, Inform 7 для русского языка), но они не получили широкого распространения.
Источники
- Nelson, Graham. The Inform Designer’s Manual. 4th edition, 2001.
- Nelson, Graham. Inform 7: A Design System for Interactive Fiction. 2006.
- Reed, Aaron. Creating Interactive Fiction with Inform 7. Course Technology PTR, 2010.
- Plotkin, Andrew. The Glulx Specification. 2000.
- Сообщество Interactive Fiction (IFWiki).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →