Skip to content

Commit

Permalink
hiji-delen skriven på
Browse files Browse the repository at this point in the history
  • Loading branch information
northOfThule committed Apr 13, 2010
1 parent 3fd5a88 commit ca62c78
Show file tree
Hide file tree
Showing 4 changed files with 45 additions and 31 deletions.
12 changes: 3 additions & 9 deletions rapport/kapitel/inledning.tex
Expand Up @@ -38,7 +38,7 @@ \subsection{Metod}

Vi hade tänkt följa den här planen genom varje milstolpe genom att utöka parsern, typecheckaren och interpretern 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}
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.

Expand All @@ -56,11 +56,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 för som gagnar Haskellcommunityn mest. % :D :D: D

\begin{figure}
\begin{center}
\includegraphics[width=1.0\textwidth]{image1.png}
\caption{Överblick över tolkens struktur och interaktion}
\end{center}
\end{figure}
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

21 changes: 16 additions & 5 deletions rapport/kapitel/metod.tex
Expand Up @@ -5,19 +5,28 @@ \section{Metod}
\subsection{Arbetsmetodik}

% modulbaserat arbete..
Under planeringsstadiet upptäcktes tidigt att projektet kunde med enkelhet 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. Därmed valdes det att arbeta parallellt på de olika modulerna.
Under planeringsstadiet upptäcktes tidigt att projektet kunde med enkelhet 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.

Arbetssättet präglades utav en iterativ utvecklingsmetodik med korta utvecklingscyklar.
\begin{figure}[H]
\begin{center}
\includegraphics[width=1.0\textwidth]{image1.png}
\caption{Överblick över tolkens struktur och interaktion}
\end{center}
\end{figure}


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 \citep{fang01} som alla ska följa.
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 det var det som alla i medlemmar i projektet hade erfarenhet från tidigare. Tyvärr har SVN vissa problem när det kommer till att skapa nya förgreningar och sedan sammanfoga dem. Det är generellt sett svårt att sammanfoga olika grenar i SVN, medan i Git är designat för att med enkelhet skapa nya grenar och slå ihop dem.
Under de första veckorna av projektet användes SVN. Valet berodde på att det var det som alla i medlemmar i projektet hade erfarenhet från tidigare. Tyvärr har SVN vissa problem när det kommer till att skapa nya förgreningar och sedan 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.
Expand All @@ -34,7 +43,9 @@ \subsection{Kodbibliotek}
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 JSParser.

%% Johan kanske kan skriva nåogt mer och vettigt här?
Parsern implementeras med hjälp av ett parser combinator bibliotek kallat JSParse.
En parser combinator använder sig utav olika regler som man kan kombinera för att skapa komplexa parsers.
Denna parser combinator ger oss möjlighet att på ett enkelt sätt
implementera den del av Haskells syntax som inte är context free.
Expand Down
42 changes: 25 additions & 17 deletions rapport/kapitel/resultat.tex
Expand Up @@ -10,34 +10,42 @@ \subsection{Abstrakt syntaxträd}
\subsection{Typcheckare}
%TODO

\subsection{Interpretator}

\subsection{HIJi}


HIJi erbjuder användaren ett GHCi-liknande gränssnitt. HIJi fungerar som en fasad in i programmet.
HIJi tar input genom att användaren skriver in Haskellkod som därefter tolkas av parsern och slutligen evalueras uttrycket. Resultatet av uttrycket visas på raden under.

HIJi är skapat för att likna GHCi i så stor utsträckning som möjligt. Det finns väldigt goda anledningar till att göra detta. Dels är GHCi ett mycket kompetent verktyg när man programmerar i Haskell. Att kolla upp funktionsdeklarationer och testa kodfragment är något som varje professionell haskellprogrammerare gör varje dag. Genom att efterlikna GHCi så kommer användare känna igen sig när de tar steget från HIJi till GHCi. Det blir för dem ett naturligt steg och kortar inlärningströskeln avsevärt. Även för haskellprogrammerare som är väl införstådda i GHCi's möjligheter blir det lättare att använda sig utav HIJi, de behöver inte fundera hur verktyget ska användas.
% Dock finns det vissa nackdelar med ett terminalliknande gränssnitt.

\begin{figure}
\subsection{HIJi}
HIJi, Haskell in Javascript Interpreter, är den del av projektet som användaren tydligast kommer märka av eftersom det är fasaden in i hela programmet.
HIJi erbjuder användaren ett GHCi-liknande användargränssnitt direkt i webläsaren.
HIJi tar input genom att användaren skriver funktioner och uttryck i HIJi. När användaren klickar på retur tolkas inputen av parsern och bygger upp det abstrakta syntaksträdet. Därefter evalueras uttrycket utav interpretern.
%Resultatet av uttrycket visas på raden under.

HIJi är skapat för att likna GHCi i så stor utsträckning som möjligt. Det finns väldigt goda anledningar till att göra detta. Dels är GHCi ett mycket kompetent verktyg när man programmerar i Haskell. Att kolla upp funktionsdeklarationer och testa kodfragment är något som varje professionell haskellprogrammerare gör varje dag. Genom att efterlikna GHCi så kommer användare känna igen sig när de tar steget från HIJi till GHCi. Det blir för dem ett naturligt steg och kortar inlärningströskeln. Även för haskellprogrammerare som är väl införstådda i GHCi's möjligheter blir det lättare att använda sig utav HIJi, de behöver inte fundera hur verktyget ska användas.
Dock finns det vissa nackdelar med ett terminalbaserat användargränssnitt. Terminalbaserade användargränssnitt anses inte vara lika enkelt och intuitivt att förstå som ett grafiskt användargränssnitt.
Våran förhoppning var att genom att erbjuda användarna ett interaktivt användargränssnitt att detta problemet skulle neutraliseras.
HIJi erbjuder dock ingen interaktivitet för närvarande vilket i sin tur medför att HIJi inte är såpass användarvänligt för nybörjare att de kan använda det utan någon inlärning.

%Byt ut denna bilden om hiji uppdateras och kanske till en bild som visar lite bättra var man kan göra..
\begin{figure}[H]
\begin{center}
\includegraphics[width=1\textwidth]{hiji_screen3.png}
\caption{HIJi användargränssnitt}
\end{center}
\end{figure}

%Byt ut denna bilden om hiji uppdateras!
Bilden ovan visar hur HIJi ser ut för användaren. De första raderna visar precis som i GHCi vilka moduler som för närvarande är laddade. I detta exemplet är det en modul laddad med namnet Prelude. Därefter följer en prompt där användaren fritt kan skriva in egna funktioner. I exemplet har användaren använt sig utav en av de inbyggda funktionerna i Prelude och en lambda-funktion.
Figur 2 visar hur HIJi ser ut för användaren. De första raderna visar precis som i GHCi vilka moduler som för närvarande är laddade. I detta exemplet är det en modul laddad med namnet Prelude. Därefter följer en prompt där användaren fritt kan skriva in egna funktioner. I figuren visas en lambda-funktion.

%TODO get source from cp-book at home
%ODO get source from cp-book at home

HIJi är tänkt att erbjuda användaren liknande möjligheter som GHCi.
%HIJi är tänkt att erbjuda användaren liknande möjligheter som GHCi.

% TODO skriv om detta
Fördelen med HIJi framför GHCi är att användaren ej behöver ladda ner den tunga GHC-kompilatorn på sin personliga dator för att testa enkla Haskelluttryck direkt i webbläsaren.
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 vilka typer en funktion stöds ej.
\subsubsection{Fördelar och nackdelar kontra GHCi}
Fördelen med HIJi framför GHCi är att användaren ej behöver ladda ner den stora GHC-kompilatorn på sin personliga dator för att testa enkla Haskelluttryck direkt i webbläsaren. Den åtgångna tiden från viljan att testa Haskell till tidpunkten att man faktiskt sitter med det framför sig kortas.
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.

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.
% MOOAR


% 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.
% stop remove

1 change: 1 addition & 0 deletions rapport/rapport.tex
@@ -1,5 +1,6 @@
\documentclass[a4paper, 12pt]{article}

\usepackage{float}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[swedish]{babel}
Expand Down

0 comments on commit ca62c78

Please sign in to comment.