CH521 Programming Languages

Aim

This course examines the fundamental principles of contemporary programming languages. We will highlight the critical relationship between language design and language implementation, and we will devote special attention to issues of importance to expert programmers. Students should emerge better prepared to choose the best language for particular projects, to make more effective use of languages they already know, and to learn new languages quickly and completely. In particular, this course will teach

  • what’s “under the hood” of your favorite programming language,
  • learning about programming languages you do not already know,
  • features of different programming languages, and
  • programming language implementations.

Because of resource constraints of embedded systems (memory, energy, computational power), the efficiency of a programming language implementation can be a major concern. We will highlight programming language implementation techniques that facilitate embedded systems development. Because of the current shift to multi-core architectures, we will study the emerging best parallel programming practices.

Prerequisites

  • A modest working knowledge of the UNIX/Linux programming environment
  • Proficiency in an imperative programming language, e.g., Ada, C, C++ or Java.

Course materials

  • Textbook: Michael L. Scott, Programming Language Pragmatics, Morgan Kaufmann, 3rd Edition, 2008.
  • Class handouts.
  • Justin Zobel, Writing for Computer Science, 2nd Edition, Springer, 2004.

Class teaching

The material of the course will be covered by a series of lectures. In addition, we will have student classroom presentations. Classroom presentations will cover a research paper in the area of parallel programming languages. Each classroom presentation will be prepared and presented by a group of students. The research papers and the schedule for the presentations will be announced in the course.

Homeworks

Homework assignments consist of short-answer questions or reports. The purpose of these assignments is to apply the material from the lectures and to prepare you for the exams. Homework assignments will be posted in YSCEC. Students are supposed to work individually on homework assignments.

Schedule (tentative)

Week Lecture

(:row:)

1 Introduction, compilers and interpreters

(:row:)

2 Syntax and semantics of programming languages

(:row:)

3 Names, scopes and bindings

(:row:)

4 Control flow

(:row:)

5 Data types

(:row:)

6 Subroutines and parameter passing

(:row:)

7 Data abstraction and object orientation

(:row:)

8 Midterm exam

(:row:)

9 Exceptions

(:row:)

10 Scripting languages

(:row:)

11 Concurrency and the shift to multicore architectures

(:row:)

12 Concurrency support in modern programming languages

(:row:)

13 Classroom presentations

(:row:)

14 Virtual Machines I

(:row:)

15 Virtual Machines II

(:row:)

16 Final exam