Systematic concurrent object-oriented programming
Communications of the ACM
AAA and CS 1: the applied apprenticeship approach to CS 1
SIGCSE '95 Proceedings of the twenty-sixth SIGCSE technical symposium on Computer science education
A new sort algorithm: self-indexed sort
ACM SIGPLAN Notices
PODC '97 Proceedings of the sixteenth annual ACM symposium on Principles of distributed computing
Programming with variable functions
ICFP '98 Proceedings of the third ACM SIGPLAN international conference on Functional programming
Specification-consistent coordination model for computations
SAC '98 Proceedings of the 1998 ACM symposium on Applied Computing
Software Engineering Books for Desert Island Reading
Automated Software Engineering
Composing programming languages by combining action-semantics modules
Science of Computer Programming - Special issue: Language descriptions, tools and applications (LDTA'01)
Scheduling a Metacomputer with Uncooperative Sub-schedulers
IPPS/SPDP '99/JSSPP '99 Proceedings of the Job Scheduling Strategies for Parallel Processing
Proof of Imperative Programs in Type Theory
TYPES '98 Selected papers from the International Workshop on Types for Proofs and Programs
Algebraic Methods for Optimization Problems
Revised Lectures from the International Summer School and Workshop on Algebraic and Coalgebraic Methods in the Mathematics of Program Construction
Verification for Java's Reentrant Multithreading Concept
FoSSaCS '02 Proceedings of the 5th International Conference on Foundations of Software Science and Computation Structures
Thinking Tools for the Future of Computing Science
Informatics - 10 Years Back. 10 Years Ahead.
Algebraic methods for optimization problems
Algebraic and coalgebraic methods in the mathematics of program construction
Verification of non-functional programs using interpretations in type theory
Journal of Functional Programming
Proceedings of the 35th SIGCSE technical symposium on Computer science education
The atomic manifesto: a story in four quarks
ACM SIGOPS Operating Systems Review
Monitors and Concurrent Pascal: a personal history
History of programming languages---II
The atomic manifesto: a story in four quarks
ACM SIGMOD Record
To use or not to use the goto statement: programming styles viewed from Hoare logic
Science of Computer Programming
Procedures and parameters in the real-time program refinement calculus
Science of Computer Programming
Formal proof of a program: Find
Science of Computer Programming
Multi-facet Problem Comprehension: Utilizing an Algorithmic Idea in Different Contexts
ISSEP '08 Proceedings of the 3rd international conference on Informatics in Secondary Schools - Evolution and Perspectives: Informatics Education - Supporting Computational Thinking
Agent-oriented programming: from prolog to guarded definite clauses
Agent-oriented programming: from prolog to guarded definite clauses
Linking Unifying Theories of Program refinement
Science of Computer Programming
Hi-index | 0.02 |
Charles Antony Richard Hoare is one of the most productive and prolific computer scientists. This volume contains a selection of his published papers. There is a need, as in a Shakespearian Chorus, to offer some apology for what the book manifestly fails to achieve. It is not a complete 'collected works'. Selection between papers of this quality is not easy and, given the book's already considerable size, some difficult decisions as to what to omit have had to be made. Pity the editor weighing the choice between a seminal paper, perhaps widely republished, and a lesser known gem overtaken by subsequent developments. The only defence that can be offered is to reassure the reader that Tony Hoare was consulted. The paper published as Chapter 1 is so placed because it provides biographical context. With this exception, the papers appear in chronological order of main publication. Each paper is introduced by 'link material'. Here again, there is need (at least) for explanation: how can one embellish such papers? The idea behind the link material is to record things which could not have been written in the original paper. Sometimes, it is possible to explain better the context in which a paper was conceived; the subsequent development of the ideas introduced can only be written with hindsight. Apart from these inputs, the papers speak so well for themselves that it has been possible to keep the link material brief. Because the editor's text varies in length, the (abstract and) paper follow immediately rather than being laid out on separate pages. In order to avoid confusion, the link material is set in a smaller fount. Again to assuage the reader's doubts, Hoare does have the last word in the Postscript. An attempt has been made to trace some of the key dates of drafts, submissions, etc. leading up to publication. For a scientist who points out that 'writing the paper is my method of research' this is both necessary and difficult. Some of Hoare's papers go through many drafts which are circulated to colleagues (sometimes changing title, sometimes using the same title on a complete rewrite.) A complete historiography has not been attempted. In particular, many of Hoare's papers have been reprinted (sometimes in several places): normally, only the first source is given. With some caution, Hoare's work can be divided under a number of headings. These themes are not disjoint, the whole output comes from a single person. Hoare's work on language definition is seen in Chapters 3, 13, 14, 16 (and also, to a lesser extent, in Chapters 11, 12); his contribution to methods of reasoning about programs is covered in Chapters 4-6, 8, 9, 11, 12, 14, 15, 17, 19, 20; his seminal work on parallelism can be traced through Chapters 10, 12, 15-17. Amidst writing these, often difficult, papers Hoare has produced a number of articles aimed at a wider audience: here, Chapters 1, 2, 7, 18, 21, 22 represent this form of his writing. The papers themselves have all been re-typeset and only minimal changes have been made. The form of references to other publications has been made uniform and all references have been collected at the end of this volume. In order to provide a useful snapshot, all papers by Hoare (even if there are co-authors) have been gathered into a separate list of references. (Except where they are referred to, Technical Reports etc. are not included: only true 'publications' are listed.) The form of reference to these is '[72]' or 'Hoare([72] )', the list being ordered, and numbers accordingly assigned, on a chronological basis. (This results in the use of 'Hoare' as a key even where the article lists a co-author before Hoare. No disrespect to his erstwhile colleagues is intended.) The other list of references gives works to which Hoare has not contributed. It is listed alphabetically, and references take the form 'Dijksta (1976)', with a, b etc. to distinguish publications in the same year. The editor and the publishers acknowledge, with thanks, permission to reprint the copyrighted articles in this book that have been published in various journals, proceedings, and books. Individual credits, with details of the sources of the papers, are given as a footnote to each chapter opening. The task of editing these essays has been most rewarding. The fact that it did not become a burden is largely thanks to the support I have received. I should like to thank Julie Hibbs who has typed and controlled the evolving book; Alison McCauley undertook all of the bibliographic research with real enthusiasm. Thanks are also due to the staff at Prentice Hall International who provided enormous support and encouragement. I am also very grateful to those other computer scientists who have offered advice and/or references. In particular I should like to thank John Reynolds, Jim Horning, Bob Tennant, Brian Randell, David Gries, and Jim King. Finally, I should like to thank Tony Hoare, with whom co-operation is always so stimulating.