Seminar Modern Programming Languages (Winter 2022/23)

Programs: BSc {CS, ITS, AI}
Lecturer: Michael Walter
TA: Anurudh Peduri
Time and Place: Wed 16-18 (MC 1.54)
First meeting: Wed Oct 12
Credits: 3 CP
Contact time: 2 SWS
Language: English
Further Information: VVZ, Moodle

Course Description

Computing is ubiquitous in our daily life; it pervades everything from mobile phones and embedded devices to supercomputers and cloud computing infrastructure. Given these vastly different platforms and use cases, there is a wide variety of programming languages - they differ in the target domains they are designed for, the paradigms they follow and the concepts they are built on, and the features and abstractions that they offer programmers to express computations clearly and robustly. In this seminar you will have the opportunity to explore a variety of modern programming languages and their key features.

How does it work?

You will each study one programming language, with an emphasis on certain key features (see the list below for possible choices). You will present the results of your investigations to your peers and also provide a written report. Please think carefully about the underlying motivations, fundamental concepts, instructive examples, and possible application scenarios. Work out similarities between the language that you are presenting with languages other students have presented before you. In addition, you will be asked to peer-review two of your fellow students’ contributions. This will allow you to learn from other and get acquainted with good scientific practice.

Possible topics

  • C++ (templates, RAII, exceptions, constexpr, copy vs move)
  • Coq (concepts covered in the first three chapters in this book)
  • Go (error handling, defer, channels and goroutines, garbage collection, go generate)
  • Haskell (type classes, lazy evaluation, purity, IO and other monads, do notation)
  • Idris 2 (dependent types, multiplicities, theorem proving)
  • Julia (multiple dispatch, metaprogramming and macros, arrays, vectorization and broadcasting)
  • OCaml (type inference, algebraic data types and pattern matching, modules and functors)
  • Python (keyword arguments, decorators, generators, metaclasses, operator overleading)
  • Racket (tail recursion, pattern-based macros, continuations, contracts)
  • Rust (ownership and borrowing, error handling and ? operator, traits, smart pointers)
  • TypeScript (type inference and narrowing, generics, keyof, conditional types, mapped types, template literal types)
  • WebAssembly (virtual machine, instruction set, execution environment)
  • Zig (memory management, error handling, generics, comptime, reflection)
  • (Modern) Java (generics, lambda expressions, type inference, records, structured concurrency, pattern matching)

Please contact us in case you would like to make your own suggestion.

Good familiarity with at least one programming language (such as Python or Java) and programming paradigm (such as object-oriented or functional programming).

Learning outcomes

In this seminar, you will obtain insight into a variety of modern programming languages and some of their key features and concepts. This will help you prepare for a BSc project in the theory of programming languages, but also teach you practical skills that are useful in adjacent fields such as software engineering. In addition, you get to practice some fundamental skills: independent literature search and comprehension; distilling the essence of a research topic into a report; time management; giving feedback; the scientific peer-review process.

Assessment (updated)

To get credit for this course, you need to:

  1. give a 30-45 minute presentation (followed by around 15 minutes of discussion and feedback)
  2. submit a written report (4-6 pages excl. references; you must use LaTeX with the acmart template, open sample-authordraft.tex and modify it) within one week after your presentation
  3. give oral feedback on the presentations of two other participants right after those presentations
  4. give written feedback on the reports of the same two participants by submitting short peer reviews (2 x 0.5 page) within one week after receiving the respective report
  5. participate in all meetings (unless you have extenuating circumstances, such as sickness or a family emergency)

One week before your presentation, you will show your draft slides to us in order to get feedback that will help you polish your presentation. This is mandatory and will happen during the same time slot as the presentations, but in room MC 1.89 (see “Pre-meeting” in the schedule below).

Your grade will be computed as follows: 50% * presentation + 40% * report + 10% peer review.

Schedule

The course will follow the following schedule:

Date Agenda
Oct 19 Kick-off
Oct 26 Q&A
Nov 2 Pre-meeting & Q&A
Nov 9 Timur (C++) and George (JS/Typescript)
Nov 16 Pre-meeting & Q&A
Nov 23 Ahmad (Go) and Luca (OCaml)
Nov 30 Pre-meeting & Q&A
Dec 7 Alex (WebAssembly) and Phuong (Julia)
Dec 14 Pre-meeting & Q&A
Dec 21 Fatema (Rust)
Jan 11 Pre-meeting & Q&A
Jan 18 Riman (Python) and Mohamed (Java)
Jan 25 Bahaaeddin (Haskell) and Viet (Swift)