CSCI 7000: Programming Language Design for Interaction
This is a graduate-level topics class focused on programming language tools and techniques for constructing interactive experiences. More specifically, we will consider two themes in this class:
Primarily: Programming languages (as formal semantics and as practical implementations) focused on constructing interactive computational behavior. In particular, we will focus on functional languages, and approaches inspired by them. We will discuss many questions, including the following: What design elements define these systems?
What kinds of interaction can they express, and how do they express it?
Secondarily: Programming experiences that include interactive feedback. In particular, proof assistants used by PL experts (such as Agda, Idris, Coq and others), as well as programming environments designed specifically for end users (novices, or even non-programmers). Proof assistants are interactive systems created by and for PL research; other systems are created for beginners. We will share and discuss these interactions in class, asking: What design elements do these systems have in common?
What interactive experiences would benefit both experts and non-experts?
- Instructor: Matthew A Hammer
Class meetings: Tues/Thu @ 2--3:15 in the Idea Forge. (also known as FLMG 178). It's in the Fleming building, and some may call it the "Mesa Board Room". [Directions].
- Except for the first meeting, class meetings will consist of paper/video discussions.
- Office Hours: No regular hours. Instructor is available by email and by appointment.
- Grading: 50% participation (in class and virtual), 50% class project.
- Homework: Watching videos and reading papers before each class meeting. (Graded as class participation)
- Exams: None
- Final project: A mini research project, including a presentation. Details TBA.
- Home: https://git.cs.colorado.edu/pl-act-s16/home
Scope for literature and videos
The following topics fall within the scope of the class, and should/will be represented by the readings and videos that we consume and discuss in class. This list is not exhaustive.
- Reactive, dataflow programming
- Functional reactive programming (FRP): Working systems:
Functional reactive programming (FRP): Theory and semantics:
- Higher-Order Functional Reactive Programming without Spacetime Leaks [paper]
- Incremental computation
Practices of functional programmers (Education research, Industry case studies, etc)
- Do values grow on trees? paper
More topics, to be announced...
- Jan 12: Topic: Welcome. Introductions. No preparation needed.
Jan 14: Topic: Functional reactive programming: Deployed systems
Read Elm paper (PLDI 2013).
Play with Elm.
Create a gitlab account, and add a headshot of yourself.
Request access to join the pl-act gitlab group.
Jan 21: No meeting. (Instructor is traveling).
Watch JaneStreet's Incremental Talk. The passcode for this video will be sent via email.
Yaron Minsky shared this video with us as a favor to me; please do not distribute this link or passcode.
Read Yaron's Blogpost about Incremental.
Read Yaron's Blogpost about FRP vs SAC.
Participate in (online) class discussion
Jan 26: Topic: In-class discussions for Flapjax and JaneStreet's Incremental (videos from last week).
As usual, prepare 2-3 questions about each project. We will discuss.
Feb 2: In-class discussion of last week's videos.
Feb 4: Topic: Functional reactive programming: "Higher-order" Semantics.
Read Higher-Order Functional Reactive Programming without Spacetime Leaks [paper]
Before class, add your questions for discussion
Feb 9: Continued discussion from Feb 4.
Feb 23: Topic: Adapton, continued.
Instructor is traveling. No in-person meeting.
Read the OOPSLA 2015 paper, Sections 1 and 2: [full version from ArXiv]
Watch the video from Spring 2015, here: [Incremental Computation with Adapton]
Add your questions for discussion
Feb 25: Topic: Adapton, continued.
Read the OBT 2016 talk abstract (a short two pages): [Correct by construction interactive software]
Finish in-class discussion of the Adapton papers.
Mar 1: Topic: Project idea discussion.
Read about the class project.
Read the example project descriptions.
Create a new issue, in the
In the description of the new issue, describe your project. Describe the concept of the project, and the way you will proceed to refine this conception.
Mar 3: Topic: Project idea discussion, continued.
Mar 8: Topic: Project idea discussion, completed.
README.mdfile for your class project.
README.mdfile, document the concept, its refinement and a draft of the "critical path", i.e., the steps required to complete the project before April 28th.
Be prepared to discuss this document in class.
Mar 17: Project Updates.
Class discussion: Students present final draft of critial path.
Mar 22: Spring break. No meeting.
Mar 24: Spring break. No meeting.
Mar 31: Topic: Session Types
Read the paper Session Types as Intuitionistic Linear Propositions. Before class, add comments or questions here: [issue link]
- Apr 5:
- Apr 7:
- Apr 12:
- Apr 14:
- Apr 19:
- Apr 21:
- Apr 26:
- Apr 28: