Programming Languages

Staff

  • Instructor: Ranjit Jhala (rjhala@ucsd.edu)
  • TA: Kyle Thompson (r7thompson@ucsd.edu)
  • TA: Aronya Baksy (abaksy@ucsd.edu)

Co-ordinates

  • Lectures: Tu-Th 9:30a to 10:50am
  • Location: CENTER 109
  • Messages: Piazza

Description

The goal of this class is to expose students to advanced programming language ideas, including high-level programming abstractions, expressive type systems and program analyses. We will develop these ideas as follows.

  1. First, we will learn about functional programming in Haskell, a programming language that has been the incubator for many recent PL advances. We will use Haskell to learn about a variety of high-level programming abstractions and techniques.

  2. Second, we will learn about how high-level abstractions can be combined with modern resource tracking type systems to enable safe systems programming in the Rust programming language, which permits low-level memory manipulation, and enables nice concurrency and parallelism abstractions, all while ensuring memory and thread safety.

  3. Time permitting, we will conclude with an introduction to the formal verification of programs, i.e. how to specify that code has certain desirable properties, and how to automatically verify that those properties are indeed satisfied by the implementation.

For more details see the lecture plan.

Prerequisites

The class is mostly self contained. However, it will be helpful to have some knowledge of basic discrete math, and it will be essential that you enjoy programming and have a desire to learn the material.

Policies

  1. We will not be podcasting lectures.
  2. We will have worksheets to be filled in and submitted in every lecture.
  3. We have a no-screens policy: students must keep their devices off during lectures.
  4. We require all exams be taken on the announced dates and times

Integrity of Scholarship

University rules on integrity of scholarship will be strictly enforced. By taking this course, you implicitly agree to abide by the UCSD Policy on Integrity of Scholarship described here.

In particular,

all academic work will be done by the student to whom it is assigned, without unauthorized aid of any kind.

You are expected to do your own work on all assignments; except for the final group project.

You may (and are encouraged to) engage in general discussions with your classmates regarding the assignments, but specific details of a solution, including the solution itself, must always be your own work.

You may use Copilot/ChatGPT/Claude etc. for your programming assignments, but do so at your own risk: the midterm(s) and final examinations will be heavily based on the assignments, and doing well in them will require a thorough understanding of the solutions to the programming assignments. These exams will be entirely analog: no tools other than your brain and a writing instrument are to be used.

Incidents which violate the University’s rules on integrity of scholarship will be taken seriously. In addition to receiving a zero (0) on the assignment/exam in question, students may also face other penalties, up to and including, expulsion from the University. Should you have any doubts about the moral and/or ethical implications of an activity regarding the course, please see the instructor.

Research

Your class work might be used for research purposes. For example, we may use anonymized student assignments to design algorithms or build tools to help programmers. Any student who wishes to opt out can contact the instructor or TA to do so after final grades have been issued. This has no impact on your grade in any manner.