16.01.2015 Views

CS2013-final-report

CS2013-final-report

CS2013-final-report

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

CSC 2/454: Programming Language Design and Implementation,<br />

University of Rochester<br />

Rochester, NY<br />

Michael L. Scott<br />

scott@cs.rochester.edu<br />

www.cs.rochester.edu/u/scott/254/<br />

Knowledge Areas that contain topics and learning outcomes covered in the course<br />

Knowledge Area<br />

Total Hours of Coverage<br />

Programming Languages (PL) 35<br />

Where does the course fit in your curriculum<br />

CSC 254 is required of all BS candidates in Computer Science. It is most often taken in the junior year, but<br />

sometimes the sophomore or senior. The CS1–CS2 sequence (locally CSC 171–172) is a prerequisite, as is a local<br />

course (CSC 173) that covers (among other things) finite and pushdown automata, regular expressions, and<br />

recursive descent parsing. The course can be taken for graduate credit (as CSC 454) by first-year MS and PhD<br />

students who lack comparable undergraduate background. The course is offered once a year—recently to<br />

approximately 40 students.<br />

What is covered in the course<br />

CSC 2/454 is an introduction to the design and implementation of programming languages. From the design point<br />

of view, it covers language features as tools for expressing algorithms. From the implementation point of view, it<br />

covers compilers, interpreters, and virtual machines as tools to map those features efficiently onto modern computer<br />

hardware. The course touches on a wide variety of languages, both past and present, with an emphasis on modern<br />

imperative languages, such as C++ and Java, and, to a lesser extent, on functional languages such as Scheme and<br />

Haskell, and dynamic (scripting) languages such as Perl, Python, and Ruby. Rather than dwell on the features of<br />

any particular language, it focus on fundamental concepts and on the differences among languages, the reasons for<br />

those differences, and the implications those differences have for language implementation.<br />

Specific topics include:<br />

• formal aspects of syntax and semantics<br />

• naming, scoping, and binding<br />

• scanning, parsing, semantic analysis, and code generation<br />

• control flow, subroutines, exception handling, and concurrency<br />

• type systems, data abstraction mechanisms, and polymorphism<br />

• run-time systems, virtual machines, and storage management<br />

• imperative, functional, logic-based, and object-oriented programming paradigms<br />

• programming environments and tools<br />

What is the format of the course<br />

254 has historically been taught in a fairly traditional formal, with two 75-minute lectures per week. The instructor<br />

usually works at the blackboard, however, rather than using prepared slides, and the lectures are highly interactive:<br />

student feedback determines the pace and, to a significant extent, the topics that are covered. We are considering the<br />

introduction of peer-led team learning “workshops,” which have been used with great success in the department’s<br />

intro-level courses.<br />

- 369 -

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!