CSC417: Introduction to Semantics and Programming Language Design 6 credits (40-15-5)

Objectives

This course outlines a number of approaches in formally defining the semantics of programs and programming languages. Mention of semantics in formal specifications is also made. The programming language design aspect of this course considers a number of programming language paradigms and examines the issues involved in designing languages for them.

Contents

A) Introduction to semantics: Introduction; operational and structural operational semantics; Axiomatic semantics: (Floyd's pre-and post-conditions; Hoare's logic, partial/ total correctness); lattices and domains; semantic domains; fixed point theorems; denotational semantics. Lambda calculus. Use of semantic approaches in describing programming language constructs. Data types, types and type systems; type safety; subtyping, recursive types, polymorphism. Recursion and specification of semantics. Mention: algebraic specifications, introductory notions in category theory, coalgebraic systems and bisimulation.

B) Programming language design: The evolution of Programming languages. The challenge of programming language design; factors affecting programming language design. Defining syntax; defining semantics; pragmatics. Variables, expressions and statements; types; scope and extent; procedures. Data abstraction; exception handling. Input/output, streams. Concurrency, parallelism, modularity. Security and correctness; cost metrics. Functional programming; data-flow programming; Object-oriented programming languages. Language design issues in other paradigms.

Prerequisite:

CSC 209; CSC 301. Cannot be taken with CSC 419