COSE212: Programming Languages, 2025 Fall

COSE212: Programming Languages, 2025 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

Attendances and Homework

Please use the LMS for the attendance check and the submission of homework.

Policy on Academic Integrity

The use of Large Language Models (LLMs), such as ChatGPT, is permitted and encouraged. However, students remain fully responsible for the originality and comprehension of all submitted work. The following rules apply when evaluating coding assignments. Violations will be treated as academic dishonesty and will result in one of the following consequences: a grade of zero (0) on the assignment, or, in the most serious cases, an automatic grade of F for the entire course.

  • Submissions that exhibit direct copy-and-paste similarity with other students’ work, or copying with superficial or uninformed modifications, constitute academic dishonesty.

  • The instructor reserves the right to require an oral explanation of any submitted code. Inability to provide a clear, reasonable, and coherent explanation will be deemed proof that the work is not the student’s own.

Exams

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

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 download and install them using the following links:

Online Interpreters

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


Schedule

# Date Title PDFUpdateHomework
Part 0: Basic Concepts
0 09/01 Course Overview

09/01
(11:57)

1 09/03 Basic Introduction of Scala

08/31
(20:31)

hw01
(by 09/24)
Part 1: Untyped Languages
2 09/08 Syntax and Semantics (1)

09/03
(19:06)

3 09/10 Syntax and Semantics (2)

09/03
(19:30)

ex01
4 09/15 Identifiers (1)
5 09/17 Identifiers (2) ex02
6 09/22 First-Order Functions ex03
7 09/24 First-Class Functions ex04
8 09/29 Lambda Calculus hw02
(by 10/13)
9 10/01 Recursive Functions ex05
10 10/06 Mutable Data Structures - Boxes ex06
11 10/08 Mutable Variables ex07
12 10/13 Garbage Collection
13 10/15 Lazy Evaluation ex08
10/22 Midterm Exam Lectures 1 - 13
14 10/27 Continuations (1)
15 10/29 Continuations (2) ex09
16 11/03 First-Class Continuations ex10
17 11/05 Compiling with Continuations hw03
(by 11/19)
Part 2: Typed Languages
18 11/10 Type Systems
19 11/12 Typed Languages ex11
20 11/17 Typing Recursive Functions ex12
21 11/19 Algebraic Data Types (1)
22 11/24 Algebraic Data Types (2) ex13
23 11/26 Parametric Polymorphism hw04
(by 12/10)
ex14
24 12/01 Subtype Polymorphism ex15
25 12/03 Type Inference (1)
26 12/08 Type Inference (2) ex16
27 12/10 Course Review
12/17 Final Exam Lectures 14 - 26