CS 320 Concepts of Programming Languages

Wayne Snyder

Associate Professor of Computer Science

MCS 290

Office Hours: M 7:30 - 9pm, TW 4-6pm

Cell: 617 966 (2^10+41) Email: waysnyder@gmail.com

www.cs.bu.edu/fac/snyder/cs320/

 

Prerequisites

CS 131, CS 112, & CS 210

Description

(Official) Concepts involved in the design of programming languages. Bindings, argument transmission, and control structures. Environments: compile-time, load-time, and run-time. Interpreters.

(Actual) This course explores how programming languages are designed and implemented, focussing on syntactic issues such as specifying correct syntax, bound variables, types, and scope; and on semantic issues such as execution by interpretation vs compilation, environments and storage, closures, type checking, and efficiency. Our strategy in the course is to spend half the semester studying a new (for most of you) paradigm, functional programming, represented by the language Haskell. After seeing how the various design and implementation issues are handled in a particularly clear manner in Haskell, we shall apply what we have learned to implement an interpreter for a mini version of Python and a compiler for a mini version of C.

 

Course Materials and Handouts

Our textbook for the first half of the course will be Functional Programming in Haskell, by Graham Hutton ($40.89 to buy or $15.59 to rent on Amazon):

Other Resources on Haskell (all but the Hutton book are available in full online):

In general: Although we will not proceed in order through the material in Hutton, I will refer to it regularly, and you may also want to refer to the PDFs of Hutton's slides. I also think the first 100 pages (chapters 1 - 4) of Real World Haskell are very pithy and useful, as typical with O'Reilly books--but it is very old and will not cover recent versions of the language: it presents version 6.8 of the ghci, but we are up to version 8.2 currently.

For the latter parts of the class, we will use lecture notes and handouts, as there is no one text that covers the material in a suitable way.

Homeworks and Labs and the Project

Homework Policies

Homeworks will be due Tuesday night at 11:59pm, with some "grace period" of an hour or two; we are thinking about various options for handing in work late, or regrading, and will clarify this very soon!

Please do not ask for individual extensions if you get backed up (or have a hackathon, or get a cold, or your laptop breaks, or ....) and can't get an assignment in on time; it would be completely unfair to me to agree to this, and the only fair policy is to hold everyone to the same standard; we drop the lowest homework and add a little bit of deadline flexibility to projects (which you can't drop); if there are any other issues you need to tell me about you can do that at the end of the term (I'll invite you to do so at that time) and I'll consider it before I set the curve for the class.

Tests and Quizzes

Grades

These percentages are tentative and may be changed at my discretion at any time. Class participation, coming to office hours and saying something intelligent, emails with interesting comments on the course material, etc. will be considered at the end of the term when I decide on the curve for the final grades. I, like all professors, am a sucker for students who show a genuine interest and enthusiasm for the course material, and this may bump you up to the next highest grade if you are close to the borderline! However,"genuine" is the important word here, and I have been teaching for three decades and I'm hard to fool.....

Miscellaneous

BU Hub Learning Outcomes

This course satisfies Hub learning outcomes for Quantitative Reasoning II and the toolkit Critical Thinking.

Policy on Academic Conduct

Collaboration Policy

Collaboration policy for this class is as follows.