CENG540 PROGRAMMING LANGUAGES
Course Code: | 5710540 |
METU Credit (Theoretical-Laboratory hours/week): | 3 (3.00 - 0.00) |
ECTS Credit: | 8.0 |
Department: | Computer Engineering |
Language of Instruction: | English |
Level of Study: | Graduate |
Course Coordinator: | Prof.Dr. MEHMET HALİT S. OĞUZTÜZÜN |
Offered Semester: | Fall or Spring Semesters. |
Course Objectives
- Understand the connection between typed lambda calculus and functional programming.
- Understand the connection between syntax, semantics and pragmatics of a programming language.
- Understand the operational, denotational and axiomatic approaches to the definition of (both functional and imperative) programming language semantics with emphasis on operational semantics.
- Understand the role of type theory in giving semantics to programming languages and reasoning about its essential properties.
- Analyze the given programs (in both functional and imperative styles), written in an hypothetical programming language, using the operational specification of the language.
- Apply formal semantics to verify the (partial) correctness of a program with respect to a given input-output specification.
- Evaluate the expressive power and limitations of a programming language.
- Devise recursive data types and use them in recursive programming.
- Devise new abstract data types and use available ones to facilitate a given programming task.
- Apply extensions to a programming language by syntactic and semantic means.
Course Content
Analysis of syntactic and semantic properties of programming languages. Operational, denotational and axiomatic approaches to semantics. Typed lambda calculus. Algebraic data types. Case studies include a typed functional language with higher-order functions and an imperative sequential language.
Course Learning Outcomes
- Understand the common issues in the definition of formal languages, particularly, delineate the issues of syntax, semantics and pragmatics.
- Understand the typed lambda calculus syntax (Church style) and intended semantics
- Learn the idealized functional programming language PCF, which is based on the typed lambda calculus. (At this stage PCF is introduced based on a formal specification of its syntax and an informal description of its semantics.)
- Apply typing rules to infer the type of a given PCF expression.
- Compose programs involving higher-order functions (i.e. functions with function arguments and/or function results) and recursion.
- Understand the axiomatic (equational) approach to semantics of functional languages using the axiomatic semantics of PCF as an example.
- Understand the operational (reductional) approach to semantics of functional languages using the structured operational semantics of PCF as an example.
- Understand the denotational approach to semantics of functional languages using the denotational semantics of PCF as an example.
- Explore the expressive power of PCF and related languages using Turing-computability as the criterion.
- Understand the limitations of PCF and related languages as a sequential programming language.
- Model data types as heterogeneous algebras.
- Specify common abstract data types, such as stacks, queues, lists and trees, by using parametric (generic) types.
- Apply existential types to the specification of abstract data types, introduced to ease many programming tasks.
- Apply extensions to a programming language by syntactic means (e.g. by preprocessing).
- Apply extensions to a programming language, using PCF as an example, by semantic means (e.g. by introducing a new operator not expressible in terms of the core language constructs, such as the fixpoint operator).
- Characterize and compare the functional and imperative programming paradigms.
- Understand the operational approach to semantics of imperative languages using the structured operational semantics of the while language as an example.
- Analyze rigorously the type safety properties of a programming language.
- Understand the role of process calculus in specifying reactive systems.
Program Outcomes Matrix
Contribution |
# | Program Outcomes | No | Yes |
1 | Competence in fundamental and advanced knowledge of hardware and software Proficiency in problem solving. | | ✔ |
2 | The ability to follow the contemporary technical development, and Initiative and aptitude for self-directed learning. | | ✔ |
3 | They are capable of designing, and conducting experiments at advanced level. | | ✔ |
4 | The ability to design and implement systems involving hardware, software, and the interaction between the two through challenging projects. | | ✔ |
5 | Analyze and compare relative merits of alternative software design, algorithmic approaches and computer system organization, with respect to a variety of criteria relevant to the task (e. g. efficiency, scalability, security). | | ✔ |
6 | Strong interpersonal skills needed for working effectively in small, diverse groups on medium to large scale technical projects. | ✔ | |
7 | Strong oral communication skills essential for effectively presenting technical material to an audience and strong written communication skills and the ability to write technical documents that include specification, design, and implementation of a major project. | | ✔ |