COMP 301
Principles of Programming Languages (POPL)
|
Subject: POPL |
Course Code: COMP 472 |
| Type: Core | FM: 100(60 int+40 final) |
Course Introduction:
A programming language is a programmer's principal interface with the computer. More than just knowing how to program in a single language, programmers need to understand the different styles of programming promoted by different languages. In their professional life, they will be working with many different languages and styles at once, and will encounter many different languages over the course of their careers. Understanding the variety of programming languages and the design tradeoffs between the different programming paradigms makes it much easier to master new languages quickly. Understanding the pragmatic aspects of programming languages also requires a basic knowledge of programming language translation and runtime features such as storage allocation.
Contents:
- Chapter 1. Overview of programming languages
- 1.1
History of programming languages
1.2 Brief survey of programming paradigms
1.3
The effects of scale on programming methodology
- Chapter 2. Virtual machines
- 2.1 The concept of a virtual machine
2.2 Hierarchy of virtual machines & Intermediate languages
2.3 Security issues arising from running code on an alien machine
- Chapter 3. Introduction to language translation
- 3.1 Comparison of interpreters and compilers
3.2 Language translation phases
3.3 Independent aspects of translation
- Chapter 4. Declarations and types
- 4.1 Concept of types as a set of values with together with a set of operations Declaration models
4.2 Overview of type-checking Garbage collection
- Chapter 5. Abstraction mechanisms
- 5.1 Procedures, functions, and iterators as abstraction mechanisms
5.2 Parameterization mechanisms
5.3 Activation records and storage management
5.4 Type parameters and parameterized types
5.5 Modules in programming languages
- Chapter 6. Object-oriented programming
- 6.1 Object-oriented design
6.2 Encapsulation and information-hiding
6.3 Separation of behavior and implementation Classes and subclasses
6.4 Inheritance (overriding, dynamic dispatch) Polymorphism (subtype polymorphism vs. inheritance) Class hierarchies
6.5 Collection classes and iteration protocols
6.6 Internal representations of objects and method tables
- Chapter 7. Functional programming
- 7.1 Overview and motivation of functional languages
7.2 Recursion over lists, natural numbers, trees
7.3 Pragmatics
7.4 Amortized efficiency for functional data structures
- Chapter 8. Language translation systems
- 8.1 Application of regular expressions in lexical scanners
8.2 Parsing (concrete and abstract syntax, abstract syntax trees)
8.3 Application of context-free grammars in table-driven and recursive-descent parsing
8.4 Symbol table management
8.5 The problem of overfitting Unsupervised learning
8.6 Code generation by tree walking Architecture-specific operations
8.7 Building syntax-directed tools
- Chapter 9. Type systems
- 9.1 Data type as set of values with set of operations Data types
9.2 Semantic models of user-defined types
9.3 Type abbreviations Abstract, data types Type equality
9.4 Parametric polymorphism Subtype polymorphism
9.5 Type-checking algorithms
- Chapter 10. Programming language semantics
- 10.1 Informal semantics
10.2 Overview of formal semantics Denotational semantics Axiomatic
10.3 semantics Operational semantics verview
|