MOO (язык программирования) - MOO (programming language)

MOO
Парадигмамультипарадигма: структурированный, на основе прототипа
РазработаноСтивен Уайт
РазработчикСтивен Уайт и Павел Кертис
Впервые появился1990
Стабильный выпуск
1.8.1 / 10 января 2001 г.
Печатная дисциплинадинамичный
Основной реализации
MOO
Под влиянием
Алгол, Лисп, Схема, Болтовня, Себя, C, Ада, MUF
Под влиянием
CoolMUD, ColdC

В Язык программирования MOO относительно простой язык программирования используется для поддержки MOO Сервер. это динамически типизированный и использует на основе прототипа объектно-ориентированный система, с синтаксис примерно получено из Ада школа языков программирования.

История

Стивен Уайт создал первый сервер MOO и язык в 1990 году, используя C. В течение года к проекту присоединился Павел Кертис, выпустив первую версию LambdaMOO Сервер. LambdaMOO управляется и поддерживается полностью на добровольной основе, и теперь у него есть собственный SourceForge проект. Хотя последний пакетный выпуск был выпущен в 2001 году, разработка продолжается в CVS проекта на Sourceforge.net. [1] Некоторый дополнительный код также доступен на Github.net.

Уайт описывает MOO как «мешанину из c-подобных операторов и структур управления, подобных Ada, в сочетании с одиночным наследованием в стиле прототипа».

Функции

В языке есть явные Обработка исключений поток управления, а также традиционные конструкции цикла. Иерархия глаголов и свойств предоставляет значения по умолчанию для объектов-прототипов, с преобладающими значениями ниже в иерархии. Эта иерархия объектов поддерживается посредством делегирования «родительскому» свойству объекта, что приводит к форме единственного наследования. Специальные связанные с безопасностью атрибуты объектов, команд и свойств включают владение, а также флаги чтения, записи и выполнения. Программы MOO компилируются в виде байтового кода с неявной декомпиляцией при редактировании, что обеспечивает каноническую форму программ.

Программы MOO ортогонально настойчивый через периодические контрольно-пропускные пункты. Объекты идентифицируются уникальным целочисленным идентификатором. Неиспользуемые данные программы удаляются через автоматический сбор мусора (реализовано подсчет ссылок ). Однако сами объекты MOO не собираются сборщиком мусора и вручную удаляются их владельцами или суперпользователями (также известными как мастера) в процессе, называемом «переработка».

MOO явно является многопользовательской системой, и программы (глаголы) создаются любым количеством подключенных пользователей. Различают «драйвер» (среда выполнения) и «ядро» (программы, написанные на языке MOO). Подавляющее большинство функций работающего MOO обрабатываются «внутри ядра».

Среда выполнения поддерживает многозадачность с использованием метода квантования времени на основе возмездия. Глаголы выполняются с монопольным доступом к базе данных, поэтому для поддержания синхронизации не требуется явной блокировки. Простой обмен сообщениями TCP / IP (совместимый с telnet) используется для связи с клиентскими сокетами, каждый из которых идентифицируется с помощью «игрока» в Виртуальная реальность система представительства.

Язык поддерживает слабые ссылки на объекты по номерам, а также на свойства и глаголы через строки. Существуют встроенные функции для получения списков свойств и глаголов, предоставляющие возможности языковой среды выполнения для отражение. Сервер также поддерживает сопоставление глаголов с подстановочными знаками, поэтому один и тот же код можно легко использовать для обработки нескольких команд с похожими именами и функциями.

Доступная последовательность типы в MOO есть списки и строки. Оба поддерживают произвольный доступ, а также операции головы и хвоста, аналогичные тем, которые доступны в Лисп. Все операции со списками и строками являются неразрушающими, и все типы данных, не являющиеся объектами, неизменяемы. Встроенные функции и библиотеки позволяют также использовать списки как ассоциативные массивы, а также упорядоченные и неупорядоченные наборы.

Синтаксис

Структуры управления

MOO имеет очень простой набор управляющих структур, причем for-in-list является единственной «необычной» функцией.

если еще

если (<expr>)    <заявления>;elseif (<expr>)    <заявления>;еще    <заявления>;endif

за

за <Переменная> в [<номер>..<номер>]    <заявления>;конец
за <Переменная> в (<значение списка>)    <заявления>;конец

пока

пока (<выражение>)    <заявления>;в конце концов

попробуй ... кроме

пытаться    <заявления>;Кроме <Переменная> (<код ошибки>)    <заявления>;Endtry

Примеры программ

Классический Программа Hello World можно записать в MOO как:

@программа привет:пробегигрок:рассказать("Привет миру MOO!");.

Более интересный пример:

 @программная игрушка:ветер если (это.место расположения == игрок)   если (это.ранить < это.максимум)     это.ранить = это.ранить + 2;     игрок:рассказать("Вы заводите", это.имя,".");     игрок.место расположения:объявить(игрок.имя, "закручивает", это.имя,".");     если (это.ранить >= это.максимум)       игрок:рассказать(«Ручка останавливается во время завода».);     endif   еще     игрок:рассказать("The",это.имя,"уже полностью намотан".);   endif еще   игрок:рассказать("Вы должны держать", это.имя,"."); endif .

[2]

Смотрите также

Рекомендации

дальнейшее чтение

  • Стейси, Крис (1995). «14. Программирование MOO». В Бьюзи, Эндрю (ред.). Секреты мастеров MUD. Издательство SAMS. С. 307–369. ISBN  0-672-30723-5.
  • Кертис, Павел (Май 2004 г.). "Руководство программиста LambdaMOO". Ресурсы сервера MOO.
  • "Памятка по программированию MOO". ресурсы по программированию moo. 1999-01-10.
  • "Неофициальное руководство по программированию MOO". ресурсы по программированию moo. 1994-01-10.