Göm menyn

Filip Strömbäck

Exjobbsförslag


Exjobbsförslag

Nedan finns en samling förslag för examensarbete. Många av dem är relaterade till visualiseringsverktyget Progvis, eller till språket Storm som Progvis är implementerat i. De flesta av förslagen nedan är just förslag. Det innebär att de inte är satta i sten, och kan justeras för att bättre passa dina intressen. Hör av dig om du är intresserad av någon av förslagen så kan vi diskutera närmare.

  • Utveckling av en plugin för VSCode (eller annan IDE) för Storm

    Storm är byggt för att vara ett interaktivt system. Det finns exempelvis möjlighet att interaktivt utforska dokumentation, interaktivt göra syntax highlighting av källkod för utökningsbara språk, ladda om kod, etc. För att göra detta på ett smidigt sätt behövs dock en plugin till den editor som används. I dagsläget finns en plugin till Emacs. Protokollet är dock byggt för att inte vara knutet till en specifik editor. Detta gör det möjligt och intressant att utveckla en plugin även till exempelvis VSCode.

  • Implementation av webbserver/webbramverk i Storm

    Detta förslag består av ett antal steg. Det första steget är att undersöka olika sätt att implementera en webbserver i Storm som klarar av att producera enkla webbsidor. Det går att implementera en egen webbserver direkt i Storm, men för att köra kod i en produktionsmiljö behöver andra alternativ också undersökas. Exempelvis finns standardiserade gränssnitt såsom WSGI för att integrera med exempelvis Apache eller Nginx.

    Nästa steg blir sedan att implementera ett enkelt ramverk (antagligen med någon form av speciell syntax) som gör det enkelt att implementera webbapplikationer. Andra ramverk, exempelvis Flask, kan användas som inspiration.

    Ett sista, relativt stort steg är att ytterligare bygga vidare på ramverket och tillhandahålla ett domänspecifikt språk med tillhörande datarepresentation för att enkelt generera och manipulera HTML på ett säkert sätt. I en förlängning är målet att tillåta utveckling av hela webbsidor direkt i Storm (vilket innebär att kod i Storm kan "kompileras" till JavaScript som sedan körs på klienten), och att trådningsmodellen i Storm kan nyttjas för att kommunicera mellan server och klient (se "distribuerade system" nedan).

  • Implementation av bibliotek för tid/datum i Storm

    De flesta språk har någon form av ADT för att hantera tid och datum. Detta finns dock inte i Storm, men i och med bland annat SQL-biblioteket så har behovet uppstått i Storm. I dagsläget finns enkla datatyper Moment och Duration som kan användas för att mäta tid under körning av ett program. Däremot så saknas helt koncept såsom tidszoner, sommartid, textformattering, textinläsning, etc. som finns i många andra system.

    Exjobbet består alltså av att dels undersöka hur problematiken kring tid är löst av andra bibliotek, och implementera en lämplig lösning i Storm (antagligen med hjälp av någon form av bibliotek, kanske C-biblioteket, för vissa delar).

  • Visualisering av Java i Progvis

    Ett tidigare exjobb har påbörjat en Java-frontend för att kunna visualisera Java-program i Progvis. Den är dock inte komplett ännu. Det tidigare exjobbet har sammanställt en lista över vilken funktionalitet som saknas, och i ungefär vilken ordning ny funktionalitet bör implementeras baserat på vad som används oftast i studentkod.

    Ett alternativ är alltså att fortsätta på den implementation som finns och implementera ytterligare funktionalitet från Java (exempelvis definiera objekt, skapa objektinstanser, ...). I en förlängning kommer detta att involvera att fundera på hur delar av Javas standardbibliotek ska integreras med det som finns i Storm, samt hur vissa nya koncept ska visualiseras i Progvis.

  • Utökning av SQL-bibliotek i Storm

    Ett tidigare studentarbete började på en implementation av ett SQL-bibliotek i Storm. Detta bibliotek tillåter programmeraren att integrera SQL-satser direkt i andra programmeringsspråk, och gör detta på ett sätt som tillåter typkontroll av SQL-satserna, och resultaten därifrån. I dagsläget finns stöd för databaserna SQLite och MariaDB, men biblioteket är byggt för att tillåta flera typer av databaser.

    Ett tidigare exjobb har undersökt vilken funktionalitet som finns i olika databaser. Detta gör det relativt enkelt att implementera stöd för flera databaser i dagsläget. Ofta behövs dock lite handpåläggning för att hantera små skillnader mellan dem.

    Utifrån det tidigare exjobbet är det också intressant att undersöka hur de frågor som inte stöds av alla databaser kan hanteras. Biblioteket har i dagsläget bara stöd för relativt begränsade frågor, så stöd hos databaser är inget problem. Det är däremot intressant att utöka stödet (ex.vis för sub-queries) för att göra biblioteket mer komplett. Detta kan göra så att en fråga behöver uttryckas på olika sätt i olika databaser på grund av begränsningar i databaserna. Exjobbet involverar i så fall att "skriva om" frågor baserat på vilken databas som används, så att kompatibiliteten kan bibehållas.

    Dokumentation för biblioteket finns här

  • Stöd för distribuerade system i Storm

    Språket Storm har inbyggt stöd för trådning. Modellen bygger på så kallade actors som skickar meddelanden mellan varandra. Denna modell lämpar sig även för distribuerade system, eftersom den inte kräver delat minne. Exjobbet går alltså ut på att utöka trådmodellen till att också inkorporera kommunikation mellan olika processer som kanske körs på separata system. I Storm finns det redan nu stöd för nätverkskommunikation och serialisering av objekt. Det som kvarstår är alltså att använda detta för att utöka trådmodellen på lämpligt sätt.

  • Reaktiv programmering i Storm

    Reaktiv programmering är en programmeringsparadigm som ofta är smidig för att bygga användargränssnitt. Det finns ett flertal exempel på språk och ramverk som använder reaktiv programmering. Ett exempel är språket elm, som är byggt från grunden med reaktiv programmering i åtanke. Ett annat exempel är React.

    Flexibiliteten i Storm gör det möjligt att implementera stöd för reaktiv programmering som ett bibliotek. Biblioteket kan innehålla både den funktionalitet som krävs för reaktiv programmering och ny syntax som gör det enklare att använda funktionaliteten. Denna artikel om elm ger en bra introduktion till idéerna bakom reaktiv programmering.

  • Unifierade och integrerade shaders i Storm (pågående)

    Storm innehåller ett grafikbibliotek för hårdvaruaccelererad 2D-grafik. På Windows används Direct 2D, och på Linux används Cairo eller Skia. Dessa bibliotek (åtminstone Direct 2D och Skia) ger möjligheten att definiera egna shaders för att kunna generera intressanta effekter. Problemet är att olika bibliotek använder olika språk för shaders. Direct 2D använder HLSL, medan Skia använder ett eget språk (för att i sig kunna stödja olika grafikbibliotek, bland annat OpenGL).

    Exjobbet går därmed ut på att skapa ett domänspecifikt språk i Storm som tillåter att användare definierar egna shaders som sedan kan kompileras till lämplig representation för det grafikbibliotek som används. I den bästa av världar går det även att köra program skrivna i shader-dialekten direkt på CPU:n också om det behövs. Det finns också intressanta problem gällande parametrar från språket till shadern (exempelvis så kallade uniforms).

  • Visualisering av syntaxträd och parsning (föreslagen av Pontus Haglund)

    Pontus är ansvarig för en kurs om datorspråk. I den kursen introduceras kontextfria grammatiker och parsning. Då detta är relativt komplexa koncept har Pontus uttryckt ett önskemål om möjligheten att visualisera parsningsprocessen och resulterande parseträd, både för att kunna visa under föreläsningar och för att studenterna ska kunna öva själva.

    Detta kan lösas på många olika sätt. Ett sätt är att implementera detta i Storm. Där finns en uppsättning av parsers som kan producera parseträd utifrån en given grammatik. Ett annat alternativ är att bygga något baserat på den parser som används i kursen (skriven i Ruby). Det finns många olika sätt som man kan visualisera detta på, så en del av exjobbet blir då att fundera på vad som passar (i diskussion med mig och Pontus), och att utvärdera användbarheten av resultatet.

  • Visualisering och felsökning av templates i C++ (föreslagen av Christoffer Holm) (pågående)

    (upptagen)

    Det är ofta väldigt svårt att förstå vad som händer, och därmed också att felsöka hur klassmallar (templates) expanderas i C++. Detta skulle kunna underlättas genom att bygga en debugger/visualisering av expansionen. Exempelvis i Storm, i samband med Progvis. Exjobbet involverar således att undersöka hur detta kan visualiseras, implementera en prototyp, och utvärdera resultatet i någon mån.


Sidansvarig: Filip Strömbäck
Senast uppdaterad: 2024-03-08