SluitenHelpPrint
Switch to English
Cursus: 202001039
202001039
Programming Paradigms
Cursus informatieRooster
Cursus202001039
Studiepunten (ECTS)15
CursustypeOnderwijseenheid
VoertaalEngels
Contactpersoondr. A. Hartmanns
E-maila.hartmanns@utwente.nl
Docenten
VorigeVolgende 1
Examinator
dr. F. Ahmed
Examinator
dr. G. Caltais
Examinator
dr.ir. M.E.T. Gerards
Examinator
dr. A. Hartmanns
Contactpersoon van de cursus
dr. A. Hartmanns
Collegejaar2021
Aanvangsblok
2B
OpmerkingB-TCS students register via Osiris; others contact modulesupport-tcs@utwente.nl. Minor students: register for the minor!
AanmeldingsprocedureZelf aanmelden via OSIRIS Student
Inschrijven via OSIRISJa
Cursusdoelen
After successful completion of this module, the student is able to:
  • Describe the major programming paradigms (FP, LP and CP) and their essential characteristics and differences
  • Write basic programs in all major programming paradigms
  • Solve non-trivial programming problems in FP and CP
  • Explain the concepts and importance of typing, in terms of FP and CC
  • Explain and use the typical types and data structures in FP and CP
  • Explain and take advantage of the evaluation and execution mechanisms of FP (lazy evaluation) and CP (hardware-related aspects, concurrency models)
  • Explain and use the following concepts of FP: recursion, list comprehension, higher order functions, function composition, lazy evaluation.
  • Explain and use the following concepts of CP: interleaving, fairness, deadlock, memory models, synchronisation, locking.
  • Explain and use the following concepts of CC: syntactic and semantic analysis, scanning, parsing, run-time organisation, code generation, optimisation.
  • Write a compiler for a non-trivial imperative language with concurrency features generating a given (dedicated) instruction set.
Inhoud
Starting in 2022-2023, this module will consist of two separate study units:
  • 202200191 Functional and Logic Programming 5 EC, and
  • 202200192 Concurrency and Compiler Construction 10 EC
Up until this point, the students have mainly learned imperative, object-oriented programming. This module will extend their awareness and ability in the following directions:
  • Non-imperative programming: in particular, the functional paradigm (extensively) and the logic paradigm (briefly)
  • Programming for concurrent systems: concepts, data structures and algorithms for multi-core and GPU-based parallelism
  • Programming language technology: parsing, compilation and code generation
These three strands are initially taught separately and come together in the module project, where the students develop a compiler for their own language with support for parallelism, generating code that runs on an extensible hardware emulator written in a functional language.
 
The module presents a mixture of
  • Lectures to provide an overview and motivation of the material
  • Exercise sessions to get familiar with the concepts
  • Laboratory exercises to practice the acquired skills
  • Small projects and a larger final project.
Voorkennis
Knowledge of programming (in Java) as taught for example in the module Software Systems.
Participating study
Module
Module 8A
Verplicht materiaal
Studiemateriaal
Compiler Construction and Programming language technology: Engineering a Compiler (Torczon & Cooper)
Studiemateriaal
Concurrent Programming and Concurrent and Distributed Programming: Java Concurrency in Practice, 1/E (Goetz, Peierls, Bloch, Bowbeer, Holmes & Lea)
Syllabus
Modulehandleiding met aanvullend materiaal on Canvas
Aanbevolen materiaal
Studiemateriaal
Learn You a Haskell for Great Good (Miran Lipovača), digital book: http://learnyouahaskell.com/
Werkvormen
Hoorcollege

Practicum

Project begeleid

Project onbegeleid

Werkcollege

Toetsen
Functional and Logic Programming Project

Functional Programming Test

Concurrent Programming Test

Compiler Construction Test

Integrating Project

SluitenHelpPrint
Switch to English