COSE212: Programming Languages, 2026 Fall

COSE212: Programming Languages, 2026 Fall

The primary goal of this course is to learn essential concepts of programming languages by designing and implementing their interpreters.

Course Information

Course Materials

Grading

  • 3 Projects: 0%
    • You will implement three different mini languages: MiniFSharp, MiniPython, and MiniScala.
    • They are not graded and need no submission. However, some exam questions might be related to them, so we strongly recommend solving them by yourself.
  • Midterm exam: 40%
  • Final exam: 50%
  • Attendance: 10%
    • All or nothing: you get the full 10% if you attend at least 2/3 of the checks, and 0% otherwise.
    • There is no attendance check in the first week; it starts on September 7.

Attendance

Please use the LMS for the attendance check.

Exams

  • Midterm: October 21 (Wed.) 18:30 – 21:00 (150 min.)
  • Final: December 16 (Wed.) 18:30 – 21:00 (150 min.)
  • Previous Exams

Lectures without Offline Classes

On the four days listed below, there will be no offline lectures. Instead, lecture videos will be uploaded to the LMS.

  • October 5 (Mon.) / 7 (Wed.) – International Conference
  • October 12 (Mon.) / 14 (Wed.) – International Conference

Installation of Scala and sbt

Scala is a general-purpose programming language combining object-oriented and functional programming in one concise, high-level language. Scala’s static types help avoid bugs in complex applications, and its JVM and JavaScript runtimes let you build high-performance systems with easy access to huge ecosystems of libraries.

The interactive build tool sbt is built for Scala and Java projects.

Please follow the step-by-step installation guide:

If you prefer to install them yourself:

Online Interpreters

In this course, you will implement interpreters for the following languages:


Schedule

# Date TitlePDFUpdateHomework
Part 0: Basic Concepts
0 09/02 Course Overview

08/31
(16:51)

1 09/07 Basic Introduction of Scala

09/06
(10:40)

ex00
Part 1: Untyped Languages
2 09/09 Syntax and Semantics (1)

09/09
(13:20)

3 09/14 Syntax and Semantics (2)

09/11
(01:54)

ex01
4 09/16 Identifiers (1)

09/11
(09:24)

5 09/21 Identifiers (2)

08/31
(03:15)

ex02
6 09/23 First-Order Functions

08/31
(03:15)

ex03
7 09/28 First-Class Functions

08/31
(03:15)

ex04
8 09/30 Lambda Calculus

08/31
(03:15)

proj01
9 10/05 Recursive Functions

08/31
(03:15)

ex05
10 10/07 Mutable Data Structures

08/31
(03:15)

ex06
11 10/12 Mutable Variables

08/31
(03:15)

ex07
12 10/14 Garbage Collection

08/31
(03:15)

13 10/19 Lazy Evaluation

08/31
(03:15)

ex08
10/21 Midterm Exam Lectures 1 - 13
14 10/28 Continuations (1)

08/31
(03:15)

15 11/02 Continuations (2)

08/31
(03:15)

ex09
16 11/04 First-Class Continuations

08/31
(03:15)

ex10
17 11/09 Compiling with Continuations

08/31
(03:15)

proj02
Part 2: Typed Languages
18 11/11 Type Systems

08/31
(03:15)

19 11/16 Typed Languages

08/31
(03:15)

ex11
20 11/18 Typing Recursive Functions

08/31
(03:15)

ex12
21 11/23 Algebraic Data Types (1)

08/31
(03:15)

22 11/25 Algebraic Data Types (2)

08/31
(03:15)

ex13
23 11/30 Parametric Polymorphism

08/31
(03:15)

proj03
ex14
24 12/02 Subtype Polymorphism

08/31
(03:15)

ex15
25 12/07 Type Inference (1)

08/31
(03:15)

26 12/09 Type Inference (2)

08/31
(03:15)

ex16
27 12/14 Course Review

08/31
(03:15)

12/16 Final Exam Lectures 14 - 26