Programspråk och system
Programmering är kommunikation mellan människor om det avsedda beteendet hos ett system. Programmen som vi skriver har två syften: att förstås av andra mänskliga läsare och att matas in i en dator som instruktioner för hur den ska bete sig.
Beskrivning
Det finns en mängd olika krav för dessa tänkta målgrupper. Datorer är inte särskilt känsliga för hur deras instruktioner är organiserade eller vilka termer som används för att beskriva operationer och data, men mänskliga programmerare är det. För att underlätta för mänskliga läsare (ofta författaren själv, några veckor eller månader senare) att förstå vad ett program gör, skapar vi abstraktioner som gömmer komplexiteten, och bygger programvara genom lager på lager av ökande abstraktion för att överbrygga gapet mellan ”1:or och 0:or” och det område där viss programvara används. Att programmera handlar alltså om att operationalisera och därmed förstå komplexa arbetsflöden och förklara dem för andra och för sig själv.
Olika aspekter av beräkningar är viktiga för olika program. När vi skriver programvara för de nedersta lagren i stacken ligger varje byte eller instruktion på den kritiska vägen till prestanda för varje lager ovanför. Detta motiverar fokus på resurshantering, optimering och effektiv resursanvändning. Högre upp i stacken kan vi vara mer bekymrade över hur enkelt det är att underhålla, hur utbyggbart det är och hur nära domänen det är, eller hur lång tid det tar från idé till driftsättning.
Forskningsområdet programspråk och system handlar om grunderna i programvaruutveckling. Hur ska ett språk se ut för att vara lämpligt för allt detta? Hur verifierar vi att dåliga saker aldrig sker (till exempel att vi får ett ogiltigt resultat) samtidigt som vi garanterar att bra saker sker till slut (till exempel att vi får ett resultat)? Vi studerar olika sätt att programmera: funktionella och deklarativa paradigm där programmering handlar om att förklara innebörden av operationer, samt imperativa paradigm där programmering handlar om steg-för-steg-instruktioner. Specialiserade paradigm som villkorsprogrammering är användbara för att effektivt lösa vissa typer av problem et cetera. Vi studerar också aspekter av programmering inom programvaruutveckling: hur man garanterar att program fungerar korrekt (verifiering), hur man härleder operationer från input-output exempel (syntes), och hur man effektivt utför programmerares instruktioner (kompilatorer och exekveringsmiljöer).
Forskningsämnen
- Formal semantics: Mathematical modelling of programming languages, for example to prove properties about programs or programming languages
- Model checking: Verifying the correctness of finite-state models
- Programming language design: Design of type systems and other programming language constructs for increased programmer expressivity
- Probabilistic programming: Statistical modelling using techniques from programming languages
- Program synthesis: Synthesising programs from other sources than code, for example natural language descriptions or examples
- Program verification: Ensuring that programs are correct with respect to their specification
- Runtime systems: Efficient implementations of memory management, garbage collection and concurrency
- Constraint programming: An AI approach to optimisation by systematic search: modelling languages, high-level constraints, high-level types for decision variables
- Constraint-based local search: Modelling languages, search languages, solver design
Mjukvara
- Concuerror
- Daisy
- Dialyzer
- Encore
- The Optimisation research group has its software on a different page
Seniora forskare
- Parosh Abdulla (program verification)
- Mohamed Faouzi Atig (program verification)
- Johannes Borgström (probabilistic programming and formal semantics)
- Elias Castegren (hemsida) (formal semantics, program verification, and programming language design)
- Eva Darulova (hemsida) (program synthesis and program verification)
- Lars-Henrik Eriksson (formal semantics, program verification)
- Pierre Flener (hemsida) (constraint programming and constraint-based local search)
- Bengt Jonsson (model checking)
- Sven-Olof Nyström (programming language design)
- Justin Pearson (hemsida) (constraint programming and constraint-based local search)
- Kostis Sagonas (hemsida) (model checking)
- Tjark Weber (formal semantics and program verification)
- Tobias Wrigstad hemsida): (programming language design, runtime systems, and formal semantics)
Forskningspriser
- Jonas Norlinder was named a Distinguished Artefact Reviewer at ECOOP 2022
- Jonas Norlinder won 3rd place in the PLDI 2020 SRC with his poster based on his master thesis work
- Distinguished Artefact at Programming Language Design and Implementation (PLDI) 2020 (Albert Mingkun Yang, Erik Österlund, and Tobias Wrigstad)
- Distinguished Artifact at Software Language Engineering (SLE) 2019 (Elias Castegren and Kiko Fernandez)
- Dahl-Nygaard Junior Prize 2012 to Tobias Wrigstad
Kurser
- 1DL006: Programmering för ämneslärare (10 hp)
- 1DL028: Objektorienterad programmering med Java (10 hp)
- 1DT034: Programmeringsteori (10 hp)
- 1DL042: Programmering (10 hp)
- 1TD062: Högprestandaprogrammering (10 hp)
- 1DT096: Operativsystem och processorienterad programmering (15 hp)
- 1DL201: Programkonstruktion och datastrukturer (20 hp)
- 1DL221: Imperativ och objektorienterad programmeringsmetodik (20 hp)
- 1DL242: Avancerad mjukvarudesign (5 hp)
- 1DL311: Semantik för programmeringsspråk (5 hp)
- 1DL321: Kompilatorteknik I (5 hp)
- 1TD327: Programmering i Python (5 hp)
- 1DL330: Funktionell programmering I (5 hp)
- 1TD433: Programmeringsteknik I (5 hp)
- 1DL450: Avancerad funktionell programmering (5 hp)
- 1DL451: Modellering för kombinatorisk optimering (5 hp)
- 1DL530: Introduktion till parallellprogrammering (5 hp)
- 1DL541: Programspråksabstraktioner för parallellprogrammering (5 hp)
- 1DL550: Lågnivå-parallellprogrammering (5 hp)
- 1DL560: Programmering av effektiva parallella program (5 hp)
- 1DL580: Fördjupningskurs i concurrency och parallellprogrammering (15 hp)
- 1DL601: Underhållsprogrammering (5 hp)
- 1TD722: Programmeringsteknik II (5 hp)
- Introduktion till forskning i programmeringsspråk (doktorandkurs)