МОО (язык программирования) - MOO (programming language)
Парадигма | мультипарадигма : структурированная , основанная на прототипах |
---|---|
Разработано | Стивен Уайт |
Разработчик | Стивен Уайт и Павел Кертис |
Впервые появился | 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
.
Смотрите также
- MOO (игровая система)
- LPC (язык программирования)
- Pike (язык программирования)
- Язык сценариев Linden (LSL)
Ссылки
дальнейшее чтение
- Стейси, Крис (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.