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
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/)