- To show a deep understanding of the major programming concepts
- To understand and apply the basics of the most popular formalism for defining languages (syntax and semantics), specifically algorithmic programming languages.
- To understand how languages work in the principal programming paradigms, understand the relations between paradigms.
- To be able to quickly learn new languages, design languages targeted toward an arbitrary application, and be able to interface different languages.
Main themes
- Syntax: basics of abstract and concrete syntax, formalisms to define these syntaxes, representation of formal texts (syntax trees, graphs).
- Semantics: introduction to methods for defining semantics (operational semantics, axiomatic semantics, denotational semantics).
- Major programming concepts: function, object, class, abstraction, instantiation, inheritance, state, encapsulation, nondeterminism, concurrency, higher-order programming, compositionality, etc.
- Techniques for using these concepts.
- Programming paradigms and an introduction to the major programming languages.
- Principles and techniques of designing and interfacing languages.
- Practical applications in several domains (for example, distributed systems, constraint programming, human-computer interfacing).
Content and teaching methods
see "Main themes"
Other information (prerequisite, evaluation (assessment methods), course materials recommended readings, ...)
- Prerequisite:
Maîtrise de la programmation dans un langage de haut niveau tel que
LINF2121 Algorithmique et structures de données P. Dupont
- References
Recommended readingss:
(1) Sethi R, "Programming Languages : Concepts and Constructs" , Addison-Wesley, 1996.
(2) Van Roy P. and Haridi S, "Concepts, Techniques, and Models of Computer Programming" MIT Press, March 2004.
(3) Glynn Winskel, "The Formal Semantics of Programming Language" , MIT Press, 1993.