CSc 520 Principles of Programming Languages defines, analyzes and evaluates important concepts found in current programming languages. Its goals are to build an ability to evaluate and compare programming languages, both from the user's and implementor's view, and to develop precise mechanisms for specifying the semantics of programming languages.

The class page for 2011 is here. Lecture notes can be found here.