次の方法で共有


К западу от здания

К западу от здания
Вы стоите в открытом поле к западу от белого здания с дощатой входной дверью.
Тут маленький почтовый ящик.

>открыть ящик
В открытом маленьком почтовом ящике обнаружен листок.

>взять листок
Взят.

>прочитать листок
«ДОБРО ПОЖАЛОВАТЬ В ZORK!

ZORK – игра, полная приключений, опасностей, и хитростей. В ней вы исследуете часть самой потрясающей территории, когда-либо доступной смертным. Ни один компьютер не должен быть её лишён

И так в 1984 началось моё пожизненное увлечение «интерактивной литературой». Где-то в ящике для документов моего офисного шкафа у меня есть сотни нарисованных на миллиметровке вручную карт из квадратиков и линий, описывающих для меня план каждой из классических игр Infocom, где там каждый объект, и так далее.

В 1984 мне было одиннадцать лет, и я наивно полагал себя прямо чертовски продвинутым программистом. Я уже написал к тому моменту несколько простых игр для Commodore PET (классического CBM 4032) в школе, добыл свой собственный Commodore 64 – благодаря маме – и обнаружил и исправил баг в программе, написанной профессионалами. Во как! Но я ни в жизнь не мог догадаться, каким образом разработчики в Infocom написали такую огромную, сложную игру, которая могла понимать предложения на английском, поддерживать согласованные положения иерархических объектов, которые взаимодействуют с окружающей средой (то есть, факел - в гробу, гроб – в лодке, лодка скользит вниз по течению), и так далее.

Когда через несколько лет я узнал, как это всё работало, я просто обалдел. Это был один из тех моментов, когда вы вдруг ясно понимаете, что есть целый новый способ воспринимать компьютеры, как инструменты для решения задач. Как теперь хорошо известно, то, что сделали гении в Infocom, было разработкой и реализацией их собственной виртуальной машины, Z -машины. Затем они написали игры на байткоде этой виртуальной машины. Это даёт два огромных преимущества.

Во-первых, абстрагируясь от реальной машины, вы можете написать вашу огромную сложную игру один раз, написать относительно маленькие и простые реализации Z-машины для какого хотите количества марок компьютеров, и внезапно вы получаете возможность написать-однажды-запускать-везде, значительно увеличивая количество платформ, для которых вы можете продавать. Большинство видеоигр того времени были написаны, скажем, на ассемблере Commodore 64, а потом переписаны на ассемблер Atari, и так далее; цена линейно масштабировалась относительно количества платформ. В подходе Infocom, затраты на каждую платформу были намного ниже.

Во-вторых, ВМ может реализовывать то, что мы сейчас воспринимаем как страничная организация памяти. (Неизменяемый) код игры можно читать с диска по странице за один раз, исполнять, и затем выбрасывать. Единственное, что нужно держать в памяти, это относительно маленькое текущее состояние игры и, конечно, саму реализацию Z-машины. Но код может быть огромным, значительно больше доступной памяти. В те времена, когда доступной памяти было от 16 до 32 килобайт, это было значительным преимуществом.

В наши дни, конечно, множество людей написали свои реализации Z-машины для собственного удовольствия. Я этого так и не сделал, но всегда хотел. После работы над столь многими языками с интерпретируемым байткодом за последние пятнадцать лет, это, вероятно, было бы достаточно несложным. Это был бы заметный объём работы, но об этом было бы занятно писать в блоге, и, я уверен, там было бы множество отличных возможностей проиллюстрировать изготовление настоящего интерпретатора байт-кода. Но, с другой стороны, у меня уже есть много того, чем можно занять своё свободное время, и склонность откусывать больше, чем я могу проглотить в один приём.

Так что весьма удачно, что мне не нужно этого делать, потому что Майк Грегер делает именно это. Он уже написал несколько реализаций Z-машины на C# и пишет в блоге об этом процессе. Я с нетерпением предвкушаю чтение блога Майка и выяснение скрытых технических и исторических деталей, которые делают Z-машину столь интересной. Майк говорит мне, что у него трудности с поиском людей, кто в восторге и от C#, и от Z-машины; ладно, очевидно – засчитывай меня! Я уверен, что некоторые из моих читателей тоже заинтересованы и в том, и в другой.