skip to main content
Skip header Section
Programming languages (3rd ed.): design and implementationJune 1995
Publisher:
  • Prentice-Hall, Inc.
  • Division of Simon and Schuster One Lake Street Upper Saddle River, NJ
  • United States
ISBN:978-0-13-678012-0
Published:01 June 1995
Pages:
669
Skip Bibliometrics Section
Bibliometrics
Contributors
  • NASA Goddard Space Flight Center
  • Fraunhofer USA, Inc.

Recommendations

Reviews

Doris C. Appleby

As the advertisements claim, this is the “long-awaited revision of Pratt's best-selling programming languages text,” earlier editions having appeared in 1975 and 1984. Pratt and Martin Zelkowitz, the co-author of this edition, devote the first 70 percent of the text to concepts, an increase of 9 percent over the second edition [1], and the last 30 percent to individual languages. Following a brief history of programming languages, they address hardware and translation issues, including a new section on parsing, so the programming languages course can substitute for a full course on compiler construction. Consideration of data types is followed by abstraction, including encapsulation, sequence control, subprogram control, and inheritance. An optional chapter 9, “Advances in Language Design,” includes parallel programming, formal properties of languages, and language semantics. Part 2, on individual languages, has been organized into five paradigms: simple procedural languages—Fortran and C; block-structured procedural languages—Pascal; ob ject-based languages—Ada, C++, and Smalltalk; functional (applicative) languages—LISP and ML; and logic programming (rule-based) languages—Prolog. Somewhat oddly, in Part 1, objects are discussed under the rubric of object-oriented languages, while Part 2 calls such languages object-based. The difference is not explained. The elimination of COBOL as a language example is interesting, in that an estimated two-thirds of all programs running in the business world are written in it. The authors have given up SNOBOL4 with reluctance, because it is becoming obsolete, but make no mention of why COBOL had to go. Computer science and business departments may still maintain quite different views of computer usage. There are brief language summaries for APL, BASIC, COBOL, Forth, PL/C, and SNOBOL4. The stated goal for Part 2 is “to have the reader understand the virtual computer needed to appropriately program in each of these languages.” This book is not intended for a course in which students actually learn to program in a variety of languages, although the authors propose that each instructor select three or four languages to emphasize and provide students with programming experiences in them. A suggested choice is one language from each of the object-based, functional, and logical paradigms. Language syntax is provided through annotated examples, which are considered sufficient for the student to solve “interesting class problems in each of those languages without the need to purchase separate language reference manuals.” I wonder whether the authors had in mind individual programming exercises, group projects, or class demonstrations. The authors mention that the materials have been class-tested with 118 students at the University of Maryland during the spring of 1995, but do not say more specifically what the students did. The authors' goals for the revision are to provide an overview of key paradigms; highlight languages in sufficient detail to permit programs to be written; provide an understanding of the relationship between a source program and its execution behavior; provide sufficient formal theory to show where languages fit into computer science research; and provide problems and references sufficient for students to extend their knowledge. I found the goals admirably met, with some reservations on goals 2 and 5. The excellent bibliography contains 126 entries, with 72 of them dating since the second edition, but there are few exercises, with an average of 11.5 per chapter, and as few as three in chapter 14 on logic programming. Problems in chapter 12 include three C++ programs for the reader to extend, but none in either Ada or Smalltalk. Problem 3 at the end of chapter 13 is the only functional programming exercise; it asks the student to program in LISP the self-reproducing function whose value is its own definition. This will be hard for students whose first look at LISP is in this course; only programming experience in Ada, C, Fortran, or Pascal is expected. Most exercises are compare-and-contrast, or ask the reader to consider an example of a particular language feature and explain its execution behavior. The book succeeds best in meeting goal 3. Chapter 2 asks how the language implementor gets “programs in the high-level language executed on the actual computer at hand, regardless of its machine language.” The two solutions proposed are translation (compilation) and software simulation (programming parts of the language under consideration). These solutions are subsequently addressed in the context of each language feature presented. This revision will probably be as popular as earlier versions, and rightfully so. It is carefully done, and represents a substantial modernization of the second edition. Its focus on virtual computers for each language paradigm is unequaled among competing texts. To teach a successful course, however, the instructor will have to be inventive in providing both classroom and programming activities.

Access critical reviews of Computing literature here

Become a reviewer for Computing Reviews.