# CS 4536: Programming Languages (C08)

### FL 320, MTRF 9-9:50

Programming languages are arguably a software developer's most
important tools. Different languages embody different ways of viewing
problems and computation in general. Understanding what languages can
do helps programmers choose and use languages effectively.
Understanding how languages work helps programmers devise their own
linguistic tools for specialized applications.

This course exposes students to some different styles of
programming and goes "under the hood" to see how various styles and
language features are implemented. We will program in a couple of
languages with different perspectives on computation, then implement
their salient features. We will implement garbage collectors and a
type system to explore how these features really work. By the end of
the course, students will have a greater appreciation for the range of
programming models available and their tradeoffs.

The course assumes that students have non-trivial programming
experience (equivalent to that from a programming-based 3000-level
course, such as software engineering or operating systems). The
assignments will be programming intensive. Experience in a particular
language is not required, though prior experience in a functional
language (such as Scheme) will be useful.

Contact Professor Fisler with any questions.

### Course Outcomes

The course is designed towards the following outcomes:

- Students should be able to write programs under multiple
computational models.
- Students should be able to implement interpreters for a range of
common language features.
- Students should understand and be able to implement multiple
garbage collection schemes.
- Students should understand and be able to implement at least one
approach to type checking.
- Students should be able to develop non-trivial test suites.
- Students should be able to relate language constructs to
computational models underlying modern computing technologies.

These support CS Department Outcomes 1 and 6.