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

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

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

Содержание
  • 1 История
  • 2 Особенности
  • 3 Синтаксис
    • 3.1 Структуры управления
      • 3.1.1 если... иначе
      • 3.1.2 для
      • 3.1.3 в то время как
      • 3.1.4 попробовать... кроме
  • 4 примера программ
  • 5 См. Также
  • 6 Ссылки
  • 7 Дальнейшее чтение
История

Стивен Уайт является автором первого МОО сервера и языка в 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 (lt;exprgt;) lt;statementsgt;; elseif (lt;exprgt;) lt;statementsgt;; else lt;statementsgt;; endif

для

for lt;variablegt; in [lt;numbergt;..lt;numbergt;] lt;statementsgt;; endfor
for lt;variablegt; in (lt;list valuegt;) lt;statementsgt;; endfor

пока

while (lt;expressiongt;) lt;statementsgt;; endwhile

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

try lt;statementsgt;; except lt;variablegt; (lt;error codegt;) lt;statementsgt;; 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 lt; 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 gt;= 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.
Смотрите также
Ссылки
дальнейшее чтение
Последняя правка сделана 2023-12-31 10:57:27
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте