Inform

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

Inform — це мова програмування та система проєктування інтерактивної літератури, створена в 1993 році Гремом Нельсоном. Inform може генерувати програми для віртуальних машин Z-code або Glulx. Версії з 1 по 5 були випущені між 1993 і 1996 роками. Приблизно в 1996 році Нельсон переписав Inform з перших принципів для версії 6 (Inform 6).[1] Протягом наступного десятиліття версія 6 стала досить стабільною та популярною мовою для написання інтерактивної літератури. У 2006 році Nelson випустив Inform 7 (Natural Inform), абсолютно нову мову, схожу на природну мову та новий набір інструментів на основі метафори книговидання.

Z-Machine і Glulx

[ред. | ред. код]

Компілятори Inform перетворюють код Inform у файли історій для Glulx або Z-code, двох віртуальних машин, розроблених спеціально для інтерактивної літератури. Glulx, який підтримує більші ігри, є типовим генерованим форматом.

Z-машина спочатку була розроблена Infocom у 1979 році для своїх тайтлів. Оскільки існує принаймні один інтерпретатор майже для кожної великої та другорядної платформ, той самий файл Z-коду можна запускати на багатьох платформах без жодних змін. Спочатку Inform націлювався лише на Z-машину.

Ендрю Плоткін створив неофіційну версію Inform 6, яка також була здатна генерувати файли для Glulx, віртуальної машини, яку він спроектував, щоб подолати багато обмежень Z-машини. Починаючи з Inform 6.3, випущеного 29 лютого 2004 року, Inform 6 включає офіційну підтримку для обох віртуальних машин на основі роботи Ендрю Плоткіна. Ранній випуск Inform 7 не підтримував Glulx, але в серпні 2006 року її було додано.

Inform 1–6
Парадигмаobject-oriented, procedural
Дата появи1993
ТворціGraham Nelson
РозробникGraham Nelson
Останній реліз6.32 (2010)
Система типізаціївивід типів
Під впливом відZ-machine, C[2]
Вплинула наInform 7
Операційна системаMicrosoft Windows, Mac OS X, Linux, others
ЛіцензіяFreeware and Artistic License 2.0
Звичайні розширення файлів.Z#, .inf, .Z5 або .Z8
Вебсайтinform-fiction.org


Система Inform 6 складається з двох основних компонентів: компілятора Inform, який генерує файли історії з вихідного коду Inform, і бібліотеки Inform, набору програмного забезпечення, яке виконує більшу частину складної роботи з аналізу введеного гравцем тексту та відстеження модель світу. Назва Inform також відноситься до мови програмування Inform, яку розуміє компілятор.

Хоча Inform 6 і Z-Machine спочатку були розроблені з урахуванням інтерактивної літератури, було розроблено багато інших програм, включаючи інтерпретатор BASIC, підручник LISP (у комплекті з інтерпретатором), гру Tetris і версію гри Snake.

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

[ред. | ред. код]

Компілятор Inform створює файли для Z-машини або Glulx (також звані файлами історій) із вихідного коду Inform 6.

Мова програмування Inform 6

[ред. | ред. код]

Мова програмування Inform є об'єктно-орієнтованою та процедурною. Ключовим елементом мови є об'єкти. Об'єкти зберігаються в дереві об'єктів, у якому перераховані батьківсько-начірні зв'язки між об'єктами. Оскільки «батько–дочірній» зв'язок часто використовується для представлення розташування, часто кажуть, що об'єкт, який є батьківським для іншого об'єкта, «тримає» його. Об'єкти можна переміщати по дереву. Як правило, об'єкти верхнього рівня представляють кімнати та інші місця в грі, які можуть містити об'єкти, що представляють вміст кімнати, будь то фізичні предмети, персонажі, які не є гравцями, персонажі гравців або фонові ефекти. Усі об'єкти можуть містити інші об'єкти, тому об'єкт livingroom може містити об'єкт insurancesaleman, який тримає об'єкт briefcase, який містить об'єкт insurancepaperwork .

У ранніх версіях Inform об'єкти відрізнялися від поняття об'єктів з об'єктно-орієнтованого програмування тим, що не було такого поняття, як клас. Пізніші версії додали підтримку визначень класів і дозволили об'єктам бути членами класів. Об'єкти та класи можуть успадковуватись від кількох класів. Інтерактивні художні ігри зазвичай містять багато унікальних об'єктів. Через це багато об'єктів у Inform не успадковують жодного класу, окрім «метакласу» Object. Однак об'єкти дуже часто мають атрибути (логічні властивості, такі як scenery або edible), які розпізнаються бібліотекою Inform. В інших мовах це зазвичай було б реалізовано через успадкування.

Ось простий приклад вихідного коду Inform 6.

! Квадратні дужки означають підпрограму. Підпрогроама Main не приймає аргументів.
[ Main;
    print "Hello, World!^";
];

Процедурні частини, оператори та оператори в основному запозичені з C, за винятком того, що замість [x] використовується -->x для отримання елементів масиву. Підпрограми визначені в квадратних дужках, як у Main підпрограмі вище, але викликаються в круглих дужках, як у C. Символ @ використовується для екранування символів і для виклику необроблених кодів операцій Z-машини.[3]

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

[ред. | ред. код]

Система Inform також містить бібліотеку Inform, яка автоматизує майже всю найскладнішу роботу з програмування інтерактивної літератури; зокрема, він містить аналізатор тексту, який інтерпретує ввід від гравця, і модель світу, яка відстежує об'єкти (та їхні властивості), кімнати, двері, інвентар гравця тощо.

Компілятор Inform не потребує використання бібліотеки Inform. Є кілька доступних замінних бібліотек, таких як Platypus[4] і InformATE — бібліотека, що кодує Inform іспанською мовою. Деякі ігри можуть взагалі не використовувати бібліотеку, наприклад прямий порт Zork в Inform 6.

Приклад гри

[ред. | ред. код]

Ось приклад вихідного коду 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 6 або попередніх версіях

[ред. | ред. код]
  • Curses, автор Грехем Нельсон (1993), перша гра, написана мовою програмування Inform. Вважається однією з перших «сучасних» ігор, яка відповідає високим стандартам, установленим найкращими іграми Infocom.[5]
  • Zork: The Undiscovered Underground (1997), написаний Марком Бланком і Майклом Берліном, за програмою Джеррі Кевіна Вілсона. Безкоштовно надано Activision для реклами випуску Zork: Grand Inquisitor .
  • "Anchorhead " Майкла С. Гентрі (1998) — це історія жахів із високою оцінкою, натхненна "Міфами Ктулху " Х. П. Лавкрафта .[6]
  • Photopia, автор Адам Кадр (1998), перша майже повністю вільна від головоломок гра. Переможець щорічного конкурсу інтерактивної фантастики в 1998 році.
  • Варіцелла Адама Кадре (1999). У 1999 році вона отримала чотири нагороди XYZZY, у тому числі нагороду XYZZY за найкращу гру, і про неї було написано наукове есе.[7]
  • Галатея, Емілі Шорт (2000). Галатея повністю зосереджена на взаємодії з однойменною анімованою статуєю. Galatea має одну з найскладніших систем взаємодії для неігрового персонажа в інтерактивній художній грі. Адам Кадре назвав Галатею «найкращим NPC усіх часів».[8]
  • Slouching Towards Bedlam, Star C. Foster and Daniel Ravipinto (2003). Розташована в стилі стімпанк, гра інтегрує функції метаігри (збереження, відновлення, перезапуск) у сам світ гри. Гра отримала дві нагороди XYZZY і отримала найвищий середній бал серед усіх ігор на конкурсі Interactive Fiction Competition станом на 2006 рік.
Inform 7
Парадигмаnatural-language, declarative, procedural
Дата появи2006
ТворціGraham Nelson
РозробникGraham Nelson
Останній реліз6M62 (24 грудня 2015; 8 років тому (2015-12-24) [9])
Система типізаціївивід типів
Під впливом відInform 6, Natural-language programming
Операційна системаMicrosoft Windows, Mac OS X, Linux, others
ЛіцензіяFreeware (before 2022); Artistic License 2.0 (since 2022)
Звичайні розширення файлів.Z#, .inf, .Z5 або .Z8
Вебсайтinform7.com

30 квітня 2006 року Грем Нельсон оголосив про випуск бета-версії Inform 7 у групі новин rec.arts.int-fiction. 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 та інструментарій є в активній розробці. З квітня 2022 Inform 7 має відкритий код та розробляється на GitHub.[10]

Inform 7 деякий час називався Natural Inform, але пізніше був перейменований на Inform 7. Ця стара назва є причиною того, що компілятор Inform 7 називається «NI».

Середовище розробки Inform 7

[ред. | ред. код]
IDE Inform 7 на Mac OS X із вихідним кодом і діаграмою
IDE Inform 7 на Mac OS X, що показує індексну карту та транскрипцію

Inform 7 поставляється з інтегрованим середовищем розробки (IDE) для Mac OS X, Microsoft Windows і Linux. Mac OS X IDE розроблено Ендрю Хантером. Microsoft Windows IDE розроблено Девідом Кіндером. Linux IDE (відома як GNOME Inform) була розроблена Філіпом Чіменто.[11]

Мова програмування Inform 7

[ред. | ред. код]

Помітні особливості включають сильну упередженість до декларативного стилю програмування, заснованого на правилах, і здатність виводити типи та властивості об'єктів з того, як вони використовуються. Наприклад, вислів «John wears a hat» («Джон носить капелюх») створює «person» («особу») на ім'я «John» (оскільки лише люди можуть носити речі), створює «thing» («річ») із властивістю «wears» (оскільки можна носити лише об'єкти, позначені як «wears»), і встановлює що Джон є в капелюсі.

Іншим помітним аспектом мови є пряма підтримка відносин, які відстежують асоціації між об'єктами. Це включає в себе автоматично надані зв'язки, як-от один об'єкт містить інший або об'єкт, який носиться, але розробник може додати свої власні зв'язки. Розробник може додати відносини, що вказують на любов чи ненависть між істотами, або відстежувати, які персонажі в грі зустрічалися один з одним.

Inform 7 — це мова програмування, що має високу сферу прив'язки, яка забезпечує автору/програмісту набагато вищий рівень абстракції, ніж Inform 6, і вихідний код, який добре читається. Логічні та арифметичні оператори загального призначення записуються природною мовою (див., наприклад, приклад «Physics» в The Inform Recipe Book).[12]

У ранній версії Inform 7 компілятор перекладає код на Inform 6, подібно до того, як CFront робив із C++ і C. Поточний компілятор (станом на версію 10 2022 року) додатково може перекладати код безпосередньо на C і створити «індексний міні-веб-сайт», що описує історію.[13]

Приклад гри

[ред. | ред. код]

Висловлювання в Inform 7 мають форму повних речень. Порожні рядки та відступи подекуди мають конструктивне значення. Основна форма програми Inform 7 така:

"Hello, World!" by "I.F. Author"

The world is a room.

When play begins, say "Hello, World!"

Нижче наведено повторну реалізацію наведеного вище прикладу «Hello Deductible», написаного в Inform 7. Він спирається на бібліотеку, відому як «Стандартні правила», яка автоматично включається до всіх компіляцій Inform 7.

"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.

Відомі ігри, написані на Inform 7

[ред. | ред. код]

Mystery House Possessed (2005) Емілі Шорт[14] була першою загальнодоступною грою Inform 7. Його випустили в рамках проекту «Mystery House Taken Over».

1 березня 2006 року Шорт оголосила про випуск ще трьох ігор: Bronze[15] (приклад традиційної гри з інтенсивним головоломкою) і Damnatio Memoriae[16] (продовження її відзначеної нагородами Inform 6 game Savoir-Faire) приєдналися до The Reliques of Tolti-Aph Грема Нельсона[17] (2006). Коли 30 квітня 2006 року було оголошено публічну бета-версію Inform 7, шість «робочих прикладів» робіт середнього та великого масштабу були доступні разом із їхнім вихідним кодом, включаючи три ігри, попередньо випущені 1 березня.[18][19][20]

Floatpoint Емілі Шорт стала першою грою Inform 7, яка посіла перше місце в конкурсі Interactive Fiction Competition.[21] Він також отримав нагороду XYZZY 2006 року за найкращу обстановку та найкращих NPC.[22] Rendition від nespresso (2007) — політичний арт-експеримент у формі текстової пригодницької гри. Його підхід до трагедії академічно обговорювався як Асоціацією обчислювальної техніки[23] так і Кембриджським університетом.[24]

Подальше читання

[ред. | ред. код]
Inform 6
  • Офіційним посібником Inform є «Inform Designer's Manual» Грема Нельсона: це підручник, посібник і технічний документ, об'єднані в одне ціле. Він доступний безкоштовно на офіційному вебсайті Inform[25], а також доступні два друковані видання: у м'якій палітурці (ISBN 0-9713119-0-0) і у твердій (ISBN 0-9713119-3-5).[26]
  • Inform Beginner's Guide від Роджера Ферта та Соні Кесеріх (ISBN 0-9713119-2-7) намагається надати більш м'який вступ до Inform. Він доступний безкоштовно на офіційному сайті Inform.[27]
Inform 7
  • Інтерв'ю SPAG — інтерв'ю з дизайнерами Гремом Нельсоном і Емілі Шорт про розробку Inform 7. Це інтерв'ю було зроблено незадовго до публікації та опубліковано в той же день, що й перший випуск.[1]
  • «Природна мова, семантичний аналіз та інтерактивна художня література» — стаття про дизайн Inform 7 від дизайнера Грема Нельсона .[28]

Список літератури

[ред. | ред. код]
  1. а б The SPAG Interview: Graham Nelson and Emily Short on Inform 7. SPAG #44. The Society for the Promotion of Adventure Games. 30 квітня 2006. Процитовано 7 листопада 2015.
  2. Plotkin, Andrew (17 квітня 2019). What is ZIL anyway?. Zarf (англ.). I6 follows C very closely, in this example.
  3. The Inform Designer's Manual, v4, Contents. www.inform-fiction.org.
  4. Turner, Anson (14 березня 2002). Inform Platypus release 4. Процитовано 4 січня 2007.
  5. Alan De Smet (14 березня 2006). Curses (Interactive Fiction Reviews). Процитовано 1 листопада 2006.
  6. Of the 1219 games rated at «Interactive Fiction Ratings», Anchorhead was the highest rated game as of January 4, 2007. (IF Rating Stats. Архів оригіналу за 11 травня 2008. Процитовано 4 січня 2007.)
  7. Montfort, Nick; Stuart Moulthrop (August 2003). Face It, Tiger, You Just Hit the Jackpot: Reading and Playing Cadre's Varicella (PDF). Архів оригіналу (PDF) за 6 листопада 2009. Процитовано 6 листопада 2009. Published as Montfort, Nick; Moulthrop, Stuart (August 2003). Face It, Tiger, You Just Hit the Jackpot: Reading and Playing Cadre's Varicella. Fine Art Online. Mississippi State University. 17 (8). Архів оригіналу за 13 жовтня 2007.
  8. Photopia is a short story, Varicella is a world. L’avventura è l’avventura. January 2002. Процитовано 4 січня 2007.
  9. Download. Inform 7. Архів оригіналу за 27 лютого 2015. Процитовано 15 March 2016.
  10. Nelson, Graham (13 January 2023). Inform 7 Version History. GitHub.
  11. GNOME Inform 7 SourceForge project page. February 2008. — Now moved to GitHub at Chimento, Philip (27 December 2022). ptomato/inform7-ide. GitHub.
  12. 10.1. Gases. ganelson.github.io.
  13. Structure of the Inform 7 compiler. ganelson.github.io.
  14. Mystery House Taken Over. Архів оригіналу за 4 травня 2006. Процитовано 4 січня 2007.
  15. Short, Emily (2006). Bronze. Процитовано 4 січня 2007.
  16. Short, Emily (2006). Damnatio Memoriae. Процитовано 4 січня 2007.
  17. Nelson, Graham (2005). The Reliques of Tolti-Aph. Процитовано 4 січня 2007.
  18. Short, Emily (2006). Bronze. Архів оригіналу за 10 лютого 2007. Процитовано 4 січня 2007.
  19. Short, Emily (2006). Damnatio Memoriae. Архів оригіналу за 12 грудня 2006. Процитовано 4 січня 2007.
  20. Nelson, Graham (2005). The Reliques of Tolti-Aph. Архів оригіналу за 6 лютого 2007. Процитовано 4 січня 2007.
  21. 12th Annual Interactive Fiction Competition. 2006. Процитовано 12 травня 2007.
  22. XYZZY Awards: Winning Games of 2006. Архів оригіналу за 15 травня 2007. Процитовано 12 травня 2007.
  23. ACM Hypertext 2007 conference slides (PDF) (PDF).
  24. Cambridge University lecture slides.
  25. Download the Inform Designer's Manual. 1 квітня 2006. Процитовано 4 січня 2007.
  26. About the Inform Designer's Manual. 1 квітня 2006. Процитовано 4 січня 2007.
  27. Download the Inform Beginner's Guide. 1 квітня 2006. Процитовано 4 січня 2007. Firth, Roger; Sonja Kesserich (August 2004). The Inform Beginner's Guide: Third Edition (PDF). Процитовано 4 січня 2007.
  28. Graham Nelson (10 квітня 2006). Natural Language, Semantic Analysis, and Interactive Fiction (PDF). Архів оригіналу (PDF) за 14 березня 2018. Процитовано 4 січня 2007.

Посилання

[ред. | ред. код]
  • Cloak of Darkness: Inform [Архівовано August 30, 2016, у Wayback Machine.] </link> представляє ту саму коротку гру, реалізовану в Inform 6 та Inform 7, а також інших мовах для порівняння.
  • Inform 6 — Офіційний сайт
  • Inform 6 FAQ [Архівовано October 10, 2016, у Wayback Machine.] </link> на сторінках IF Роджера Ферта надає детальну інформацію про програмування в Inform 6.
  • Inform 7 — Офіційний сайт.
  • Inform, каталог посилань Open Directory Project
  • Архів інтерактивної фантастики містить багато інструментів Inform, прикладів і бібліотечних файлів.
  • Playfic — це веб-інтерфейс для створення та обміну новими іграми за допомогою Inform 7.
  • Guncho — це багатокористувацька інтерактивна художня система на основі Inform 7 із поєднанням MUD -подібного та веб-інтерфейсу.