Concepts of Programming Languages - Summer Semester 2022

Integrated Lecture at Technical University of Darmstadt

In this course, students will learn basic-intermediate concepts of programming languages in a language agnostic fashion. We will use example snippets from different languages (mainly C, Java, Python) to drive home some concepts. Students will also learn to implement a small DSL using a state of the art language workbench - MPS

Reasons to Study Concepts of Programming Languages

  1. Increased ability to express ideas
  2. Improved background for choosing appropriate languages
  3. Increased ability to learn new languages
  4. Better understanding of significance of implementation
  5. Better use of languages that are already known

Format

  1. All lectures will be pre-recorded and uploaded both on the STG youtube channel and Medien portal of HRZ.
  2. Questions posted on Moodle will be answered before the next lecture.
  3. Once in a week there will be in-person/zoom session to discuss Q&A about exercises or project.
  4. Grading Scheme:
    • Final Exam,
    • Mini Project DSL + Exercises - Contribute to Bonus of upto 1,0 towards the final grade

Contact

  1. Dr. Krishna Narasimhan: kri.nara@st.informatik.tu-darmstadt.de Primary contact
  2. Prof Dr. Mira Mezini : mezini@informatik.tu-darmstadt.de

Sessions

  1. April 27 - Orientation
  2. May 4 - Discuss of Ex. 1 (Language Critique/ Syntax/ Semantics)
  3. May 11 - MPS tutorial *
  4. May 18 - Break
  5. May 25 - Discussion of Ex. 2 + MPS struggles (Variables)
  6. June 1 - Discussion of Ex. 3 (Expressions and Statements)
  7. June 8 - Discussion of Ex. 4 (Functional Abstractions)
  8. June 15 - Break
  9. June 22 - Discussion of Ex. 6 (Types 1+2)
  10. June 29 - Lazy evaluation*
  11. July 6 - Introduction to program analysis *
  12. July 13 - AI and Programming tools *

Lectures

Introduction - In this session, we will learn what programming languages, what are the different ways programs are executed, learn to critique a language’s readability, writability and reliability using various factors.


Syntax and Semantics - In this session, we will learn how languages express intent(pragmatics), specify meaning(semantics) and organize/ arrange words(syntax). We will get a glimpse of popular forms of specifying syntax - the BNF/EBNF form, static semantics - Attribute grammars and dynamic semantics - Natural operational semantics


Basics of language workbenches and MPS - In this session, we will learn about language workbenches that equip developers with tools to create their own languages using a tutorial of a popular language workbench, MPS from Jetbrains


Variables and Names - In this session, we will learn two of the basic building blocks of programs - variables and names. We will learn what are the various “meanings” that can be associated to variables like names, types, value, visibility, lifetime and address


Expressions and Statements - In this session, we will learn the basics of expressions. We will learn what are operators and precedences and different types of expressions like relational, boolean and arithmetic expressions. We will also have a brief look into statements that can compose and evaluate expressions, and serve as commands. We will look at a special kind of statement: Control statements (loops/ conditionals)


Functional Abstractions - In this session, we will learn how parts of program can be re-used using subprograms, how they are declared and invoked. We will look at how sub-programs can be parametrized and look into two other kinds of sub-programs (nested and indirect).


Types(Part 1) - In this session, we will learn the different types are like primitive types, product types, enumeration types, reference types and container types. We will also briefly explore the difference between strong and weak typing, and difference between dynamic and static typing.


Types (Part 2)- In this session, we will learn about type checking and inference. We will also explore polymorphism and inheritance of types.


Lazy evaluation - In these sessions, we will look at a twist in the world of semantics and evaluation; Lazy evaluation.


Introduction to Program Analysis - In these sessions, we will glimpse into the world of static analysis, why and how we should reason about certain properties of programs in a language.


AI and Programming languages- In this session, we will get an overview of the new advancements in AI that are making using programming languages easier.


Students are encouraged to use any resources as supplmentary for this course. One resource we recommend is Robert Sebesta’s Concepts of Programming Languages. For MPS, they can refer to Jetbrains TV channel on youtube and their tutorials or if you prefer to read then the following URL has many interesting resources for learning MPS (https://mps.rocks/)