CSCI 4500/6500 Programming Languages

You will need to write a 1 page summary for each (required) paper that you read. The summary must at least answer the below questions (briefly). The summary is due before midnight on Wednesday via email.
  1. What is the problem that the authors are trying to solve?
  2. What is their approach?
  3. What are the limitations?
  4. What are the results?
  5. What topics do you think the presenter should have included/excluded ?

Papers highlighted in pink denotes required papers.

Programming Language Design & Practical Issues

Hoare, C. A. R., Hints on Programming-Language Design, In Essays in Computing Science , C. A. R. Hoare and C. B. Jones, 1989 (Stanford/Berkeley/GTech reading lists)

Gabriel, Richard, Lisp: Good News, Bad News, and How to Win Big

Wirth, N., On the Design of Programming Languages, In Acta Informatica (Berkely)

Peter Wegner, Programming Languages - The First 25 years, IEEE Trans. Computers 25(12): 1207-1225 (1976)

Peter J. Landin. The next 700 programming languages. Communications of the ACM, 9(3):157-166, March 1966 (The greatest of the great (mentioned by many people))

Syntax, scanning and parsing

"Report on the algorithmic language ALGOL 60" (the language that Hoare said it was an improvement not only on its predecessors but on nearly all of its successors) (introduction of BNF, block structure, local scope recursiveness, types, call by-value, call by name)

Revised Report on the Algorithmic Language ALGOL 60, Naur, Backus, Bauer, Green, Katz, McCarthy, Perlis, Rutishauser, Samelson, Vauquois, Wegstein, van Wijngaarden, and Woodger, CACM 1(17), January 1963.

Ole-Johan Dahl, Kristen Nygaard, SIMULA: an ALGOL-based simulation language, Communications of the ACM archive, Volume 9 , Issue 9 (September 1966), Pages: 671 - 678

One-Pass, Optimal Tree Parsing - With Or Without Trees, Todd A. Proebsting and Benjamin A. Whaley, CC'96 April 1996. (automated code selection, parsing)

Hard-coding bottom-up code generation tables to save time and space, Christopher W. Fraser and Robert R. Henry, Software-Practice and Experience 21, (1):1-12, January 1991 (automated code selection)


Floyd: Assigning Meaning to Programs (Symposium in Applied Mathematics 1967) (axiomatic semantics)

Hoare, C. A. R., "An Axiomatic Basis for Computer Programming" Communications of the ACM, 12(10):576-580 and 583, October 1969.
(1400+ (The greatest of the great (mentioned by many people))

Hoare's Proof of a program FIND

K. R. Apt. Ten years of Hoare logic: A survey--Part 1 . ACM Transactions on Programming Languages and Systems Vol. 3, No. 4, pp. 431-483, 1981. (GTech, Berkeley)

T. Reps, Optimal-time incremental semantic analysis for syntax-directed editors. Ninth Annual ACM Symposium on Principles of Programming Languages, pages 169-176, January 1982. (attribute grammars)

Jukka Paakki. Attribute Grammar Paradigms--A High-Level Methodology in Language Implementation. ACM Computing Surveys, 27(2):196-256, June 1995. (introduction only, gtech)

R. D. Tennent. The Denotational Semantics of Programming Languages. Communications of the ACM, 19:437-453, August 1976.

Gordon D. Plotkin. A structural approach to operational semantics. Technical Report DAIMI FN-19, Computer Science Department, Aarhus University, Aarhus, Denmark, September 1981. (pretty great works)

Edsger W. Dijkstra. Guarded Commands, Nondeterminancy and Formal Derivation of Programs. CACM, Vol. 18, No. 8, August 1975 (GTech, Berkelay) (axiomatic) umich

Functional Programming

Philip Wadler, The Essence of Functional Programming (1992), Conference Record of the Nineteenth Annual ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages (288 citations) (discusses the use monads to structure functional programs - supports a notion of sequencing)

John Hughes, Why Functional Programming Matters, (1984), Computer Journal, 32(2):98 (shows how two key features of functional languages---higher-order functions (which take other functions as arguments) and lazy evaluation (which defers computations until their results are really needed) (204 citations)

John McCarthy. Recursive functions of symbolic expressions and their computation by machine, part I. Communications of the ACM, 3(4):184-195, April 1960. (pretty great works) (original paper on lisp)

John Backus, Can Programming by Liberated from the von Neumann Style? A Functional Style and its Algebra of Programs, Communications of the ACM, 21(8):613-641, August, 1978 (Backus functional programming vision)

P. Hudak, Conception, Evolution, and Application of Functional Programming Languages, ACM Computing Surveys, 21(3):359-411.

Andrew Appel, A Critique of Standard ML, CS Department, Princeton University, TR-364-92, February 1992.

Gordon Plotkin. Call-by-name, call-by-value, and the lambda-calculus. Theoretical Computer Science, 1:125-159, 1975. (The greatest of the great (mentioned by many people)) (formalizes evaluation strategies and simulations using operational semantics and continuations, call by-name can be simulated by call by value and vice versa) .

Type Systems

James H. Morris, Jr. Protection in Programming Languages. Communications of the ACM, 16(1):15-21, January 1973. (Type systems background)

Logic Programming

Robert Kowalski. Algorithm = Logic + Control. Communications of the ACM, 22(7):424-435, July 1979.

Robert Kowalski. Predicate logic as programming language. In IFIP Congress, pages 569-574, 1974. Reprinted in Computers for Artificial Intelligence Applications, (eds. Wah, B. and Li, G.-J.), IEEE Computer Society Press, Los Angeles, 1986, pp. 68-73. (pretty great works)

Davis, Ruth E., "Logic Programming and Prolog: A Tutorial", IEEE Software Engineering, 2, 5 September 1985, pp. 493-501. (a tutorial)

Ehud Shapiro and David H.D. Warren. The Fifth Generation Project: Personal Perspectives. Communications of the ACM, 36(3):46-48, March 1993.

Jaffar & Maher, Constraint Logic Programming: A Survey

Aspects of Algol and it's family languages

Dijkstra Guarded Commands, Nondeterminancy and Formal Derivation of Programs (Berkelay optional, GTech - PL) (499) (i.e. the if .. fi, do .. od things)

Edsger W. Dijkstra. Go to statement considered harmful.   [Tribble's nice annoted notes]   [Wikipedia w/ links to other resources]   11(3):147-148, March 1968. Pretty great works (mentioned by multiple people)

Donald E. Knuth. Structured programming with 'go to' statments. Communications of the ACM, 6(4):261-301, 1974. (A great many great works (mentioned at least once))

Object Oriented Programming

David Ungar and Randall B. Smith, Self: The Power of Simplicity SIGPLAN Notices 22(12), December, 1987. (Also published in Lisp and Symbolic Computation 4(3), Kluwer Academic Publishers, June, 1991.) (A great many great works)

J. Palsberg and M. I. Schwartzbach. Object-oriented type inference. In Proceedings of the ACM Conference on Object-Oriented programming: Systems, Languages, and Applications, October 1991.

Bjarne Stroustrup. What is "Object-Oriented Programming"?. Proceedings of the First European Software Festival, 1991 revised version. (stroustrup's definition of OO (?), flawed paper)

Pizza into Java: Translating theory into practice, Martin Odersky and Philip Wadler, Proc. 24th ACM Symposium on Principles of Programming Languages, January 1997. (340)

Luca Cardelli. A semantics of multiple inheritance. In G. Kahn, D. MacQueen, and G. Plotkin, editors, Semantics of Data Types, volume 173 of Lecture Notes in Computer Science, pages 51-67. Springer-Verlag, 1984. Full version in Information and Computation, 76(2/3):138-164, 1988. (pretty great works)

Subroutines and Control Abstractions

Hanson, David R. "Is Block Structure Necessary?", Software Practice and Experience, 11,1981, (pp. 853-866). (argues subroutines are unnecessary)

Edsger W. Dijkstra. Recursive programming. In Saul Rosen, editor, Programming Systems and Languages, chapter 3C, pages 221-227. McGraw-Hill, New York, 1960. Pretty great works (mentioned by multiple people))

Concurrent Programming and Parallel Languagues (thanks to Guy Blelloch)

Arvind and Rishiyur S. Nikhil. A Dataflow Approach to General-purpose Parallel Computing. Computation Structures Group Memo 302, Laboratory for Computer Science, Massachusetts Institute of Technology, July 1989.

MultiLisp. Lisp with futures. A future is a promise to provide the value of a computation if needed; pointers to the future may be freely manipulated. Run-time system decides when futures should create new processes. An introduction to Multilisp [Hal85] and developments in MultiLisp, particularly the difficulties of implementing both futures and explicit continuations ( call/cc) [Hal90].

Jade: A High-Level, Machine-Independent Language for Parallel Programming, M. C. Rinard and D. J. Scales and M. S. Lam, IEEE Computer, June, 1993.

Programming Parallel Algorithms, Guy Blelloch, CACM, May 1996.

Scripting Languages

JK Ousterhout, Scripting: Higher-Level Programming for the 21st Century   softpanorma [1]   softpanorma [2]   Wikipedia   sourceforge   IEEE Computer, 1998


Fateman (Berkeley) Software Fault Prevention by Language Choice: Why C is Not my Favorite Language. (software engineering)

P. Cousot and R. Cousot. Abstract Interpretation: A Unified Lattice Model for Static Analysis of Programs by Construction or Approximation of Fixpoints. In Symposium on Principles of Programming Languages, pages 238-252, January, 1977.

Wilson, Uniprocessor garbage collection techniques. In International Workshop on Memory Management in the Springer-Verlag Lecture Notes in Computer Science series., St. Malo, France, September 1992. Also online. (GTech)

"On the Criteria To Be Used in Decomposing Systems into Modules" Parnas

Alpern, Cocchi, Fink, Grove, Efficient Implementation of Java Interfaces: Invokeinterface Considered Harmless. OOPSLA 2001 proceedings, pp. 108-124. (GTech)

Wilson, Johnstone, Neely, Boles. Dynamic Storage Allocation: A Survey and Critical Review. In International Workshop on Memory Management, Kinross, Scotland, UK, 1995. Also online. (GTech)

Wing, J. "A Specifier's Introduction to Formal Methods", Computer 23(9): 8-26, September, 1990. (GTech)

Wilson, Uniprocessor garbage collection techniques. In International Workshop on Memory Management in the Springer-Verlag Lecture Notes in Computer Science series., St. Malo, France, September 1992. Also online. (GTech)

Bracha, Odersky, Stoutamire, Wadler, Making the future safe for the past: Adding Genericity to the Java Programming Language. OOPSLA '98 proceedings, pp. 183-200. (GTech, Berkeley, object oriented, parametric polymorphism) (332)

Berkeley VA lecture notes on attribute grammars etc (berkeley)