Skip to content

Commit

Permalink
rapport
Browse files Browse the repository at this point in the history
  • Loading branch information
northOfThule committed Apr 27, 2010
1 parent 992e969 commit 0e7bd68
Show file tree
Hide file tree
Showing 4 changed files with 56 additions and 46 deletions.
66 changes: 35 additions & 31 deletions rapport/kapitel/inledning.tex
Original file line number Diff line number Diff line change
@@ -1,50 +1,54 @@
\section{Inledning}

\subsection{Bakgrund}
På vissa av Chalmers och Göteborgs Universitets program så ä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. Det som dock förenar de flesta är att de saknar kunskaper kring funktionell programmering. De flesta som tidigare har programmerat har gjort det 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 helt enkel för de flesta nybörjare. Vi tror att ett interaktivt webverktyg skulle kunna sänka den här 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.
\section{Inledning}

En stor 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 alla tänkbara användare som vi riktar in oss mot redan har det som behövs på sina hemdatorer för att använda sig utav vårat program.
\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. Det som dock förenar de flesta är att de saknar kunskaper kring funktionell programmering. De flesta som tidigare har programmerat har gjort det 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 den här 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.

Det är även så att många programmerare inte kommer i kontakt med funktionell programmering och med hjälp utav ett interaktivt webbverktyg som är enkelt för användaren att använda så är våran 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 programering. Ett exempel på detta är C\# som i senare versioner har fått stöd för bland annat lambdafunktioner \citep{csharp}.
Det är även så att många programmerare inte kommer i kontakt med funktionell programmering och med hjälp utav 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}.

En stor 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 utav vårat program.

% TODO teori eller bakgrund?
Haskell är ett starkt statiskt typcheckat och funktionellt programeringsspråk med icke-strikt semantik.
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 retuneras 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.
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 utav oändliga datastrukturer, till exempel oändliga listor. Språket blir därmed mer uttrycksfullt.

Funktionella programmeringsspråk såsom Haskell anses också vara det naturliga steget att ta när man vill nå en högre abstraktionsnivå än den som imperativa programmeringsspråk tillåter.
Detta för att funktionella programmeringsspråk tillåter programmeraren att skriva program som är mer modulära, lättare att dela upp i separata delar, än imperativa programmeringsspråk. Den ökade modulariteten beror på att de stödjer tekniker såsom lazy evaluation och higher order functions.
Detta bidrar i sin tur yill att program skrivna i Haskell är generellt sätt kortare än ett program skrivet i ett imperativt programmeringsspråk \citep{why}.

Haskell är ett starkt statiskt typcheckat och funktionellt programmeringsspråk med icke-strikt semantik.
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.
%skriva in kod XD \lstinputlisting[language=Haskell, numbers=left]{kapitel/ex1.hs}

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 utav oändliga datastrukturer, till exempel oändliga listor. Språket blir därmed mer uttrycksfullt.

Funktionella programmeringsspråk såsom Haskell anses också vara det naturliga steget att ta när man vill nå en högre abstraktionsnivå än den som imperativa programmeringsspråk tillåter.
Detta för att funktionella programmeringsspråk tillåter programmeraren att skriva program som är mer modulära, lättare att dela upp i separata delar, än imperativa programmeringsspråk. Den ökade modulariteten beror på att de stödjer tekniker såsom lazy evaluation och higher order functions.
Detta bidrar i sin tur till att program skrivna i Haskell är generellt sätt kortare än ett program skrivet i ett imperativt programmeringsspråk \citep{why}.

Med ovan nämnda resonemang ser vi det som ovärderligt för programmerare att komma i kontakt och lära sig funktionell programmering.
Vår förhoppning är att våran Haskelltolk i Javascript i första hand ska kunna användas som en interaktiv läroplattform för studenter ska vara en inkörsport för programmerare till funktionell programmering.

\subsection{Syfte}
Syftet är en implementera en fungerande implementation av en haskkeltolk i Javascript. Den ska kunna tolka en delmängd utav 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.
Förhoppningen är att vår Haskelltolk i Javascript i första hand ska kunna användas som en interaktiv läroplattform för studenter men även fungera som en inkörsport för programmerare till funktionell programmering.


\subsection{Syfte}
Syftet är en implementera en fungerande implementation av en haskelltolk i Javascript. Den ska kunna tolka en delmängd utav 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{Metod}
Det normala tillvägagångssättet när man skriver en tolk är att man först
skapar en parser för den aktuella syntaxen, sedan en typcheckare med
hjälp av de för språket definierade typereglerna och sist en interpreter
som tolkar språket utefter dess specifikation. Vi hade tänkt följa den här planen genom varje milstolpe genom att utöka parsern, typecheckaren och interpretern med ny funktionalitet.
hjälp av de för språket definierade typereglerna och sist en interpretator
som tolkar språket utefter dess specifikation. Vi hade tänkt följa den här planen genom varje milstolpe genom att utöka parsern, typcheckaren och interpretatorn med ny funktionalitet.

Ett lämpligt delmål är att först göra en enkel implementation utav lambda calculus då mer avancerade funktionella programspråksegenskaper kan implementeras som detta \citep{jones87}.

Parsern implementeras med hjälp av ett parser combinator bibliotek kallat \emph{JSParse} \citep{jsparse}. Detta ger oss möjlighet att implementera den del av Haskells syntax som inte är context free relativt enkelt.

Vi kommer även att använda det biblioteket för att bygga ett eget syntaxträd som skickas vidare till typcheckaren och interpretern. I typcheckaren dekoreras syntaxträdet med typinformation.

Vi kommer att integrera JQuery \citep{jquery} för att få unisont stöd över samtliga webbläsare utan att behöva tänka på det. JQuery kommer också hjälpa oss med att få till ett enkelt och stilrent interaktivt gränssnitt.

Vi kommer även att använda det biblioteket för att bygga ett eget syntaxträd som skickas vidare till typcheckaren och interpretatorn I typcheckaren dekoreras syntaxträdet med typinformation.

Vi kommer att integrera jQuery \citep{jquery} för att få unisont stöd över samtliga webbläsare utan att behöva tänka på det. JQuery kommer också hjälpa oss med att få till ett enkelt och stilrent interaktivt gränssnitt.

\subsubsection{Avgränsningar}
Att tolka Haskell i Javascript är inget trivialt projekt. Därför kommer inte hela Haskell att implementeras.
Haskell
Att tolka Haskell i Javascript är inget trivialt projekt och därför kommer inte hela Haskell att implementeras.
Endast en delmängd av Haskell98 specifikationen kommer att implementeras. De delar som prioriterades är
\begin{enumerate}
\item{lambda-funktioner, namngivna funktioner}
Expand All @@ -53,5 +57,5 @@ \subsubsection{Avgränsningar}
\item{pattern matching}
\item{Guards}
\end{enumerate}
Med dessa delar implementerade kan de flesta enklare haskellprogram köras och borde 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 ett komplement till 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
Med dessa delar implementerade kan de flesta enklare haskellprogram köras och borde 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

19 changes: 6 additions & 13 deletions rapport/kapitel/metod.tex
Original file line number Diff line number Diff line change
Expand Up @@ -50,19 +50,12 @@ \subsection{Kodbibliotek}
Denna parser combinator ger oss möjlighet att på ett enkelt sätt
implementera den del av Haskells syntax som inte är context free.

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


% \subsection{Testning}
% Vi gör inga fel så vi testar inte.. *skämt* *....seriously, we do not test..* ... yes, seriously


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

2 changes: 1 addition & 1 deletion rapport/kapitel/resultat.tex
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ \subsection{HIJi}
Nackdelar gentemot GHCI är att HIJi är en nedbandat version utav GHCi. HIJi kan bara evaluera enklare uttryck. Det finns i dagsläget inga möjligheter att ladda upp hela Haskell-filer för att köra dem. Att som i GHCi på ett enkelt sätt kolla upp typen av en funktion stöds ej.

% remove!?
Ett stort problem för alla webbutvecklare idag är att de idag marknadsledande webbläsarna tolkar Javascript på olika sätt. Det har därför kommit fram en rad olika kodbibliotek för att lösa detta problemet. Ett av dessa är JQuery som HIJi använder sig utav för att få ett unisont stöd på alla moderna webbläsare.
Ett stort problem för alla webbutvecklare idag är att de idag marknadsledande webbläsarna tolkar Javascript på olika sätt. Det har därför kommit fram en rad olika kodbibliotek för att lösa detta problemet. Ett av dessa är jQuery som HIJi använder sig utav för att få ett unisont stöd på alla moderna webbläsare.
% stop remove


Expand Down
15 changes: 14 additions & 1 deletion rapport/rapport.tex
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,26 @@
\usepackage{graphicx}
\usepackage{natbib} % ger Harvard-referenser
\usepackage{graphicx}
\usepackage{listings}
\usepackage{color}

\setlength{\parskip}{12pt}
\setlength{\parindent}{0pt}

\begin{document}
\title{Haskell in Javascript}
\author{Adam Bengtsson, Mikael Bung, Johan Gustafsson, Mattis Jeppsson \\ Institutionen för data- och informationsteknik \\ Chalmers Tekniska Högskola }
\author{
Adam Bengtsson,
Mikael Bung,
Johan Gustafsson,
Mattis Jeppsson
\\
Institutionen för data- och informationsteknik
\\
Chalmers Tekniska Högskola
\\
41296 Göteborg
}
\date{\today}
\maketitle
\newpage
Expand Down

0 comments on commit 0e7bd68

Please sign in to comment.