Skip to content

Commit

Permalink
Merge branch 'master' of github.com:margnus1/kid-mud
Browse files Browse the repository at this point in the history
  • Loading branch information
Eric Arnerlöv committed Jun 1, 2012
2 parents bdc26b2 + 15f7e8e commit fa5d17b
Show file tree
Hide file tree
Showing 2 changed files with 218 additions and 136 deletions.
108 changes: 78 additions & 30 deletions doc/src/final_report.lyx
Expand Up @@ -222,6 +222,8 @@ Vi valde att inte implementera ett Telnet-interface trots att detta är en
MUD
\emph default
eftersom vi ville lägga fokus på samtidigheten och grundläggande funktionalitet.
Telnet är ett gammalt protokoll för att ansluta till en terminal över en
nätverksanslutning.
\end_layout

\begin_layout Section
Expand Down Expand Up @@ -495,16 +497,18 @@ Vi valde att skriva systemet i Erlang för att det är ett språk vi trodde
Fördelarna är att det är väldigt lätt att skriva kod som utnyttjar samtidighet
och att meddelandepassningen samt de lätta processerna i Erlang fungerar
väldigt bra till sättet vi valde att lösa problemet på.
Vidare så var
\emph on
Mnesia
\emph default
, som är en i Erlang inbyggd databas, mycket behändig för våra datalagringsbehov.

\end_layout

\begin_layout Standard
Dessutom så medför OTP och dess bibliotek fördelar i form av bland annat

Vi har även använt oss av Erlangs Open Telecom Platform (OTP).
Det är en samling av bibliotek och designprinciper för Erlang som i vårat
fall har underlättat arbetet.
De delar av OTP:n vi har använt är
\emph on
Mnesia
\emph default
,
\emph on
supervisor
\emph default
Expand All @@ -513,12 +517,29 @@ supervisor
gen_server
\emph default
.
Dessa är

\emph on
Mnesia
\emph default
är en databas som har varit mycket behändig för våra datalagringsbehov.

\emph on
Supervisor
\emph default
och
\emph on
gen_server
\emph default
är
\emph on
beteende-moduler
\emph default
som kan betraktas som basklasser i objektorienterad programmering.
En modul kan använda sig av ett beteende genom att exportera förbestämda

\end_layout

\begin_layout Standard
En modul kan använda sig av ett beteende genom att exportera förbestämda
funktioner, och sedan skicka sitt namn till beteende-modulen, och kallas
då för en
\emph on
Expand All @@ -530,7 +551,7 @@ callback-modul
Supervisor
\emph default
abstraherar processhantering genom att starta, starta om och stoppa processer
enligt deklarationer sina
enligt deklarationerna för sina
\emph on
callback-moduler
\emph default
Expand Down Expand Up @@ -637,7 +658,7 @@ name "fig:moduler"
\end_layout

\begin_layout Description
client.erl
client
\end_layout

\begin_deeper
Expand Down Expand Up @@ -807,22 +828,37 @@ Samtidighet
\end_layout

\begin_layout Standard
I Erlang så används message passing.
I Erlang så används message passing för att kommunicera mellan processer.
Det är väldigt lättanvänt och vi slipper att fundera på synkronisiering
med delat minne och liknande problem.
Med hjälp av OTP Design Principles så har vi delat upp de meddelanden som
skickas i calls och casts.
Med hjälp av OTP Design Principles så har vi delat upp message passing
mellan processer i två olika typer.

\end_layout

\begin_layout Standard
Den första typen är calls, de ska användas när en process vill ha ett svar
på sitt meddelande.
Detta garanterar att processen som vi kommunicerar med ska skicka tillbaka
ett svar direkt efter den har hanterat meddelandet.

\end_layout

\begin_layout Standard
Den andra typen är casts, de ska användas när en process inte vill ha ett
svar från processen som den skickar sitt meddelande till.
Detta leder till att synkronisiering kan hanteras på ett smidigt sätt när
processer pratar med varandra.
Om en process ska vänta på svar från en annan process innan den ska gå
vidare så används calls för att garantera ett svar.
Om processen inte vill ha ett svar så används casts.
Eftersom vi har valt erlang så är message passing det givna valet och vi
känner att det tillräckligt för våra behov.
Hade vi valt ett annat programmeringsspråk hade vi kunnat utforska andra
val.
I våran nuvarande struktur så finns det inte risk för deadlocks tack vare
OTP.
Vilket i sin tur leder till snabbare och mer robust kommunikation.

\end_layout

\begin_layout Standard
I våran nuvarande struktur har vi designat koden och modulerna på ett sätt
som ska förhindra att deadlocks ska uppstå.
Vi använder oss av enkelriktad kommunikation när processer kommunicerar
med calls, detta gör så att vi inte kan få några cirkulära vänteproblem.

\end_layout

\begin_layout Section
Expand All @@ -849,12 +885,24 @@ zonemaster
\emph on
gb_tree
\emph default
för att kunna slå i aktiva zoner efter id.
för att kunna slå i aktiva zoner efter id, detta för att förbättra dess
prestanda.
\end_layout

\begin_layout Standard
Records är praktiska eftersom de går att spara i en mnesia-tabell, och för
att man kan lägga till fält utan att existerande kod slutar fungera.

\emph on
Records
\emph default
är en mycket vanlig notation i funktionella språk, som fungerar ungefär
som en tupel, men där varje element,
\emph on
fält
\emph default
, ges ett namn, och kan plockas ut ur recorden genom att man uppger dess
namn.
Records är praktiska eftersom de går att spara i en mnesia-tabell, och
för att man kan lägga till fält utan att existerande kod slutar fungera.
Exempelvis används syntaxen
\begin_inset Quotes sld
\end_inset
Expand All @@ -876,8 +924,8 @@ State men med fältet players satt till UpdatedPlayers
\end_inset

.
Utan records skulle man istället ha skrivit en tupel med tiotals element
där alla utom ett är detsamma som innan.
Utan records skulle man istället skrivit en tupel med tiotals element där
alla utom ett är detsamma som innan.
\end_layout

\begin_layout Standard
Expand Down Expand Up @@ -1034,7 +1082,7 @@ slut
\end_layout

\begin_layout Description
Nerstänging
Nedstänging
\begin_inset space ~
\end_inset

Expand Down Expand Up @@ -1083,7 +1131,7 @@ Färdighetssystem För att göra allt mer intresant skulle ett system där spela
\end_layout

\begin_layout Description
Personligfiera
Personifiera
\begin_inset space ~
\end_inset

Expand Down

0 comments on commit fa5d17b

Please sign in to comment.