MOO (linguaggio di programmazione) - MOO (programming language)

MUGGIRE
Paradigma multi-paradigma : strutturato , basato su prototipi
Progettato da Stephen White
Sviluppatore Stephen White e Pavel Curtis
Apparso per la prima volta 1990
Rilascio stabile
1.8.1 / 10 gennaio 2001
Disciplina di battitura dinamico
Principali implementazioni
MUGGIRE
Influenzato da
Algol , Lisp , Scheme , Smalltalk , Self , C , Ada , MUF
Influenzato
CoolMUD, ColdC

Il linguaggio di programmazione MOO è relativamente semplice linguaggio di programmazione utilizzato per sostenere il server MOO . È tipizzato dinamicamente e utilizza un sistema orientato agli oggetti basato su prototipi , con sintassi approssimativamente derivata dalla scuola di linguaggi di programmazione Ada .

Storia

Stephen White autore del primo server MOO e la lingua nel 1990 utilizzando C . Nel corso dell'anno, Pavel Curtis si è unito al progetto, rilasciando la prima versione del LambdaMOO Server. LambdaMOO è gestito e mantenuto interamente su base volontaria e ora ha il proprio progetto SourceForge . Sebbene l'ultima versione pacchettizzata sia stata nel 2001, lo sviluppo è ancora attivo nel CVS del progetto, su Sourceforge.net Alcuni codici successivi sono disponibili anche su Github.net

White descrive MOO come "un miscuglio di operatori simili a C e strutture di controllo simili ad Ada, combinato con un'ereditarietà singola in stile prototipo".

Caratteristiche

Il linguaggio ha un flusso di controllo di gestione delle eccezioni esplicito , nonché costrutti di ciclo tradizionali. Una gerarchia di verbi e proprietà fornisce valori predefiniti agli oggetti prototipo, con valori prioritari inferiori nella gerarchia. Questa gerarchia di oggetti viene mantenuta tramite la delega alla proprietà "padre" di un oggetto, risultando in una forma di eredità singola. Gli attributi speciali relativi alla sicurezza di oggetti, verbi e proprietà includono proprietà e flag di lettura, scrittura ed esecuzione. I programmi MOO sono compilati in byte-code, con decompilazione implicita durante la modifica, fornendo una forma canonica di programmi.

I programmi MOO sono persistenti ortogonalmente attraverso checkpoint periodici. Gli oggetti sono identificati da un identificatore intero univoco. I dati del programma inutilizzati vengono eliminati tramite la garbage collection automatica (implementata dal conteggio dei riferimenti ). Tuttavia, gli oggetti MOO in sé non vengono raccolti nella spazzatura e vengono eliminati manualmente dai loro proprietari o superutenti (ovvero procedure guidate) attraverso un processo chiamato "riciclo".

MOO è esplicitamente un sistema multiutente e i programmi (verbi) sono forniti da un numero qualsiasi di utenti connessi. Viene fatta una distinzione tra "driver" (runtime) e "core" (programmi scritti nel linguaggio MOO). La stragrande maggioranza delle funzionalità di un MOO in esecuzione è gestita "in-core".

Il runtime supporta il multi-tasking utilizzando un metodo di suddivisione del tempo basato sulla retribuzione. I verbi vengono eseguiti con accesso esclusivo al database, quindi non è necessario alcun blocco esplicito per mantenere la sincronizzazione. La messaggistica TCP / IP semplice (compatibile con telnet) viene utilizzata per comunicare con i socket client, ognuno dei quali è identificato con un "giocatore" nel sistema di rappresentazione della realtà virtuale .

Il linguaggio supporta riferimenti deboli a oggetti in base al numero e a proprietà e verbi tramite stringhe. Esistono funzioni incorporate per recuperare elenchi di proprietà e verbi, che forniscono funzionalità di riflessione per il runtime del linguaggio . Il server contiene anche il supporto per la corrispondenza dei verbi con caratteri jolly, quindi lo stesso codice può essere facilmente utilizzato per gestire più comandi con nomi e funzioni simili.

I tipi di sequenza disponibili in MOO sono elenchi e stringhe. Entrambi supportano l'accesso casuale, nonché operazioni di testa e coda simili a quelle disponibili in Lisp . Tutte le operazioni su elenchi e stringhe non sono distruttive e tutti i tipi di dati non oggetto sono immutabili. Le funzioni e le librerie incorporate consentono agli elenchi di essere utilizzati anche come array associativi e set ordinati e non ordinati.

Sintassi

Strutture di controllo

MOO ha un set molto semplice di strutture di controllo, con la funzione for-in-list che è l'unica caratteristica "stravagante".

se altro

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

per

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

mentre

while (<expression>)
    <statements>;
endwhile

prova ... tranne

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

Programmi di esempio

Il classico programma Hello World può essere scritto in MOO come:

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

Un esempio più interessante:

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

Guarda anche

Riferimenti

Ulteriore lettura

  • Stacy, Chris (1995). "14. Programmazione di MOO". A Busey, Andrew (ed.). Segreti dei maghi del MUD . Pubblicazione SAMS . pp. 307–369. ISBN 0-672-30723-5.
  • Curtis, Pavel (maggio 2004). "Manuale del programmatore LambdaMOO" . Risorse del server MOO .
  • "MOO Programming Cheat Sheet" . risorse di programmazione moo . 1999-01-10.
  • "The Unofficial MOO Programming Tutorial" . risorse di programmazione moo . 1994-01-10.