MOO (język programowania) - MOO (programming language)

MUCZEĆ
Paradygmat wieloparadygmat : ustrukturyzowany , oparty na prototypach
Zaprojektowany przez Stephen White
Deweloper Stephen White i Pavel Curtis
Po raz pierwszy pojawiły się 1990
Wersja stabilna
1.8.1 / 10 stycznia 2001
Dyscyplina typowania dynamiczny
Główne wdrożenia
MUCZEĆ
Wpływem
Algol , Lisp , Scheme , Smalltalk , Self , C , Ada , MUF
Pod wpływem
CoolMUD, ColdC

Język programowania MOO jest stosunkowo prostym językiem programowania używanym do obsługi serwera MOO . Jest on wpisywany dynamicznie i wykorzystuje prototypowy system zorientowany obiektowo , którego składnia pochodzi z grubsza ze szkoły języków programowania Ada .

Historia

Stephen White autorem pierwszego Moo Server i języka w 1990 roku przy użyciu C . W ciągu roku do projektu dołączył Pavel Curtis, wydając pierwszą wersję serwera LambdaMOO . LambdaMOO jest prowadzona i utrzymywana całkowicie na zasadzie wolontariatu, a teraz ma własny projekt SourceForge . Chociaż ostatnia spakowana wersja miała miejsce w 2001 r., Rozwój jest nadal aktywny w CVS projektu, na Sourceforge.net. Część dalszego kodu jest również dostępna na Github.net

White opisuje MOO jako „mieszankę operatorów podobnych do C i struktur kontrolnych podobnych do Ady, w połączeniu z dziedziczeniem pojedynczym w stylu prototypów”.

cechy

Język ma jawny przepływ sterowania obsługą wyjątków , a także tradycyjne konstrukcje pętli. Hierarchia czasownika i właściwości zapewnia wartości domyślne dla obiektów prototypowych, z nadrzędnymi wartościami niższymi w hierarchii. Ta hierarchia obiektów jest utrzymywana poprzez delegację do właściwości „nadrzędnej” obiektu, co skutkuje w postaci pojedynczego dziedziczenia. Specjalne atrybuty obiektów, czasowników i właściwości związane z bezpieczeństwem obejmują własność oraz flagi odczytu, zapisu i wykonania. Programy MOO są kompilowane w kodzie bajtowym, z niejawną dekompilacją podczas edycji, co zapewnia kanoniczną formę programów.

Programy MOO są ortogonalnie trwałe dzięki okresowym punktom kontrolnym. Obiekty są identyfikowane za pomocą unikalnego identyfikatora liczby całkowitej. Nieużywane dane programu są eliminowane przez automatyczne czyszczenie pamięci (realizowane przez zliczanie referencji ). Jednak same obiekty MOO nie są zbierane jako śmieci i są ręcznie usuwane przez ich właścicieli lub superużytkowników (tzw. Kreatorów) w procesie zwanym „recyklingiem”.

MOO jest wyraźnie systemem wielu użytkowników, a programy (czasowniki) są dostarczane przez dowolną liczbę podłączonych użytkowników. Rozróżnia się „sterownik” (środowisko wykonawcze) i „rdzeń” (programy napisane w języku MOO). Zdecydowana większość funkcjonalności uruchomionego MOO jest obsługiwana „w rdzeniu”.

Środowisko wykonawcze obsługuje wielozadaniowość przy użyciu metody wycinania czasu opartej na rekompensacie. Polecenia są uruchamiane z wyłącznym dostępem do bazy danych, więc do utrzymania synchronizacji nie jest konieczne żadne jawne blokowanie. Prosta komunikacja TCP / IP (kompatybilna z telnetem) jest używana do komunikacji z gniazdami klienckimi, z których każde jest identyfikowane jako „gracz” w systemie reprezentacji rzeczywistości wirtualnej .

Język obsługuje słabe odwołania do obiektów według liczby oraz do właściwości i czasowników za pośrednictwem łańcuchów. Istnieją wbudowane funkcje do pobierania list właściwości i zleceń, które umożliwiają refleksję w środowisku wykonawczym języka . Serwer obsługuje również dopasowywanie czasowników z użyciem symboli wieloznacznych, więc ten sam kod może być łatwo użyty do obsługi wielu poleceń o podobnych nazwach i funkcjach.

Dostępne typy sekwencji w MOO to listy i łańcuchy. Obie obsługują dostęp losowy, a także operacje typu head i tail, podobne do tych dostępnych w Lisp . Wszystkie operacje na listach i ciągach znaków są nieniszczące, a wszystkie niebędące obiektami typy danych są niezmienne. Wbudowane funkcje i biblioteki pozwalają na używanie list również jako tablic asocjacyjnych oraz uporządkowanych i nieuporządkowanych zestawów.

Składnia

Struktury kontrolne

MOO ma bardzo podstawowy zestaw struktur kontrolnych, z jedyną „fantazyjną” funkcją „for-in-list”.

Jeśli inaczej

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

dla

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

podczas

while (<expression>)
    <statements>;
endwhile

spróbuj ... z wyjątkiem

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

Przykładowe programy

Klasyczny program Hello World można zapisać w MOO jako:

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

Bardziej interesujący przykład:

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

Zobacz też

Bibliografia

Dalsza lektura

  • Stacy, Chris (1995). „14. Programowanie MOO”. W Busey, Andrew (red.). Sekrety czarodziejów MUD . Wydawnictwo SAMS . s. 307–369. ISBN 0-672-30723-5.
  • Curtis, Pavel (maj 2004). „Podręcznik programisty LambdaMOO” . Zasoby serwera MOO .
  • „Ściągawka do programowania MOO” . zasoby programistyczne moo . 1999-01-10.
  • „Nieoficjalny samouczek programowania MOO” . zasoby programistyczne moo . 10.01.1994.