An introduction to the design and implementation of programming languages, including lab experience using different kinds of languages and experience implementing programming language features.
CMSC 106 (or 206 at Bryn Mawr) or permission of instructor. NOTE: Concurrent enrollment in this and two other CMSC lab courses requires permission of the instructor, confirmed in writing/email before the end of the first week of classes.
Exams, programming projects, class participation including attempting 'mini-homework' assignments and participating in in-class exercises and 'interactive grading' meetings. Timely participation in scheduling activities at the start of the course is required to remain in the course.
- "Programming Languages: Principles and Practice", by Kenneth C. Louden (the second edition)
- "The Haverford Educational RISC Architecture" by David Wonnacott (this booklet is available with a nice cover at the Haverford book store (the lulu.com version, but with the shipping cost shared among all students) or you can print your own (without the cool cover) from the HERA web site).
- Web readings as assigned during the term.
- "Programming Language Pragmatics", by Michael Scott (no, not that Michael Scott) has good, but different, coverage of most topics in this course. I'll try to have a copy in the lab and one on reserve in the library.
- Other web resounces for learning programming languages, as posted to the course Moodle Page.
The CS Collaboration Policy will govern work in this course; as the semester progresses, we will add detail about what at-the-computer help is acceptable for this course. For now, the big ideas are:
- Read and understand the policy (handed out in class)
- Cite all help other than the professor, T.A., and required/recommended text (you are allowed to cite those if you wish, but it is not required unless you are specifically told otherwise); note that proper citation is sufficient to avoid any charge of academic dishonesty, and we will not be particularly focused on copyright law during lab work.
- It is fine to get help away from the computer, as long as you erase all notes and return to your computer with only the new understanding in your head.
- If you want help at the computer, in a form that is not discussed in our collaborative 'help at the computer' document in the current semester's Google Docs folder (see Moodle), add it to that document.
This course will introduce many of the principles of programming language design and implementation. We will discuss numerous features of several programming languages and the algorithms and data structures that are needed to provide these features. Labs and homework will cover both the use of various features and high-level understanding the algorithms and data structures involved in their implementation. CMSC 350, Compiler Design, provides more in-depth information about many of these algorithms and data structures through labs covering their application to a single simple language.
CMSC 245 lectures (and labs) will include examples (and exercises) in C++, the Scheme dialect of Lisp, and HERA assembly language. No prior knowledge of C++, Scheme, HERA is needed for this course, but students should be familiar with the programming techniques from CMSC 105/ 106 (e.g. creation of classes and functions/methods in Python (or some other language), and confidence with basic uses of both the pure functional and imperative views of functions and data).
CMSC 245 should include as many of the following topics as we can cover:
- languages, interpreters, compilers, and libraries
- lexical and syntactic analysis
- support for language features:
- evaluation of arithmetic expressions
- type systems and type checking
- control flow (conditional statements and loops)
- function calls and exception handling
- allocation of, and access to, storage for variables
- data encapsulation
- overloading of function names and operator symbols
- inheritance and dynamic binding
- functions as arguments and return values from other functions
- memory management and garbage collection
- concurrent programming
Other sources of information:
Information that is expected to stay relatively stable over several years and be relevant to everyone in the course, such as course content prerequisites, is listed on this web page. Semester-specific information can be found on the course Moodle page, which contains weekly topic information, mini-homework assignments, and grade information, as well as links to each semester's GoogleDocs page. Scheduling information can be found on the CS245 Google Calendar (note that, if you use Google Calendar, you may want to hit the "+ Google Calendar" button on the lower right side of that calendar page, to add it to your main calendar view).