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.

  • Visualisering av parsning som stöd till utvecklare (pågående)

    Storm har stöd för att bygga språkutökningar. En nackdel med detta är att det gör det svårare för nya programmerare att inse vad olika konstruktioner betyder. Därmed finns det en poäng med att tillhandahålla verktyg som låter användare av systemet utforska vad syntatiska konstruktioner betyder. Visionen är att via den language server som Storm har kunna låta utvecklare utforska hur texten i en källkodsfil tolkas, och koppla den till relevant dokumentation. Detta involverar både vidareutveckling av den plugin som kommunicerar med Storm, och potentiellt language servern i Storm. Detta verktyg är också användbart för att felsöka språkutökningar under utveckling.

  • Utveckling av plugin till VSCode för Storm

    Som nämnts i förslaget ovan så finns en språkserver i Storm som tillhandahåller syntax highlighting och automatisk indentering. Det finns dock bara en plugin till Emacs i dagsläget, och plugin till ex.vis Visual Studio Code skulle förbättra upplevelsen. Språkservern ger också möjlighet att köra program och interagera med körande program (ex.vis uppdatera kod som körs). Det är dock lite oklart exakt vad frågorna till avhandlingen ska vara.

  • 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, MariaDB och PostgreSQL, 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, foreign keys, ...) 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)

    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.

  • Undersökning/visualisering av inkluderade headerfiler i större projekt (Storm)

    Ett problem som finns i C++ är att kompileringstiden blir längre ju fler headerfiler som inkluderas. För mindre projekt är detta sällan ett problem, men i större projekt kan detta ha en stor påverkan på kompileringstiden. Eftersom kompilatorn inte meddelar om man har inkluderat för många headerfiler så blir det dessutom lätt så att headerfiler som har behövts historiskt fortfarande inkluderas, även om de kanske inte längre behövs.

    I större projekt finns det därmed en poäng av att kunna analysera vilka headerfiler som inkluderas. För projektet Storm så används exempelvis byggsystemet Mymake, som håller koll på detta. Däremot finns i dagsläget inget konkret sätt att visa den informationen för utvecklare. Det som skulle behövas är alltså dels något lämpligt sätt att analysera och visa den information som finns, och kanske även någon form av automatik för att ta bort inkluderingar som inte behövs, alternativt ge förslag på mindre förändringar som kan göra det möjligt att ta bort inkluderingar.

    Detta har tidigare gjorts i andra större projekt, exempelvis i Linux-kärnan. Målet är att försöka göra något liknande för Storm, och att komma fram till generella metoder och verktyg för att göra detta på andra C++-projekt också.


Sidansvarig: Filip Strömbäck
Senast uppdaterad: 2025-01-30