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)
- Ramanathan Thinniyam Srinivasan (program verification)
- Tjark Weber (formal semantics and program verification)
- Tobias Wrigstad hemsida): (programming language design, runtime systems, and formal semantics)
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)
Forskningspriser
- Mats Carlsson wins the ACP Research Excellence Award 2023 of the Association for Constraint Programming (ACP) for his career.
- Ginevra Castellano: Outstanding Associate Editor Award by Frontiers Robotics and AI), 2021
- Distinguished Paper Award POPL 2021 (with coauthors) : Ramanathan Thinniyam Srinivasan.
- EAPLS Best Paper Award 2021 (with coauthors) : Ramanathan Thinniyam Srinivasan.
- Ginevra Castellano: 10-Year Technical Impact Award in 2019 at the ACM International Conference on Multimodal Interaction (ICMI) 2019, 2019
- Thomas Schön: Tage Erlanders prize for natural sciences and technology by The Royal Swedish Academy of Sciences (KVA), 2017
- Thomas Schön: Arnberg prize (Arnbergska priset) by The Royal Swedish Academy of Sciences (KVA), 2016.
- Thomas Schön is an elected member of The Royal Swedish Academy of Engineering Sciences (IVA), since 2018, and The Royal Society of Sciences at Uppsala, since 2018.
- Carolina Wählby is an elected member of The Royal Swedish Academy of Engineering Sciences (IVA), since 2017, and The Royal Society of Sciences at Uppsala, since 2017.