Антиматематическое программирование игр и Z-машина

Рассмотрим подход, прямо противоположный математическому стилю в программировании (Haskell, Agda, Coq, Idris). Если в последнем случае нам нужно придерживаться в рамках системы типов формализма, доведённого до абсолюта, то в первом случае мы наоборот описываем на максимально приближенном к естественному языке некие декларативные концепции — причем свободно! Этот подход напоминает логическое программирование (например на Прологе), но есть ряд качественных отличий, которые будут понятны на примере реального мира.

Есть такая знаменитая в узких кругах поклонников текстовых игр/interactive fiction компания Inform. А точнее, ее автор, математик и поэт Graham Nelson. Он десять лет разрабатывал уникальную систему создания текстовых игр, последняя версия которой — Inform7, была выпущена в 2006-м (с тех пор Грэхэм к сожалению забросил этот проект).

Давайте познакомимся с этой системой поближе. Самые первые версии I1-I5 на основе исходного кода программы (игры-адвентюры) генерировали файл в формате Z-code для виртуальной Z-машины. Интерпретаторы Z-кода активно выпускались для множества платформ в 1980/1990-е годы. Они поддерживали множество 8-битных ОС (Apple II, TRS-80, ZX Spectrum), конечно, Unix/Windows, а также десяток мобильных ОС (включая Palm OS и Game Boy), и даже виртуальные машины Emacs, Java и JavaScript. По сути, Z-машина стала наиболее переносимой виртуалкой в истории! Сейчас на гитхабе можно найти еще кучу всевозможных реализаций, включая даже аппаратную!

В 1996-м вышла качественно новая версия Inform 6. Она включала компилятор и стандарную библиотеку, которая поддерживала умный парсинг (в смысле z-парсинга, когда слова в тексте программы могут склоняться). Сам язык I6 стал, как было модно в то время, процедурными и объектно-ориентированным. Из объектов выстраивались деревья, когда например самым верхним объектом была локация (комната), чуть ниже — шкафы/ящики, в которых, далее по дереву, располагались предметы, итд.

Объект может быть экземпляром класса, однако из-за того, что объектов в игре может быть очень много, явную принадлежность объекта классу можно было не указывать (в таком случае считается, что он принадлежит мета-классу). У каждого объекта есть оригинальный набор атрибутов.

Сам игровой движок, включенный в библиотеку, брал на себя функционирование мира. Он следил за его консистентностью, позволяя корректно перемещать объекты по дереву и между деревьями, изменять значения атрибутов, организовывать работу стандартных объектов (комнаты, двери, …), вести инвентарь героя, итп.
Самыми знаменитыми играми на I6 стали Zork, So Far, Curses и несколько других. Очень оригинальной, собравшей немало призов, стала Galatea — игра, в которой все события происходят в одной комнате, а герой просто общается со статуей.

В 2006-м вышел Inform 7. Он состоял уже из трех частей: компилятор (для новой версии языка), The Standard Rules (смесь стандартной библиотеки и рантайма) и полноценная IDE, среда разработки и отладки для Mac OS X, Windows и Linux.

На этой IDE следует остановиться поподробнее — она во многом отвечает нашим пожеланиям об идеальной среде разработки, которая в интерактивном режиме, непосредственно в процессе ввода кода, учитывая ограничения системы типов, предлагает разработчику оптимальное пространство последующих шагов.

продолжение следует

Поделиться статьей ...Share on Facebook0Share on Google+0Tweet about this on TwitterShare on LinkedIn0Share on VKPrint this page

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *