This course is an advanced investigation of the design of programming languages. It looks at features, not complete languages, touching on such languages as Ada, CLU, FP, Haskell, Icon, Lisp, ML, Modula-2, Modula-3, Pascal, Post, Prolog, Russell, and Smalltalk-80. Students will not become proficient in any of these languages, but rather will learn what contributions each has made to the state of the art in language design. Compiler-construction issues will be touched on only in passing. Main topics will be control structures, type mechanisms, functional programming, object-oriented programming, logic programming, dataflow, strings, and concurrency. The class will also discuss formal semantics of programming languages, particularly denotational semantics. There will be several written and programming assignments.
CS 575 or CS 580.
CS 553 is intended as a graduate-level course in programming languages. Students should be capable of programming in C and C++ and have a general knowledge of computer organization, data structures, and compiler construction. Students should also have had an undergraduate course that covers styles of programming languages.
Students will learn about modern programming language design. They will learn about a variety of paradigms and be able to evaluate language features within those paradigms.
Week by Week Course Outline:
This is a sample outline. Exact outline will be determined by the instructor offering this course.
|1||Review of imperative languages|
|3||Types, first-class functions and labels|
|4||Higher-order functions, the ML language|
|7||Simula 67 and Smalltalk|
|8||C++ and Java|
|9||Concurrent programming concepts|
|10||Logic programming: Prolog, Datalog, CLPR|
|11||Simulation: CSim, Simula-67|
|12||APL, DBASE, MatLab|
|13||Perl, Python, Tcl|
Exact details about examinations in this course will be determined by the instructor offering the course. Typically there will be one take-home final examination. Specific details will be made available in the syllabus at the start of each semester in which the course is offered.
A student's grade will be determined by a weighted average of homework assignments, about 4 programming exercises, a written project, class participation, and the final examination. The faculty offering the course will make the details available at the start of the course. A typical weighting is:
Programming assignments 40%
Final Examination 20%
Advanced Programming Language Design,