Comp105 is a course about the principles of programming languages and their application. The emphasis is on ideas and techniques relevant to practitioners, but includes theoretical foundations crucial for deeper understanding: abstract syntax, formal semantics, type systems, and lambda calculus. Work in the course involves exploring programming languages and features both as a user (by writing programs in those languages), as a language designer (by implementing interpreters for those languages), and as a scholar (by proving mathematical properties of them).
- Book (required): Programming Languages: Build, Prove, and Compare by Norman Ramsey (with Samuel L. Kamin). Available at the Computer Science Front office.
- Survey: Please make sure you fill out the student survey.
- Piazza: We will use Piazza for questions and discussions. The course page is here.
|Sept 4||Introduction, course logistics|
|Sept 9||Concrete syntax to abstract syntax|
|Sept 11||Imperative programming, ImpCore, the environment||Read Ch. 2 -- 2.3||Out: ImpCore I|
|Sept 16||Operational semantics||Read Ch. 2.4|
|Sept 18||More operational semantics|
|Sept 23||OpSem to interpreter||Read Ch. 2.5||Out: ImpCore II|
|Sept 25||Introduction to Scheme||Read Ch. 3 -- 3.2|
|Sept 30||Scheme: recursion on lists, trees||Read Ch. 3.3|
|Oct 2||Scheme: recursion on lists, trees|
|Oct 7||Scheme: First-class functions||Read Ch. 3.7||Out: Scheme I|
|Oct 9||Programming with higher-order functions||Read Ch. 3.8 -- 3.10|
|Oct 15||Closures and Scheme semantics||Read Ch. 3.7, 3.12|
|Oct 16||Scheme semantics||Read Ch. 3.12|
|Oct 21||Midterm exam|
|Oct 23||Lambda calculus|
|Oct 28||Introduction to ML|
|Oct 30||No class|
|Nov 4||ML and type-directed programming||Out: ML I|
|Nov 6||Type systems|
|Nov 13||More type systems|
|Nov 18||Type checking||Chapter 6|
|Nov 20||Type inference||Chapter 7|
|Nov 25||Object-oriented programming||Chapter 10||Out: Type checking|
|Dec 2||Garbage collection and runtime systems||Chapter 4|
|Dec 4||Logic programming||Chapter 11|
|Dec 9||Advanced topics and wrap-up|
|Dec 13||Final exam -- 12pm to 2pm|
= provisional schedule.
Here are the programming language diagrams.
Your grade in this course will be based on the programming assignments, midterm and final exams, and class participation, which is a crucial part of the course. Grades will be computed as follows:
10% Class participation
You may discuss any of the homework problems with fellow students (in fact, I encourage you to discuss the homework!), but you must acknowledge those discussions in your submission (e.g., "I discussed the design with ... "). All written material (including code), however, must be your own work -- do not share your code with anyone else.
For the larger programs you will work in pairs (many of you are already familiar with pair programming from Comp40). Be very careful to separate your pair work from your individual work (a mistake could a violation of the academic integrity policies, with unpleasant consequences).
Everyone runs into situations, both within and out of their control, when they need extra time to finish an assignment. I will be using the "late day token" system, which functions kind of like "sick days" in the real world. It gives you control over these situations and avoids the unpleasant conversations where you try to convince me you deserve more time. Here's how it works:
- Each of you gets four (4) late day tokens. Each token lets you turn in one assignment one day late.
- You can budget them in different ways: 4 assignments 1 day late, 1 assignment 4 days late, etc. -- but tokens must be used whole (they cannot be split into pieces).
- You don't need explain why you're using tokens. That's the beauty! However, you must tell me when you're using tokens. If you just turn assignments in late without telling me, I will apply a steep penalty.
- I'm not a real stickler for deadline times, so you don't need to waste a token if you turn in an assignment 15 minutes after the deadline. But if you're going to turn it in any time the next day you will need to use a token.
- Once you have used up your tokens, you must turn assignments in on time. The late penalty will be 50% for each day late (in other words, two days late and it is a zero).
- There are, of course, exceptions for exceptional circumstances. You know what I'm talking about -- death in the family, illness or injury requiring hospitalization, etc.
My advice: if you're having trouble get help early. We have a boatload of TAs who can help you with any topic or assignment. If you start early you'll be able to enlist their help before you get into trouble and need to burn up late day tokens.
Students in this class are encouraged to discuss the programming assignments, but each student must produce his or her solutions completely independently. Specifically, you may verbally discuss problems, issues, and ideas, but you may not write anything down together. In addition, I ask that you document, in your code, anyone with whom you discussed the assignments.
Academic misconduct (also known as "cheating") is a very serious issue at Tufts. As a member of the University community, I am obligated to report any incidents. The consequences are painful for everyone involved. For more details, see the Tufts brochure on academic conduct: http://uss.tufts.edu/dosa/publications/documents/integrity.pdf
The most common reason for cheating is becoming overwhelmed by the work. Every one of us has been in this situation, and we're more than willing to help you if you feel like you're in trouble. Please, please come to us before you get into a situation where you're tempted to take someone elses solution.