Computer programming is the activity of specifying what computers do, and programming languages are the main tool to achieve that. This course offers a kaleidoscopic view on the many concepts of programming languages, focusing on object-oriented programming and functional programming. Some concepts will be merely introduced, thereby providing an overview of directions for further study.
This course comprises both theoretical and practical aspects of programming languages. Theoretical topics include: methods to describe language syntax (BNF), semantics of programming languages (denotational and operational semantics), variables and expressions, imperative languages, parameter passing mechanisms (call-by-value, call-by-name, and others), the lambda calculus, types and type systems, polymorphism, higher-order functions, object-orientation and generics, concurrency, and theorem proving. Practical topics include: language generators and string rewriting, advanced imperative and object-oriented programming, and basic functional programming.
The main goal of the course is to provide insights into why there is a need for high-level programming languages, the (relationship between) concepts of programming languages, and practice with how some concepts are implemented. This enables the student to learn new programming languages (or related techniques employed in the programming context) faster, and make more informed decisions about what to use and when.
At the end of the course the student has acquired:
- basic knowledge of programming language theory
- basic knowledge of imperative programming concepts (such as structured programming)
- basic knowledge of functional programming concepts (such as algebraic data types and recursion)
- basic knowledge of concurrent programming (needed for an advanced course in concurrency)
- basic knowledge of automated and interactive theorem proving (needed for an advanced course in logical verification)
- basic knowledge of operational and denotational semantics (needed for an advanced course in program correctness and computational models)
- practical experience with advanced imperative and object-oriented programming features (such as designing class hierarchies and defining and using abstract data types)
- hands-on experience with implementing the (simply typed) lambda calculus, type checking and type inference (needed for an advanced course in type theory)
Other universities using this material
- Programming Languages (COSC3127), Algoma University, Canada
Lecturer: Hamidreza Kermajani