Skip to topic | Skip to bottom


Home

Main
Main.POPLr1.5 - 06 Nov 2009 - 10:09 - SanderVermolen

Start of topic | Skip to actions

Principles of Programming Languages (POPL) 2008 - 2009

The 2009-2010 edition of this course

[ Literature | Software | Assignments ]

Course description

Programmers spend a lot of time understanding and improving their tools: editors, profilers, debuggers, and so forth. Technical magazines sometimes call to mind stores that sell outdoor gear: "It's a rough world out there, you need all the equipment and gadgetry you can get." You, too, may have stared in admiration and longing at a particularly powerful syntax highlighter at some point in time.

Often lost in this analysis is a proper understanding of what tools and technologies can have the greatest impact. Irrespective of how you choose to write code and where you might run it, perhaps the single most important technology is the programming language itself. Languages both enable solutions and inhibit them; they save time and waste it; and most importantly, they either expand or contract our imagination. Yet how much have you thought about this, and how well do you understand the trade-offs?

Whereas prior courses may have taught you how to program, this course teaches you how to analyze programming languages.

  • What are the questions one asks when confronting a new language?
  • What intellectual tools do we have for studying languages?
  • What does a language designer need to know?
  • How can we implement new languages?

You should have much better answers to these questions when we're done than I expect you have now.

A major difference between this course and ones with a similar title at other universities is that we will use a much better way of classifying languages. In particular, we will move past cliched and relatively useless divisions such as functional, object-oriented and imperative. We will instead decompose languages into building blocks, and understand these building blocks in depth. The goal is to give you a richer verbal and intellectual vocabulary so that, when you are confronted with a new language, you have a broad set of concepts, each of which you understand well, to use to dissect the language.

Course Goals

Whereas prior courses may have taught you how to program, this course teaches you how to analyze programming languages.

  • What are the questions one asks when confronting a new language?
  • What intellectual tools do we have for studying languages?
  • What does a language designer need to know?
  • How can we implement new languages?

You should have much better answers to these questions when we're done than I expect you have now.

Course Schedule

This schedule is based on 2 lectures of 2 hours per week. The entries have references to chapters of the PLAI book. Note that the schedule is slightly optimistic; in 2007 we needed 14 lectures to get to the end of continuations. This schedule will be updated as we proceed.

lecture 1

  • General introduction
  • Introduction to scheme
  • Modeling languages (PLAI 1-2)
  • Substitution (PLAI 3)

lecture 2

  • Functions (PLAI 4)
  • Deferring substitution (PLAI 5)

lecture 3

  • First-class functions (PLAI 6)

lecture 4

  • Laziness (PLAI 7)

lecture 5

  • Implementing laziness (PLAI 8)

lecture 6

  • Recursion (PLAI 9-10)

lecture 7

  • Recursion (PLAI 9-10)
  • State (PLAI 11-14)

lecture 8

  • State (PLAI 11-14)

lecture 9

  • Web programs need continuation passing style

lecture 10

  • Transformation to CPS

lecture 11

  • CPS transformation automatically

lecture 12

  • Implementing continuations

lecture 13

  • PLT Scheme webserver

Lecture 14

  • exam preparation



Edit | Attach | Printable | Raw | More topic actions
Revisions: | r1.5 | > | r1.4 | > | r1.3 | Page history | Backlinks
You are here: Main > WebLeftBar > Courses > POPL

to top

Copyright © 2003-2017, Software Engineering Research Group, Delft University of Technology, The Netherlands