Undergraduate Course: Elements of Programming Languages (INFR10061)
|School||School of Informatics
||College||College of Science and Engineering
|Credit level (Normal year taken)||SCQF Level 10 (Year 3 Undergraduate)
||Availability||Available to all students
|Summary||Programming languages are unique forms of communication that play a dual role: not only as ways for programmers to instruct machines, but as ways for programmers to talk to each other about computation. Paradoxically, they are among the most permanent features of the computing landscape (Fortran, for example, is still widely used 60 years since its invention), and among the most energetic and innovative, with new programming languages introduced every few months, often aiming to simplify Web programming, parallel, or distributed computing.
Although few computer scientists will ever design a new, general-purpose language like Java or C++, all computer scientists need the ability to learn new languages quickly, recognise and use (or avoid misusing) common language features, and even design new domain-specific languages for restricted problem domains. The design of programming languages involves many subtle choices and tradeoffs among performance, convenience, and elegance.
This course covers the essential programming structures for managing data and controlling computation, as well as abstractions that facilitate decomposing large systems into modules. The course also covers pragmatics of programming languages, including abstract syntax, interpretation and domain-specific language implementation. You will not learn how to use any one language, but instead you will learn the basic elements you need to understand the next 700 programming languages, or even design your own.
* Abstract syntax and name-binding; Lexical vs. dynamic scope
* Modelling programming language features using inference rules
* Interpreters as a way of defining and exploring language features
* Domain specific languages, translators, and pragmatics of language processing
* A selection of topics illustrated by case studies from current or historically important language designs:
- data structures: pairs/record types; variant/union types; recursion
- abstracting data: overloading; generics; ad hoc vs. parametric polymorphism
- control structures: goto, loops, case/switch, exceptions
- abstracting control: procedure call/return; function types; continuations
- design dimensions: eager vs. lazy evaluation; purity vs. side-effects; state
- object-oriented features: objects, classes, interfaces, subtyping, (multiple) inheritance
* Advanced topics/guest lectures on concurrent, parallel, distributed programming, security, or verification (linking to UG4 year courses)
Entry Requirements (not applicable to Visiting Students)
||Other requirements|| MSc and visiting undergraduate students must have previous programming experience comparable in level to that obtained in years 1 and 2 of any of the School of Informatics' undergraduate degrees.
Information for Visiting Students
|High Demand Course?
Course Delivery Information
|Academic year 2022/23, Available to all students (SV1)
|Learning and Teaching activities (Further Info)
Lecture Hours 20,
Seminar/Tutorial Hours 8,
Supervised Practical/Workshop/Studio Hours 2,
Summative Assessment Hours 2,
Programme Level Learning and Teaching Hours 2,
Directed Learning and Independent Learning Hours
|Assessment (Further Info)
|Additional Information (Assessment)
||2 pieces of assessment for formative feedback, which will feed into assessed coursework.
1 piece of assessed coursework (25%).
1 exam (75%).
||Hours & Minutes
|Main Exam Diet S2 (April/May)||2:00|
On completion of this course, the student will be able to:
- Investigate the design and behaviour of programming languages by studying implementations in an interpreter
- Employ abstract syntax and inference rules to understand and compare programming language features
- Design and implement a domain-specific language capturing a problem domain
- Understand the design space of programming languages, including common elements of current languages and how they are combined to construct language designs
- Critically evaluate the programming languages in current use, acquire and use language features quickly, recognise problematic programming language features, and avoid their (mis)use.
|* Essentials of Programming Languages, Friedman, Wand and Haynes|
* Practical foundations for programming languages, Harper
|Graduate Attributes and Skills
|Keywords||programming languages,interpreters,domain-specific languages,types,abstraction,paramaterisation
|Course organiser||Mr James Cheney
Tel: (0131 6)51 5658
|Course secretary||Mrs Michelle Bain
Tel: (0131 6)51 7607