Table of Contents
Previous Chapter
uLPC-kod är väldigt lik C-kod men fungerar väldigt annorlunda. För det första så behöver man inte kompilera uLPC. uLPC interpreteras av programmet /usr/local/bin/ulpc
och för att man ska kunna skriva skriva scripts i uLPC så kan man skriva #!/usr/local/bin/ulpc
på första raden i sitt uLPC-program.
Det som händer när uLPC startas med ett uLPC-program som argument är att funktionen main()
i det programmet anropas. På så sätt kan man skriva programmet 'hello_world' som följer:
#!/usr/local/bin/ulpc int main() { write("Hello world.\n"); }
Funktionen write() är en fördefinierad funktion som skriver ut den sträng man ger som argument till stdout.
Programmet på nästa sida rsif (Replace String In File) kommer med uLPC.
Här kan vi se exempel på if-satser och for-loopar. Som synes fungerar de precis som sina motsvarighter i C. Detta gäller även för while, do-while och return.
uLPC har många trevliga och kraftfulla typer. Dessa typer är inbyggda och är inte 'objekt' i objektorienterad mening. Någon typsäker objektorientering finns inte, inte heller 'operator overloading'.
({värde1, värde2, }).
Man kan också allokera tomma arrayer med funktionen allocate()
. Notera att om man skickar en array till en funktion så skickas bara en referens till array och om funktionen ändrar på arrayen så ändras den därför även i den anropande funktionen.
([index1 : värde1, index2 : värde2, ])
clone()
, som tar ett program som argument och returnerar ett object.
/* Sätt 1*/ obj["identifier"]
/* Sätt 2*/ obj->identifier
Om identifieraren är en variabel (och inte statisk) så returneras variabelns innehåll. Om identifieraren å andra sidan är en funktion så returneras en funktionspekare.
Notera att det inte finns några explicita pekare. Arrayer, mappings, program, object och funktioner skickas dock runt ungefär som om man skickade runt pekare till dem. Detta märks inte i hur man skriver, vilket är smidigt men kan verka förvillande för somliga.
Innan ditt program laddas laddas masterobjektet. Masterobjektet finns nomalt i filen /usr/local/lib/ulpc/master.lpc
. Mycket av uLPCs beteende kan ändras genom att modifiera masterobjektet. Om man vill kan man ange vilket masterobjekt som skall användas med -m
masterobjekt
. Masterobjektet är ansvarigt för att skriva ut felmeddlanden, ladda ditt script, sätta upp efuns skrivna i uLPC (som write
) mm. mm.
Masterobjektet laddar normalt också in /usr/local/lib/ulpc/simulate.lpc
som innehåller en hög funktioner som adderas som efuns av simulate.lpc. Efun betyder 'external function' och är helt enkelt funktioner som är globalt definierade för alla program. De kan vara inbyggda i drivern eller skrivna i uLPC. Exempel på simulerade funktioner är read_bytes
och write_file
. De är bekvämlighets- och kompatiblitets-funktioner skrivna i uLPC som använder i sin tur använder read()
och write()
.
Filhanteringen i uLPC är objektorienterad, man instansierar filprogrammet, anropar open()
i det och kan sedan använda read()
/write()
mm. Man kan också öppna sockets eller dubbelriktade pipes. Dock finns inga buffrar i uLPCs filhantering, det får man skriva själv. Jag kommer snart att implementera buffrad filhantering för uLPC i uLPC. Den buffrade filhanteringen kommer då att ingå i standarddistributionen.
Som vi sett exempel på i rsif så innehåller uLPC en hel del kraftfulla funktioner. Några exempel:
Vill du veta mer? Jag jobbar för närvarande på en referensmanual till uLPC och även om den inte är färdig än så finns det jag skrivit hittils att beskåda på:
http://www.signum.se/~hubbe/ulpc.html.
Under våren 1996 har Rodenskolan i Norrtälje och Åva Gymnasium i Täby tävlat i konsten att använda MUD-teknik i skolan för något pedagogiskt syfte.
Tävlingen resulterade i två bidrag, bägge från Åva Gymnasium:
Båda bidragen finns att beskåda inne i SvenskMUD (koppla dig till svmud.lysator.liu.se port 2216 för att titta på just de här bidragen.)
Tävlingen arrangerades i samarbete mellan Universitetet i Linköping, Åva Gymnasium, Telia Research och SvenskMUD. SvenskMUD ställde upp med plattformen.
Kontaktpersoner för tävlingen var:
Du kan läsa mer om tävlingen vid
http://www.lysator.liu.se/svmud/tavling.html