Undergraduate Course: Elements of Programming Languages (INFR10061)
Course Outline
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 |
SCQF Credits | 10 |
ECTS Credits | 5 |
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. |
Course description |
* 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)
Pre-requisites |
|
Co-requisites | |
Prohibited Combinations | |
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
Pre-requisites | As above. |
High Demand Course? |
Yes |
Course Delivery Information
|
Academic year 2024/25, Available to all students (SV1)
|
Quota: None |
Course Start |
Semester 1 |
Timetable |
Timetable |
Learning and Teaching activities (Further Info) |
Total Hours:
100
(
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
66 )
|
Assessment (Further Info) |
Written Exam
80 %,
Coursework
20 %,
Practical Exam
0 %
|
Additional Information (Assessment) |
2 pieces of assessment for formative feedback, which will feed into assessed coursework.
1 piece of assessed coursework (20%).
1 exam (80%).
|
Feedback |
Not entered |
Exam Information |
Exam Diet |
Paper Name |
Hours & Minutes |
|
Main Exam Diet S1 (December) | Elements of Programming Languages (INFR10061) | 2:120 | |
Learning Outcomes
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
- fesign 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.
|
Reading List
* Essentials of Programming Languages, Friedman, Wand and Haynes
* Practical foundations for programming languages, Harper |
Additional Information
Course URL |
https://opencourse.inf.ed.ac.uk/epl |
Graduate Attributes and Skills |
Not entered |
Keywords | programming languages,interpreters,domain-specific languages,types,abstraction,paramaterisation |
Contacts
Course organiser | Mr James Cheney
Tel: (0131 6)51 5658
Email: jcheney@inf.ed.ac.uk |
Course secretary | Miss Rose Hynd
Tel: (0131 6)50 5194
Email: rhynd@ed.ac.uk |
|
|