EPL: Elements of Programming Languages
Welcome to Elements of Programming Languages
Programming languages are used in all areas of Informatics, and most people doing an Informatics degree will go on to use programming in their work, whether in industry or academia. You will most likely have learned two or three programming languages in your studies (or on your own) so far. This course is not about teaching you about programming in any specific language, but about learning how programming language work, how they are designed and implemented, and even how you might design your own. Since new programming languages and programming features are being introduced continuously, this course will help you be ready to adapt to whatever new (or old) languages you might encounter in the rest of your studies or career.
Learning Outcomes
On successful completion of this course, you should 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.
Course Outline
- 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)
Course Structure
There will be 20 lectures, starting September 18, 2023. The lectures include the course introduction, three guest lectures, 16 lectures of examinable course content, and a course review lecture.
Lectures are as follows:
- Monday 1410-1500 in Drill Hall, Forresthill - Hired Space - Contingency
- Thursday 1410-1500 in LG.11 - 40 George Square Lower Teaching Hub
In case of any discrepancy between the information above (provided for convenience) and the University timetable, the latter takes precedence.
There is a laboratory session on September 25 in Appleton Tower labs 6.06 (TBC) with a not-for-credit coursework exercise due one week later. This exercise does not count toward your final grade, but will be returned with formative feedback.
Tutorials are held in weeks 3-10. Participation in tutorials (including working on tutorial problems in advance) is expected and the tutorials cover examinable material that is part of the course.
There will be three coursework exercises. The first two are evaluated and returned for formative feedback. The third is worth 20% of the final grade.
The exam is in the December exam diet. Please see the University's exam schedule page to check on the date / time of your exam.
Feedback
Formative feedback provides students with feedback on performance and understanding in time to assist with the assessed aspects of the course (coursework and exam).
Elements of Programming Languages offers the following formative feedback:
- Interaction with tutors in tutorials provides general feedback on understanding.
- The laboratory assignment will be collected, evaluated, and returned with formative feedback.
- The first coursework assignment will be collected, evaluated, and returned with formative feedback.
In addition, the summatively assessed coursework exercise will be marked, commented and made available for students to collect at most 3 weeks after submission and preferably within 2 weeks.