Skip to content

Commit

Permalink
rapportÄ
Browse files Browse the repository at this point in the history
  • Loading branch information
northOfThule committed Apr 29, 2010
1 parent 067b88f commit c04dbf8
Show file tree
Hide file tree
Showing 5 changed files with 58 additions and 58 deletions.
6 changes: 4 additions & 2 deletions rapport/kapitel/forkortningslista.tex
@@ -1,2 +1,4 @@
\section{Förkortningslista}
TODO:kanske ej behövs??
\section{Ordlista}



26 changes: 13 additions & 13 deletions rapport/kapitel/inledning.tex
@@ -1,19 +1,17 @@
\section{Inledning}

\subsection{Bakgrund}
På vissa av Chalmers och Göteborgs Universitets datorvetenskapliga program är den första programmeringskursen i Haskell \citep{haskell98} och för en del av de nya eleverna är inlärningströskeln relativt hög. De studenter som börjar på de datavetenskapliga programmen på Chalmers och Göteborgs Universitet är allt från nybörjare till mycket kompetenta inom programmering. De flesta saknar dock kunskaper kring funktionell programmering har programmerat mest i något av de stora mainstream-programmeringsspråken, vilket i nästan alla fall innebär ett objektorienterat programmeringsspråk. Skillnaden mellan ett funktionellt programmeringsspråk och ett objektorienterat är stora och omställningen hur man behöver angripa programmeringsrelaterade problem är inte enkel för de flesta nybörjare. Vi tror att ett interaktivt webverktyg skulle kunna sänka tröskeln och underlätta undervisningen. Ett webverktyg medför även att man slipper installera och lära sig extra verktyg så som Glasgow Haskell Compiler \citep{ghc}. Webbens stöd för interaktivitet gör det möjligt att snabbt visa funktionsdeklarationerna för de inbyggda funktionerna och att enkelt evaluera funktionerna och testa sig fram till olika resultat.
På vissa av Chalmers och Göteborgs Universitets datorvetenskapliga program är den första programmeringskursen i Haskell \citep{haskell98} och för en del av de nya eleverna är inlärningströskeln hög. De studenter som börjar på de datavetenskapliga programmen på Chalmers och Göteborgs Universitet är allt från nybörjare till mycket kompetenta inom programmering. De flesta saknar dock kunskaper kring funktionell programmering. Skillnaden mellan ett funktionellt programmeringsspråk och ett objektorienterat är stora och omställningen hur man behöver angripa programmeringsrelaterade problem är inte enkel för de flesta nybörjare. Vi tror att ett interaktivt webverktyg skulle kunna sänka tröskeln och underlätta undervisningen. Ett webverktyg medför även att man slipper installera och lära sig extra verktyg så som Glasgow Haskell Compiler \citep{ghc}. Webbens stöd för interaktivitet gör det möjligt att snabbt visa funktionsdeklarationerna för de inbyggda funktionerna och att enkelt evaluera funktionerna och testa sig fram till olika resultat.

Många programmerare kommer inte i kontakt med funktionell programmering och med hjälp av ett interaktivt webbverktyg som är enkelt för användaren att använda så är vår förhoppning att fler programmerare och studenter ska komma i kontakt med funktionell programmering, och i synnerhet Haskell. Då flera moderna objektorienterade programmeringsspråk börjar ta begrepp och funktionalitet ifrån funktionella programmeringsspråk så är det extra viktigt att programmerare kommer i kontakt med funktionell programmering. Ett exempel på detta är C\# som i senare versioner har fått stöd för bland annat lambdafunktioner \citep{csharp}.
Många programmerare kommer inte i kontakt med funktionell programmering och med hjälp av ett interaktivt webbverktyg som är enkelt för användaren att använda så är vår förhoppning att fler programmerare och studenter ska komma i kontakt med funktionell programmering, och i synnerhet Haskell. Då flera moderna objektorienterade programmeringsspråk börjar ta begrepp och funktionalitet från funktionella programmeringsspråk så är det extra viktigt att programmerare kommer i kontakt med funktionell programmering. Ett exempel på detta är C\# som i senare versioner har fått stöd för bland annat lambdafunktioner \citep{csharp}.

En fördel med att ha tolken på webben är att det enda som behövs för att använda den är en javascriptkompatibel webbläsare, något som följer med i princip i alla moderna operativsystem. Detta betyder att de användare som befinner sig inom vår målgrupp redan har den programvaran som behövs på sina hemdatorer för att använda sig av vårt program.

% TODO teori eller bakgrund?
Haskell är ett starkt statiskt typcheckat och funktionellt programmeringsspråk med icke-strikt semantik. % TODO: Citera, skriv om ifall det är direktöversatt
Haskell är ett starkt statiskt typcheckat och funktionellt programmeringsspråk med lat evaluering. % TODO: Citera, skriv om ifall det är direktöversatt
% jag bytte från strikt semantik till lat evaluering:p
Att språket är funktionellt innebär bland annat att funktioner är \emph{first-class citizens} och kan därmed användas som parametrar och returneras från andra funktioner precis som vilken annan typ som helst.

% TODO teori eller bakkgrund?
Icke strikt semantik, även kallat \emph{lazy evaluation}, innebär mer konkret att evalueringen av ett uttryck inte kommer utföras förrän resultatet av uttrycket behövs. Om uttrycket inte behövs kommer interpretatorn att ignorera det. % TODO: är inte laxy evaluation ett specialfall av strikt semantik?

Lat evaluering innebär mer konkret att evalueringen av ett uttryck inte kommer utföras förrän resultatet av uttrycket behövs. Om uttrycket inte behövs kommer interpretatorn att ignorera det.
Lazy evaluation gör att programmeraren inte behöver bry sig om exekveringsordningen av ett program. Detta ger prestandaförbättringar eftersom ett uttryck inte evalueras alls om det inte behövs \citep{hudak89}.
Lazy evaluation gör det också möjligt att använda sig av oändliga datastrukturer, till exempel oändliga listor. Språket blir därmed mer uttrycksfullt.

Expand All @@ -29,7 +27,8 @@ \subsection{Syfte}
Syftet är en implementera en fungerande haskelltolk i Javascript. Den ska kunna tolka en delmängd av Haskell-specifikationen så att den kan användas för att göra exempelvis interaktiva tutorials för nybörjare.
Meningen är att dessa ska kunna köras i en vanlig webbläsare utan att ladda ner en haskellkompilator, till exempel GHC, eller behöva lära sig krångliga kommandon.

\subsection{Problem}
\subsection{Problembeskrivning}
%% WHAT THE FACK SKA VI SKRIVE HEAR?!!Ö!

\subsection{Metod}
Det normala tillvägagångssättet när man skriver en tolk är att först
Expand All @@ -46,15 +45,16 @@ \subsection{Metod}
En interaktiv prompt som kan köras i en webbläsare kommer att utvecklas. Den ska ge användaren möjlighet att skriva Haskell-funktioner och exekvera dem på ett liknande sätt som i GHCi.
Vi kommer att integrera jQuery \citep{jquery} för att få ett unisont stöd över samtliga webbläsare. jQuery kommer även underlätta arbetet med att skapa ett enkelt och stilrent interaktivt gränssnitt.

\subsubsection{Avgränsningar}
Att tolka Haskell i Javascript är inget trivialt projekt och därför kommer inte hela Haskell att implementeras. Vi kommer implementera den version av Haskell som kallas Haskell 98.
Endast en delmängd av Haskell 98 specifikationen kommer att implementeras. De delar som prioriteras är
\subsubsection{Avgränsningar}
Att tolka Haskell i Javascript är inget trivialt projekt och därför kommer inte hela Haskell att implementeras. Vi kommer implementera en delmängd av den version av Haskell som kallas Haskell 98.
De delar som prioriteras är
\begin{enumerate}
\item{lambda-funktioner, namngivna funktioner}
\item{typer, generella typer, algebraiska datatyper}
\item{typklasser}
\item{pattern matching}
\item{Guards}
\end{enumerate}
Med dessa delar implementerade kan de flesta enklare haskellprogram köras och bör vara tillräckligt för det stora flertalet nybörjare.% Man ska komma ihåg att detta projekt inte kommer resultera i något som ska ses som en ersättning till att använda vanliga haskellkompilatorer, såsom GHC och Hugs, utan en snabbare inkörsport för att lära sig Haskell. Därför anser vi att detta är en bra kompromiss som gagnar Haskellcommunityn mest. % :D :D: D
\end{enumerate}
Med dessa delar implementerade kan de flesta enklare haskellprogram köras och bör vara tillräckligt för det stora flertalet nybörjare. Vi kommer ej lägga någon tid på att skapa en användarvänlig webbsida utan fokus kommer ligga på att skapa haskelltolken. Dock kommer en kommandotolk som körs på en webbsida utvecklas i demonstrationssyfte för att kunna kommunicera med våran haskelltolk.
Vi kommer inte lägga någon nämnvärd tid på att optimera haskelltolken utan målet är att göra en fungerande implementation.

68 changes: 31 additions & 37 deletions rapport/kapitel/metod.tex
@@ -1,10 +1,10 @@
\section{Metod}

Nedan följer en beskrivning av de arbetsmetoder vi använt oss utav och de mjukvaror och kodbibliotek som vi använt oss utav i projektet.

\subsection{Arbetsmetodik}

% modulbaserat arbete..
\section{Metod}

Nedan följer en beskrivning av de arbetsmetoder vi använt oss utav och de mjukvaror och kodbibliotek som vi använt oss utav i projektet.

\subsection{Arbetsmetodik}

% modulbaserat arbete..
Under planeringsstadiet upptäcktes tidigt att projektet kunde med delas upp i tre separata moduler; parser, interpretator och typcheckare. Dessa tre moduler intergrerar enbart med varandra genom det abstrakta syntaxträdet. Detta medför att det är väldigt lätt att utveckla de olika delarna helt frånskilt från varandra. Figur 1 visar hur denna interaktion mellan de olika modulerna är tänkt att gå till. Man ser även att webbläsaren kommunicerar genom ett Javascript API och det abstrakta syntaxträdet och inte direkt med de olika komponenterna.

\begin{figure}[H]
Expand All @@ -17,41 +17,35 @@ \subsection{Arbetsmetodik}

Arbetssättet präglades utav en iterativ utvecklingsmetodik med korta utvecklingscyklar. Arbetet delades upp med huvudansvarstagande över var sin modul. Arbetet skedde dock framförallt i samlad grupp för att snabbt kunna delge information om vad som behövde implementeras för att samverkan mellan de olika modulerna skulle fungera friktionsfritt.

\subsection{Kodstandard}
För att få konsistens i koden och för att underlätta att olika utvecklare kan läsa och arbeta på koden samtidigt har vi utformat en intärn kodstandard som alla ska följa.
När en commit görs måste denna standard följas.
\subsection{Kodstandard}
För att få konsistens i koden och för att underlätta att olika utvecklare kan läsa och arbeta på koden samtidigt har vi utformat en intärn kodstandard som alla ska följa.
När en commit görs måste denna standard följas.
% MOOOAARRR!!

\subsection{Versionshantering}
Ett problem som alla mjukvaruprojekt av icke trivial storlek är att hantera den stora mängden filer, och distrubera uppdaterade kopior till samtliga utvecklare att arbeta på.
För att lösa detta problemet brukar man använda sig utav en versionshanteringsmjukvara.

Under de första veckorna av projektet användes SVN. Valet berodde på att alla medlemmar i projektet hade erfarenhet från det tidigare. Tyvärr har SVN vissa problem när det kommer till att skapa nya förgreningar och sammanfoga dem. Därför gick valet till att använda sig utav Git. Git är designat från grunden för att på ett enkelt sätt skapa nya och slå samman förgreningar under utvecklingens gång. Vi kunde därmed skapa en förgrening för varje modul och under arbetets gång sammanlänka allas arbeten på ett effektivt sätt.

\subsection{Javascript}
Javascript \citep{javascript} är ett programmeringsspråk som framförallt används på klientsidan på webben. Javascript är ett dynamiskt objektorienterat skriptspråk.
Javascript är det programmeringsspråk som används uteslutande i detta projektet.

\subsection{Kodbibliotek}

\emph{Standing on the Shoulder of Giants}

Detta projektet följer en fin tradition inom datorvetenskapen att om ett problem redan är löst så ska det inte behöva lösas igen. Att återuppfinna hjulet varje gång är både tidsödande och onödigt.
Därför har ett antal kodbibliotek används i projektet.
Genom att använda dessa kodbibliotek kan fokus läggas på implementeringen av de kärnområden som projektet behandlar.
Nedan följer en kort beskrivning av de olika kodbibliotek som vi använt i projektet.

\subsubsection{JSParse}
Under de första veckorna av projektet användes SVN. Valet berodde på att alla medlemmar i projektet hade erfarenhet från det tidigare. Tyvärr har SVN vissa problem när det kommer till att skapa nya förgreningar och sammanfoga dem. Därför gick valet till att använda sig utav Git. Git är designat från grunden för att på ett enkelt sätt skapa nya och slå samman förgreningar under utvecklingens gång. Vi kunde därmed skapa en förgrening för varje modul och under arbetets gång sammanlänka allas arbeten på ett effektivt sätt.

\subsection{Javascript}
Javascript \citep{javascript} är ett programmeringsspråk som framförallt används på klientsidan på webben. Javascript är ett dynamiskt objektorienterat skriptspråk.
Javascript är det programmeringsspråk som används uteslutande i detta projektet.

\subsection{Kodbibliotek}
I projektet har använt oss av ett antal kodbibliotek för att snabbare kunna utveckla haskelltolken. Detta för att snabba på utvecklingen av haskelltolken och slippa göra allt från grunden.
Nedan följer en kort beskrivning av de olika kodbibliotek som vi använt i projektet.

\subsubsection{JSParse}
Parsern implementeras med hjälp av ett parser combinator bibliotek kallat JSParse.
En parser combinator består av olika funktioner som parsar exempeliv strängar, listor och blanksteg.
Dessa funktioner kombineras för att skapa mer komplexa parsers. Det ger oss möjlighet att enkelt implementera komplexa
En parser combinator består av olika funktioner som parsar exempeliv strängar, listor och blanksteg.
Dessa funktioner kombineras för att skapa mer komplexa parsers. Det ger oss möjlighet att enkelt implementera komplexa
parsers för både dem kontextfria och den icke kontextfria varianterna av Haskell.

\subsubsection{jQuery}

jQuery är ett öppet kodbibliotek till Javascript som är dubeellicenserat under MIT License och GPL version 2.
jQuery är designat för att underlätta för utvecklare att modifiera DOM-träd, HTML, och göra asynkrona javascript-anrop.

jQuery används i projektet för att få enkelt cross browser stöd utan att behöva tänka på det.
jQuery ger även möjlighet att skapa ett enkelt och stilrent interaktivt gränssnitt utan att behöva göra allt från grunden.
Ett tillägg till jQuery kallat jQuery.Cookie används även för att förenkla användandet utav kakor.

\subsubsection{jQuery}
jQuery är ett öppet kodbibliotek till Javascript som är dubeellicenserat under MIT License och GPL version 2.
jQuery är designat för att underlätta för utvecklare att modifiera DOM-träd, HTML, och göra asynkrona javascript-anrop.

jQuery används i projektet för att få enkelt cross browser stöd i den kommandotolk vi kommer utveckla.
jQuery ger även möjlighet att skapa ett enkelt och stilrent interaktivt gränssnitt utan att behöva göra allt från grunden.
Ett tillägg till jQuery kallat jQuery.Cookie används även för att förenkla användandet utav kakor.
8 changes: 7 additions & 1 deletion rapport/kapitel/sammanfattning.tex
@@ -1 +1,7 @@
\section{Sammanfattning}


\begin{abstract}
Detta är en kort sammanfattning av innehållet i rapporten. Detta
brukar kallas för \emph{sammanfattning} på svenska och
\emph{abstract} på engelska.
\end{abstract}
8 changes: 3 additions & 5 deletions rapport/rapport.tex
Expand Up @@ -48,13 +48,11 @@
\listoffigures
\thispagestyle{empty}
% include all parts

% \input{kapitel/forkortningslista.tex}
\newpage
% \input{kapitel/forord.tex}
% \newpage
% \input{kapitel/forkortningslista.tex}
% \newpage
\setcounter{page}{1}
\input{kapitel/inledning.tex}
\setcounter{page}{10}
\newpage
\input{kapitel/teori.tex}
\newpage
Expand Down

0 comments on commit c04dbf8

Please sign in to comment.