CSCI 312 – Programming Language Design

General Information

Instructor: Dr. Kenneth A. Lambert
Office: Parmly 406
Office Phone: 458-8809
e-mail: lambertk@wlu.edu

Lecture: M/W/F 1:30-2:30 Parmly 307
Office Hours: W/F 10:00-11:00, T/R 1:00-2:00, or by appointment


Brief Overview

Why are there so many programming languages, and how do they differ? What could their designers have been thinking? This course introduces the concepts, tools, and techniques used in programming language design. Topics include

  • formal notations for syntax
  • informal notations for semantics and pragmatics
  • lexical analysis and parsing
  • language support for programming paradigms such as
    • imperative programming
    • function-oriented programming
    • object-oriented programming
    • logic programming
    • concurrent programming
  • the history of programming languages
  • the logical evolution of programming languages

Classroom work will consist of lecture, discussion, and exercises. Written work will consist of several programming projects, hourly exams, and a research project on a programming language of your choice.


Course Objectives

  • Students will be able to read, understand, and write functional programs in Haskell, Java, and Erlang.
  • Students will be able to construct scanners and parsers from context-free grammars.
  • Students will be able to exploit a variety of modern programming paradigms, including imperative programming, object-oriented programming, functional programming, and logic programming.
  • Students will be able determine the situations in which each programming paradigm is most useful, and be able to explain the tradeoffs entailed by the use of each paradigm.

Readings

The following books provide introductions to the primary programming languages covered in this course. The Haskell book is available in ePub format for the iBooks and Nook readers. Links to the other two books are for the hardcopies at Amazon or the free reads at Safari books. We may have additional readings from journal articles and books on reserve in the Science Library.

Haskell Lambert, A Gentle Introduction to Functional Programming in Haskell A Gentle Introduction to Funcional Programming in Haskell
Java Urma, Fusco, and Mycroft, Java 8 in Action: Lambdas, Streams, and Functional-Style Programming

Safari Books Edition

Java 8 in Action: Lambdas, Streams, and Functional-Style Programming
Erlang Armstrong, Programming Erlang: Software for a Concurrent World

Safari Books Edition

Programming Erlang: Software for a Concurrent World

Grading

The written work for the course will consist of

  • Programming projects (50% of the grade)
  • Two hourly exams (30% of the grade)
  • Final research project (20% of the grade)

Attendance

Class attendance is required. There will be considerable information given in class that is not available elsewhere. We will occasionally have in-class exercises, and you should come to class prepared to participate in discussion.

The use of laptops and mobile computing devices are permitted during class so long as they are being used for the course, such as for taking notes, locating information related to the course, and completing classroom exercises. These devices are not to be used during class for texting, phone calls, reading email, social networking, completing assignments for other courses, or shopping.


Final Exam Policy

The final exam for this course will be given during the final exam week. You can take this exam during any of the regularly scheduled exam periods that week. You must supply an exam envelope to the instructor or the department administrative assistant no later than noon on the last day of class. You must specify a provisional day and time on the envelope, which you are free to change on the clipboard provided outside the door of Parmly 407 any time that week. Email or phone requests to reschedule will not be accepted.


The exam will be given in Parmly 405, and you should arrive promptly before the appointed time. If you are more than 15 minutes late, you will have to reschedule your exam. If you are more than 15 minutes late to the last exam period on Friday afternoon, you will receive a grade of 0 on your exam.

Students who have approved academic accommodations must make arrangements to use those accommodations directly with the instructor no later than the last day of class. Students approved for extra time will receive that time at the tail end of the morning exam period or before the beginning of the afternoon exam period (for example, ending at 1:30 PM for a morning exam or beginning at 12:30 PM for an afternoon exam). Students approved for a low-distraction testing location should reserve that space during the last week of classes (following instructions distributed by Director of Disability Resources Lauren Kozak.


Academic Integrity

Hourly exams, quizzes, homework exercises, and the final exam should be written individually and pledged.

Although you may discuss programming problems among yourselves, your programs should be your own work, unless otherwise specified (as when we do pair programming). You MAY use code from the PowerPoint slides or from the textbooks for the course. Otherwise, you may NOT use the work of your classmates, former students, friends, or anyone else in writing your programs. By “use” I mean turning in the work of others as your own, or even casting your eyes upon the work of others with a view to incorporating their solutions into your own. Deliberate concealment of sources constitutes plagiarism and will result in a failing grade for the course and a report to the EC. Deliberately providing solutions to other students, either verbally or in writing, via hardcopy or electronic transmission, will result in a failing grade for the course and a report to the EC. In particular, you may not share your work until the deadline to hand in material has passed. Please familiarize yourself with W&L’s policy on plagiarism. If you are in doubt about your own practice, please consult me before you turn in your work.


Accommodations

Washington and Lee University makes reasonable academic accommodations for qualified students with disabilities. All undergraduate accommodations must be approved through the Office of the Dean of the College. Students requesting accommodations for this course should present an official accommodation letter within the first two weeks of the (fall or winter) term and schedule a meeting outside of class time to discuss accommodations. It is the student’s responsibility to present this paperwork in a timely fashion and to follow up about accommodation arrangements. Accommodations for test-taking should be arranged with the professor at least a week before the date of the test or exam.


Presentations

1-Introduction and overview

2-Introduction to Functional Programming

3-Haskell Data Types and Functions

4-Haskell Control Structures

5-Haskell Lists

6-Haskell Strings and Tuples

7-Higher-Order Functions

8-Lazy Evaluation

9-Algebraic Data Types

10-Records and Type Classes

11-I/O and Side Effects

12-Text Files and Random Numbers

13-Introduction to Concurrent Programming

14-Erlang Basics

15-Erlang Control Structures

16-Erlang Records and Maps

17-Processes and Messages

18-RPC, Apply, and Registering Processes

19-Managing State

20-Distributed Erlang

21-Handling Errors

22-File Processing in Erlang


Programming Projects

All Projects (Sakai site)


Classroom Exercises


Links

  • Haskell Download the Haskell programming environment and documentation
  • Java Download Java and documentation
  • Erlang Download the Erlang programming environment and documentation

© Ken Lambert. All rights reserved.