# Announcements

## 1 Final Lecture Moved

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

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

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

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

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

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

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

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

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

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

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

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

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

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.

**PLEASE DO NOT DO THIS. ONLY ATTEND LECTURES IN WHICH YOU ARE ACTUALLY ENROLLED. IF YOU ARE IN THE WEB STREAM, YOU SHOULD NOT ATTEND IN PERSON.**

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:

https://link.springer.com/article/10.1007/s10734-018-0275-9

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?

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

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.