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

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

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

История

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

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

Характеристики

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

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

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

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

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

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

Синтаксис

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

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

если еще

if (<expr>)
    <statements>;
elseif (<expr>)
    <statements>;
else
    <statements>;
endif

для

for <variable> in [<number>..<number>]
    <statements>;
endfor
for <variable> in (<list value>)
    <statements>;
endfor

пока

while (<expression>)
    <statements>;
endwhile

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

try
    <statements>;
except <variable> (<error code>)
    <statements>;
endtry

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

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

@program hello:run
player:tell("Hello to the world of MOO!");
.

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

 @program toy:wind
 if (this.location == player)
   if (this.wound < this.maximum)
     this.wound = this.wound + 2;
     player:tell("You wind up the ", this.name,".");
     player.location:announce(player.name, " winds up the ", this.name,".");
     if (this.wound >= this.maximum)
       player:tell("The knob comes to a stop while winding.");
     endif
   else
     player:tell("The ",this.name," is already fully wound.");
   endif
 else
   player:tell("You have to be holding the ", this.name,".");
 endif
 .

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

Ссылки

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

  • Стейси, Крис (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.