TU Delft
Education Type
Education print this page print this page     
2017/2018 Electrical Engineering, Mathematics and Computer Science Bachelor Computer Science and Engineering
Concept of Programming Languages
Responsible Instructor
Name E-mail
Prof.dr. E. Visser    E.Visser@tudelft.nl
Name E-mail
Dr. C.B. Poulsen    C.B.Poulsen@tudelft.nl
Contact Hours / Week x/x/x/x
0/0/4/0 hc; 0/0/4/0 lab
Education Period
Start Education
Exam Period
Course Language
Expected prior knowledge
object-oriented programming, software testing
Course Contents
The design of a programming language is the result of a selection from a general collection of programming language concepts. With some frequency, new languages are introduced that combine concepts in an novel manner and sometimes introduce new concepts. During his/her career, a computer scientist will have to work with more than one generation of programming languages. In order to learn new programming languages, a computer scientist should understand the basic principles in the design of programming languages.


Scope and binding: Declaration and binding of names, free and bound instances of names, renaming, substitution, dynamic vs static scope, closures. Describe scope and binding features of a programming languages. Recognize and use scope concepts in programs.

Data structures: Product and sum types, records/structs and variants/unions, recursive types. Understand generic concepts of data modelling. Understand and recognise language constructs for modelling of data in different languages. Modelling recursive data types such as expressions and web pages (XML). Write programs to process and transform recursively structured data.

Control mechanisms: Recursion, dynamic binding, higher-order functions as control-flow abstraction, pattern matching. Use these control mechanisms in programs for processing of recursive data structures. Understand how advanced control-flow mechanisms such as dynamic binding and higher-order functions can be encoded in terms of simpler control-flow mechanisms and data.

Modularization and data abstraction: Abstraction mechanisms such as modules, classes, interfaces, higher-order functions. Inheritance, prototype-based vs class-based inheritance. Decomposition of a non-trivial programming problem components. Use of programming language mechanisms for implementing such components.

Mutation and state: Mutable vs immutable cells, references, equality. Persistent vs transient data structures. Design and implementation of persistent and transient data structures. Understand the costs and advantages of the use of mutable state.

Memory management: Stack-based memory allocation for procedure and function calls. Heap-based memory management, explicit allocation and de-allocation, garbage collection. Tail recursion elimination. Describe how data is allocated and how function calls are processed. Understand and evaluate the relative costs of explicit memory management vs automatic garbage collection.

Syntax and interpretation: Programs as data, concrete vs abstract syntax, interpretation.

We study the topics above by studying the implementation of interpreters for little languages with the typical features for each topic.
Study Goals
Understanding of programming languages in terms of concepts that transcend individual languages. Considering the advantages and disadvantages of the use of particular concepts. Analyis of programs in terms of concepts. Application of concepts in the design of programs. Encoding concepts in interpreters.
Education Method
The course consists of:

* lectures with assignments for students
* self study of the course books
* making of lab assignments in WebLab

During lab hours (on Wednesday morning) teaching assistants will be available for helping students.

Students are expected to bring to the lecture pen and paper for making notes. The use of electronic devices such as laptops, tables, and phones is not permitted during lectures. However, during selected sections of the lectures, students will be invited to make assignments in WebLab. For this purpose, please bring your laptop to the lectures.
Literature and Study Materials
"Programming and Programming Languages" by Shriram Krishnamurthi, 2017. The book is available online for free at http://papl.cs.brown.edu/2017/ We may use a later version of the book.

As programming language, we use Scala. Recommended book for learning Scala:

"Programming in Scala, Third Edition" by Odersky, Spoon, Venners. Publisher: Artima. http://www.artima.com/shop/programming_in_scala_3ed
The assessment is done via lab assignments and a digital exam.
Permitted Materials during Tests
No books or notes may be used during the exam.
Enrolment / Application
All assignments and exams will be provided through WebLab http://weblab.tudelft.nl

Students should sign in to WebLab using the ‘Single Sign on for TU Delft’ option in order to get credit at TU Delft. This option automatically registers the student with TU Delft netid and student number to the course.

Students should enroll for the course in WebLab no later than the second week of the course, but preferably before the start of the course.

The exam will be performed in a computer room. Students should register for the exam in Osiris and in WebLab. An exam key will be handed out in the exam room, which will be needed to sign in to the exam section. No books or notes may be used during the exam.
The grade for the course is determined by the average of

- Exam: The grade for the final exam (65%)
- Lab: The grade for the lab assignments (35%)

To pass the course, each of these grades (Exam and Lab) should be 5.75 or higher, and the final grade should be 5.75 or higher (and will be rounded to the nearest half grade point).

The Lab grade is the weighted average of the grades for the weekly lab assignments. In order for a submission to a lab assignment to be considered for grading (and thus receive a grade larger than 0), it should be submitted before the deadline. A deadline consists of two dates. A submission submitted by the first deadline receives full grades. A submission submitted before the second deadline (two days after the first), gets a penalty of at most 2 grade points, computed in proportion to the late time. Seven of the eight lab assignments should have at least a 3.5 grade. There is no resit for the lab.

The regular exam is held in April in the exam period. There is a resit for the exam in the exam period of Q4.

Note that only the final grade should be registered in Osiris.
Name E-mail
Dr. C.B. Poulsen    C.B.Poulsen@tudelft.nl