COMP[39]161 Concepts of Programming Languages
Semester 2, 2018


1 Final Lecture Moved

[2018-10-23 Tue 11:40]

The final lecture for COMP3161 has been moved to Ainsworth 202, the room above the normal lecture theatre for Tuesday lectures, due to a scheduling conflict.

It's still on at 2pm. Sorry for the mix-up!

2 Final Lecture

[2018-10-16 Tue 16:21]

The final COMP3161/9161 lecture, which consists entirely of revision questions, will be pushed back by a week to give you time to look at the material/complete assignments before the lecture occurs.

Therefore, we will have no lecture on Thursday the 18th of October, and we will have a lecture in Week 13 on Thursday 25th October at 2pm in OMB G31 as usual.

Thanks for sticking with the course, and best of luck in your exams.

3 Assignment 1 Marked

[2018-10-01 Mon 23:54]

I have marked assignment 1. Details can be seen on the results page.

I've also substantially updated the glossary, actually backed by an SQLite database now.

4 Assignment 2 Released

[2018-09-18 Tue 23:59]

Assignment 2 has been released. I haven't enabled submission yet but it should be enabled in the next few hours.

You can submit by typing:

$ give cs3161 TyInfer TyInfer.hs

5 Midsession Survey closed

[2018-09-18 Tue 23:59]

The midsession survey is now closed. Thank you to all students who participated.

Special thanks to the students who offered valuable suggestions, and to the students who said lovely kind things about this course.

6 Midsession Survey released

[2018-09-04 Tue 13:14]

I have released a midsession survey to gather some data and constructive feedback about this course. The normal end-of-semester surveys are a bit late to act upon.

In order to incentivise survey completion, I have made one of the COMP3161 participation marks contingent on filling out this survey.

This means that the survey cannot be anonymous, however I welcome any and all feedback, including negative feedback.

The survey can be accessed from the link in the sidebar, or by clicking here.

7 Assignment 1 Submission Open

[2018-09-03 Mon 16:11]

I have activated submission and set up a course subshell for you to be able to work on CSE machines.

You can enter the course subshell by typing 3161 on a CSE terminal. From there, you can use cabal commands to build your assignment, as per the (newly updated) spec.

To submit the assignment, go to the MinHS subdirectory and type:

$ give cs3161 Eval Evaluator.hs

Let me know if there are any issues!

8 Assignment 1 Released

[2018-08-29 Wed 23:59]

I have released assignment 1, both code and spec. Submission is not enabled just yet, as the CSE machines are currently configured to subtly break GHC. I have included instructions in the spec that should get the assignment to build for anyone using CSE machines, but I have yet to update the dryrun scripts.

9 Midsession Marked

[2018-08-28 Tue 00:18]

I have marked all the midsession tests. See the results page in the sidebar for more information.

Assignment 1 will be released this week.

10 Errata in Week 3 Thu Lecture

[2018-08-11 Sat 00:12]

I had forgotten to include a case in the definition of substitution for de Bruijn indices in the slides. I didn't notice it in the lecture. If a variable \(n\) is being substituted away, all subsequent variables \(m > n\) must be shifted down one place as the variable \(n\) is being removed. I have updated the slides now. Sorry about that!

Edit: I also just fixed a typo pointed out by a student on Piazza here.

11 Challenges up

[2018-08-03 Fri 17:31]

I have uploaded some challenge questions and their solutions under Week 2. The questions are of varying difficulty. I have labelled them with stars to indicate how difficult I think they are.

I have also uploaded a nicely typeset version of the \(\mathbf{M} \rightarrow \mathbf{L}\) proof I did in the lecture, and tutorial questions for next week.

12 Tutorial solutions

[2018-08-02 Thu 23:09]

The tutorial solutions for this week's tutorials and last week's homework are now live. Tomorrow I will be uploading: A typeset version of the \(\mathbf{M} \rightarrow \mathbf{L}\) proof I did in the lecture, next week's tute exercises, and some challenge proof questions (with solutions).

13 Glossary available

[2018-08-02 Thu 23:03]

I have added a new glossary page to the website, accessible from the sidebar. All of the symbols and mathematical terminology we will use in the course will be (briefly) defined there. Use it as a handy reference. As we go through the course, I will add more definitions and symbols.

14 Web streams and lecture attendance

[2018-07-20 Fri 00:19]

This year has seen over twice the number of students enrolled in this course compared to previous years, and I doubt this can be entirely attributed to my personal popularity as the new lecturer for this course. I'm guessing a lack of other options and convenient timetabling is the reasoning for many of you.

Unfortunately, this means that in order to accommodate the additional enrolments we have had to open a web stream for the first time in COMP3161/9161.

I have already heard from a number of web stream students saying that they intend to attend lectures despite not being enrolled in them.


Web stream students attending the lecture could, in the worst case, prevent enrolled students from being able to attend, and, furthermore, put us all in a sticky situation OH&S-wise if the lecture theatre becomes overcrowded.

If you are a web stream student and you want to attend lectures later on, when lecture attendance typically drops and there is likely to be space, you must first seek written authorisation from me before attending.

If you attend a lecture without authorisation from me or formal enrolment, and I spot you, I reserve the right to unceremoniously boot you out and deduct participation marks.

Similarly, and unlike in previous years, there are multiple tutors now for this course. If you wish to attend a different tutorial from the one in which you are enrolled, you once again must obtain authorisation from both tutors involved. This is to ensure participation marks are recorded accurately.

Lastly, I'd like to stress that web stream students must watch all lecture recordings in order to keep up with the course content. There is considerable research that recorded lectures do not contribute positively to education:

Partly this is because students tend not to keep up with the course as it is delivered and rely on recorded lectures as a post-hoc revision tool. Please don't do that. Try to stay up to date.

Good luck, and I'll see some of you next week!

15 What is COMP3161/9161 about?

[2018-04-17 Tue 14:35]

Some students have asked me to "sell" them on COMP3161. Here's a short description you can use to explain this course to your friends.

COMP3161/9161 is a course that teaches you the theory and practice behind the design and implementation of programming languages and type systems. In this course, you will learn the mathematical models we use to define languages, both general purpose and domain specific, and how to understand and compare language features. You will also get to put these models into practice with assignments involving Haskell implementations of a simple functional programming language. We will describe and analyse many different type system features, ranging from overloading and subtyping (as found in OO languages like Java), to linear and substructural types (as found in languages like Rust), to algebraic data types, parametric polymorphism and type inference (as found in languages like Haskell), to existential types and module systems (as found in languages like ML). We will also look at many dynamic features of languages, such as run-time memory management, abstract and virtual machines, exceptions, concurrency and parallelism. While the assignments are in Haskell, no previous knowledge of Haskell is assumed or required. Furthermore, this course does involve a fair bit of theory, but all the mathematical tools we use in the course are taught within the course – it’s calibrated to be an ideal introduction to the theoretical side of programming languages.

If you enjoyed any of: COMP3141, COMP3131, COMP2111, COMP6752, COMP4161, COMP3153/9153 or COMP3151/9151, you are likely to enjoy this course. If you haven’t done any of those courses, don’t panic! COMP3161/9161 is a great starting point.

16 Welcome to COMP3161/9161

[2018-04-14 Sat 18:59]

Welcome to COMP3161/9161 for 18s2! I (Liam O'Connor) have volunteered to lecture this course for 2018, as the previous lecturer Gabriele Keller is leaving UNSW.

Lectures begin in Week 1, with tutorials starting in Week 2.

2018-11-16 Fri 19:37

Announcements RSS