Permalink
Browse files

massa endringar

  • Loading branch information...
1 parent b831891 commit 9e57339b6aceb1531b0106675b5706291c88c578 @northOfThule northOfThule committed May 18, 2010
View
@@ -33,8 +33,8 @@
%\newcommand{\mysubtitle}{Some subtitle}
\newcommand{\writtenmonth}{May}
\newcommand{\writtenyear}{2010}
-\newcommand{\authors}{Adam Bengtsson\\Mikael Bung\\Johan Gustavsson\\Mattis Jeppsson}
-\newcommand{\authorsc}{Adam Bengtsson, Mikael Bung, Johan Gustavsson, Mattis Jeppsson} % again with comma
+\newcommand{\authors}{Adam Bengtsson\\Mikael Bung\\Johan Gustafsson\\Mattis Jeppsson}
+\newcommand{\authorsc}{ Adam Bengtsson, Mikael Bung, Johan Gustafsson, \\Mattis Jeppsson} % again with comma
\newcommand{\YYYYNN}{2010:05}
%\newcommand{\ISSN}{1652-8557}
%\newcommand{\covercaption}{Haskell 98 implementerat i Javascript för att köras i en webbläsare}
@@ -48,7 +48,7 @@
% This is just to keep the swedish letters at one place in case there are problems with encoding
\newcommand{\city}{Göteborg}
\newcommand{\country}{Sweden}
-\newcommand{\university}{Chalmers University of Technology}
+\newcommand{\university}{Chalmers University of Technology\\ Gothenburg University}
\newcommand{\thesis}{Bachelor's thesis}
\newcommand{\telephone}{+ 46 (0)31-772 1000}
\newcommand{\postcode}{SE-412 96}
@@ -100,6 +100,8 @@
\draw[step=5mm,black] (0,0) grid (\paperwidth,6.4cm);
\node[anchor=west,xshift=2.05cm,yshift=3.27cm,rectangle]{\includegraphics[width=13.2cm]{figures/Logo.pdf}};
\node[anchor=west,xshift=15.65cm,yshift=3.3cm,rectangle]{\includegraphics[width=3.6cm]{figures/Avancez.pdf}};
+ % \node[anchor=west,xshift=1.15cm,yshift=0.1cm,rectangle]{\includegraphics[width=13.2cm]{figures/gulogga.png}};
+
\end{tikzpicture}};
\end{tikzpicture}
\ \vfill
View
@@ -61,6 +61,14 @@ @inbook{haskell98chap3
chapter = 3
}
+@inbook{haskell98chap9,
+ title = "Haskell 98 Language and Libraries: The Revised Report",
+ editor = "S. Peyton-Jones",
+ year = 2003,
+ publisher = "Cambridge Univeristy Press",
+ chapter = 9
+}
+
@unpublished{haskell2010,
title = "Haskell 2010 Language Report",
author = "S. Marlow",
@@ -1,13 +1,13 @@
\renewcommand{\abstractname}{Abstract}
\begin{abstract}
-Haskell is not a widely used programming language, nor very known to the average programmer. By implementing a subset of the Haskell 98 specification in Javascript our intention is to make it possible to run Haskell in a web browser, thus making it easier for beginners to try Haskell by eliminating the need of downloading Haskell compilers such as the Glasgow Haskell Compiler.
+Haskell is not a widely used programming language, nor very known to the average programmer. By implementing a subset of the Haskell 98 specification in Javascript our intention is to make it possible to run Haskell in a web browser, thus making it easier for beginners to try Haskell by eliminating the need of downloading Haskell compilers such as the Glasgow Haskell Compiler (GHC).
In this paper we describe the process and result from the project of implementing Haskell in Javascript.
\\
\\
Our result consists of a parser, type checker, interpreter and a front end similar to GHCi.
The parser processes the text input, creating an internal structure called abstract syntax tree (AST). The type checker then analysis the AST to confirm that there are no type errors. If no errors have been detected, the AST is sent to the interpreter. The interpreter then interprets the AST in a well defined way.
\\
\\
-The results show that it is possible to successfully implement Haskell in Javascript, but a lot of more work needs to be done for making a newbie-friendly environment for learning Haskell.
+The results show that it is possible to successfully implement Haskell in Javascript, but a lot of more work needs to be done for making a beginner-friendly environment for learning Haskell.
\end{abstract}
@@ -10,36 +10,36 @@ \section{Diskussion}
\subsection{Val av språk för implementering}
Tidigt i planeringen tvingades vi välja vilket språk vår implementation skulle
bestå av. Det första alternativet var att först skriva en kompilator för att
-kompilera Haskell till JavaScript. Därefter skulle så kallad boot-strapping
+kompilera Haskell till Javascript. Därefter skulle så kallad boot-strapping
tillämpas där kompilatorn används för att kompilera sig själv till
-JavaScript. Eftersom det redan finns parsers och typcheckare för Haskell
+Javascript. Eftersom det redan finns parsers och typcheckare för Haskell
skrivna i Haskell skulle projektet mestadels handla om att finna en lämplig
-målrepresentation för Haskell i Javascript-kod och sedan implementering av en
+målrepresentation för Haskell i javascriptkod och sedan implementering av en
kodgenerator för denna. Haskells statiska typcheckning och referentiella
transparens skulle också förenkla verifiering av projektets komponenter.
Dock finns även en del nackdelar med en sådan implementation. Utan särskilda
optimeringar i kompilatorn skulle en målrepresentation nödvändigtvis innehålla
-strukturer liknande dem man finner i en interpreterare för ett lat evaluerat
-språk. Det är ett rimligt antagande att sådana optimeringar tack vare graden
-på sin komplexitet vore alltför stora för att genomföra i en kurs som
-denna. Därför anser vi att denna typ av implementation lämpar sig bäst inom
+strukturer liknande dem man finner i en interpretator för ett lat evaluerat
+språk. Det är ett rimligt antagande att sådana optimeringar på grund av sin komplexitet vore alltför stora för att genomföra i den aktuella tidsramen. Därför anser vi att denna typ av implementation lämpar sig bäst inom
ramarna för ett existerande kompilatorprojekt såsom GHC där nödvändiga optimeringar redan finns innbyggda.
Det andra alternativet var att skriva allt i Javascript och detta är den
-implementationsstrategi som vi till slut bestämde oss för. Den största
-fördelen med en sådan implementation är att integrering med annan
-Javascript-kod blir enkel. Det första alternativet skulle däremot kräva ett
+implementationsstrategi som vi till slut bestämde oss för.
+En fördel med en sådan implementation är att integrering med annan
+javascriptkod blir enkel.
+Det har också fördelen att i en interpretator bevaras kodstrukturen och en framtida interaktiv läromiljö får tillgång till mellanliggande körningsdata.
+Det första alternativet skulle däremot kräva ett
särskilt integrationslager för att få samma möjligheter.
-Det andra alternativet hade också fördelen att en stor del av vår projekts potentiella användare redan har viss erfarenhet av Javascript och liknande språk och att användande av vårt bibliotek därför blir enklare för dessa än vad motsvarande haskellimplementation skulle bli. Eftersom detta alternativ krävde att vi själva implementerar parser, typcheckare och interpreterare ansåg vi också att det gav oss större möjligheter till lärande.
+
+%stor del av vår projekts potentiella användare redan har viss erfarenhet av Javascript och liknande språk och att användande av vårt bibliotek därför blir enklare för dessa än vad motsvarande haskellimplementation skulle bli. Eftersom detta alternativ krävde att vi själva implementerar parser, typcheckare och interpreterare ansåg vi också att det gav oss större möjligheter till lärande.
\subsection{Framtida förbättringar}
Syftet med projektet, att skapa en fungerande Haskelltolk i javascript, har vi lyckats implementera om man tar hänsyn till de avgränsningar som är uppsatta. Dock om man ser till motivationen bakom projektet, att vår Haskelltolk ska kunna användas som grund för att skapa en webbaserad interaktiv läroplattform, så finns det fortfarande mycket kvar att utveckla. Framförallt handlar det om att göra Haskelltolken och HIJi mer lättanvänd för nybörjare inom funktionell programmering.
-I parsern har vi identifierat två förbättringsmöjligheter. För det första, bättre felmeddelanden
-Hjälpsamma och förklarande felmeddelanden är en viktigt del av ett utvecklingsverktyg och det generars för tillfället inte av parsern.
+I parsern har vi identifierat två förbättringsmöjligheter. För det första, hjälpsamma och förklarande felmeddelanden är en viktigt del av ett utvecklingsverktyg och det generars för tillfället inte av parsern.
Om parsern stöter på ett fel rapporterar den endast att ett fel har inträffat och avslutar parsningsprocessen.
Att förbättra dessa felmeddelanden med exempelivs rad- och kolumnnummer och specifik information om vad för fel som har inträffat skulle göra parsern mer användbar.
För att implentera detta behöver man kombinera steg 1 och 2 i parsningen för att rad- och kolumn-nummer ska bevaras korrekt då borttagning av nästlade kommentarer kan påverka dessa.
@@ -6,7 +6,7 @@ \section{Inledning}
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 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 detta e out of context`
-Haskell är ett starkt statiskt typcheckat och funktionellt programmeringsspråk med lat evaluering. % TODO: Citera, skriv om ifall det är direktöversatt
+Det som gör Haskell speciellt är att det ä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.
@@ -16,7 +16,7 @@ \section{Inledning}
%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. % TODO: citera
John Hughes argumenterar för att funktionella språk som stödjer lat evaluering erbjuder större möjligheter än imperativa språk att skriva modulära program. Detta för att funktionella språk som Haskell stödjer \emph{higher order functions}, en funktion som tar en annan funktion som argument, och lat evaluering vilket är tekniker som kan användas för att binda samman olika moduler.
-Dessa två programspråksegenskaper bidrar till att program skrivna i Haskell är generellt sätt kortare och går fortare att skriva än motsvarande program skrivet i ett imperativt programmeringsspråk \citep{why}.
+Dessa två programspråksegenskaper bidrar till att program skrivna i Haskell generellt sett är kortare och går fortare att skriva än motsvarande 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.
Förhoppningen är att vår haskelltolk i Javascript ska kunna användas som grund för att i framtiden göra en interaktiv läroplattform för nybörjare i funktionell programmering.
@@ -26,9 +26,6 @@ \subsection{Syfte}
Syftet är en implementera en fungerande haskelltolk i Javascript. Den ska kunna tolka en delmängd av haskell-specifikationen så 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 svårbegripliga kommandon.
-\subsection{Problembeskrivning}
-%% WHAT THE FACK SKA VI SKRIVE HEAR?!!Ö!
-
\subsection{Metod}
Projektet bestod av att planera, designa och implementera haskelltolken. Vi arbetade efter en iterativ modell där nya funktioner lades till undan för undan. Detta fungerade bra eftersom vi tidigt fick en fungerande prototyp att utgå från. Arbetet delades upp i separata moduler som utvecklades relativt frånskillt från varandra för att undan för undan fasas ihop till det slutgiltliga resultatet.
@@ -53,5 +50,5 @@ \subsection{Avgränsningar}
\item{Guards}
\end{itemize}
Med dessa delar implementerade kan de flesta enklare haskellprogram köras och bör vara tillräckligt för de flesta nybörjare. Vi beslutade att ej lägga någon större tid på att skapa en användarvänlig webbsida, utan fokus låg på att skapa haskelltolken. Dock valde vi att utveckla en kommandotolk som skulle köras på en webbsida för att kunna kommunicera med haskelltolken.
-slutligen beslutades det att inte optimera haskelltolken utan målet var att göra en fungerande implementation. Detta dels för att en nybörjare sällan behöver eller kommer skriva program som behöver hög prestanda.
+Slutligen beslutades det att inte optimera haskelltolken utan målet var att göra en fungerande implementation. Detta för att en nybörjare sällan behöver eller kommer skriva program som behöver hög prestanda.
Oops, something went wrong.

0 comments on commit 9e57339

Please sign in to comment.