Courses in Programming Languages

Principles of Programming Languages

The course considers basic principles of modern programming languages both from a theoretical and a practical perspective. Abstraction plays a central role in these languages. It enables programmers to decompose programming problems into parts that are small enough to be constructed, understood, used, and modified by an individual. Hence, abstractions are crucial in the development, maintainance, testing, and verification of programs.

Examples will be drawn from the languages Haskell, ML, Smalltalk, Java, and Prolog.

Compiler Construction

The central subject of compiler construction is the design and implementation of translations of high-level programming languages into low-level (machine) code. This involves solving certain problems which are of general interest.

Initially, the compiler parses the input program to reconstruct its structure. This kind of problem arises in many places (reading of configuration files, defining a mini language, reading of user input, etc) and the course explains techniques to solve these problems simply and efficently.

Next, the compiler transforms and analyses the structure. This phase is modeled using the concept of attribute grammars.

Finally, the compiler generates machine code and optimizes it. It employs dynamic programming and efficient graph coloring algorithms to accomplish this task.

Since compiler construction has a long tradition, the structure of compilers is very well understood. Hence, a compiler can serve as an example for a well-structured software system. "If you can write a compiler, you can write any program."

Functional Programming

This course requires a basic understanding of a functional programming language, as obtained from an introductory course.

The course introduces advanced concepts of functional programming languages with the language Haskell. Among the themes are programming with laziness, purely functional data structures, advanced type classes, and monads. Armed with this knowledge, the course tackles realistic problems involving I/O, networking, databases, using Web-programming as a connecting theme. It culminates in the development of a Web-server. On the client side, the course considers programming of animations and GUI programming.

Internet Programming

The course aims at improving knowledge about and capabilities for programming applications for the internet. Besides discussing some protocols, the main thrust is on Web-based services, which are important for the implementation of E-commerce applications. The underlying network technology is taken for granted and is only discussed as far a necessary. Here are some keywords from the contents: client-server, RFCs, TCP/IP, DNS, Email, FTP, HTTP, CGI, Applets, network programming, XML, XSL, DHTML/Javascript, WWW-servers, Servlets, JSP, Security, Agents.


Peter Thiemann
Last modified: Thu Sep 28 22:47:11 CEST 2000