Unlike courses that teach a specific programming language, Computer Science 342, ``Principles of Programming Languages,'' is a course about programming languages.
The study of programming languages is primarily concerned with the following questions:
The catalog description of Com S 342 at Iowa State University is as follows:
Organization of programming languages emphasizing language design concepts and semantics. Study of language features and major programming paradigms, including functional programming. Programming projects. Nonmajor graduate credit.
``Organization'' means how the features of programming languages may be combined to form a unified whole. ``Language design concepts'' includes principles of good design (both technical and aesthetic), styles of programming (such as the functional, object-oriented, and declarative paradigms), the interactions among various features, and the costs of implementing various features. ``Run time implementation'' means the data structures and algorithms used to implement interpreters and compilers. A ``feature'' of a programming language is some piece of its syntax, together with the semantics (meaning) of that syntax. For example, an if-statement is a feature of Pascal, C, and BASIC.
Functional programming is a style of programming that uses immutable data to allow safe sharing of references and promote ease of reasoning. Functional programming is often concerned with expressions, which have values, as opposed to statements. Functional programming also makes use of functions as a program structuring and abstraction mechanism, which allows programs to be structured in ways that are difficult in other styles.
The plan is to contrast functional programming with object-oriented programming, as a means to help explain both languages. To this end, we will use programs written in Scheme and Java, sometimes both, to explain and explore various concepts. Some concepts we will cover are: recursion, design patterns, declarations, scope, modularity, state, metalinguistic abstraction, and types. A main set of examples will be interpreters for toy programming languages.