15-312 Foundations of Programming Languages (Spring 2018)


This course introduces the fundamental principles of programming language design, semantics, and implementation. For more information on the course philosophy, read Why Study Programming Languages?.
After completing this course you will have acquired the following knowledge and skills:

  1. Thorough knowledge of a broad range of programming language concepts, including those found in most popular programming languages.
  2. Understand the concepts of abstract syntax, and the binding and scope of identifiers in a program. Be able to prove properties of languages by structural induction, respecting renaming of bound identifiers.
  3. Be able to give a mathematically precise definition of the statics (type system) and dynamics (execution behavior) of a programming language.
  4. Understand the concept of safety for a programming language, be able to prove that a language is safe, or derive a counterexample to its safety.
  5. Be able to implement an interpreter for a broad range of programming languages that is derived directly from its defined syntax, statics, and semantics.
  6. Understand how to integrate multiple features in a language and ensure that the combination is sensible.

Lectures:        Sun-Tue   16:30 ~ 17:50  (CMB 1031)
Recitations:   Thu           08:30 ~ 09:20  (TBD)
Units: 12
Prereq: 15210 and 15251

Piazza: piazza.com/cmu/spring2018/15312q (important announcements will be posted there) 
Autolab: https://autolab.andrew.cmu.edu/courses/15312q-s18/

Instructor: Giselle Reis
Office: CMU-Q 1008
Office hours: by appointment
e-mail: giselle@cmu.edu

Robert Harper, Practical Foundations for Programming Languages (Second Edition). Cambridge University Press, 2016 (available at the library).
Please see the PFPL Home page for corrections and commentary on the text.

Homework: 45%
– Due on Mondays at 16 AST
– To be solved individually
– Evaluated based on:
* Correct type-checking
* Correct functionality
* Presence of structured comments (type, description, requires/ensures)
* Presence of test-cases
* Well-written code
Participation: 5%
– Attending recitations.
– Asking and answering questions and contributing to discussions in class.
– Preparing for class by reading the material in advance.
Midterm: 20%
– 28/02 – 1hr and 20min
– Open-book
Final: 30%
– Date TBD – 3hrs
– Open-book

Schedule (subject to change):

Academic integrity:
You are expected to comply with the university policy on academic integrity (see also The Word and Understanding Academic Integrity).
Collaboration is regulated by the whiteboard policy: you can bounce ideas about a homework with other students, but when it comes to typing it down for submission, you are on your own. You are not allowed to use notes, files, pictures, etc, from any previous discussion nor previous versions of this course.
And remember not to ignore your inner voice when it says “That’s probably not the best decision…”.

An Invitation to Students with Learning Disabilities:
Carnegie Mellon University is committed to providing reasonable accommodations for all persons with disabilities. To access accommodation services you are expected to initiate the request and submit a Voluntary Disclosure of Disability Form to the office of Health & Wellness or CaPS-Q. In order to receive services/accommodations, verification of a disability is required as recommended in writing by a doctor, licensed psychologist or psycho-educational specialist. The office of Health & Wellness, CaPS-Q and Office of Disability Resources in Pittsburgh will review the information you provide. All information will be considered confidential and only released to appropriate persons on a need to know basis.

Once the accommodations have been approved, you will be issued a Summary of Accommodations Memorandum documenting the disability and describing the accommodation. You are responsible for providing the Memorandum to your professors at the beginning of each semester.

Take Care of Yourself:
Do your best to maintain a healthy lifestyle this semester by eating well, exercising, getting enough sleep and taking some time to relax. This will help you achieve your goals and cope with stress.

All of us benefit from support during times of struggle. You are not alone. There are many helpful resources available on campus and an important part of the college experience is learning how to ask for help. Asking for support sooner rather than later is often helpful.

If you or anyone you know experiences any academic stress, difficult life events, or feelings like anxiety or depression, we strongly encourage you to seek support. Counseling and Psychological Services (CaPS-Q) is here to help: call 4454 8525 or make an appointment to see the counselor by emailing student-counselling@qatar.cmu.edu . Consider reaching out to a friend, faculty or family member you trust for help.

If you or someone you know is feeling suicidal or in danger of self-harm, call someone immediately, day or night at 5554 7913.
If the situation is life threatening, call 999.