Abstract
A verifying compiler is one that proves mechanically that a program is correct before allowing it to be run. Correctness of a program is defined by placing assertions at strategic points in the program text, particularly at the interfaces between its components. From recent enquiries among software developers at Microsoft, I have discovered that assertions are already used widely in program development practice. Their main rĂ´le is as test oracles, to detect programming errors as close as possible to their place of occurrence. Further progress in reliable software engineering is currently supported by programmer productivity tools. I conjecture that these will be developed to exploit assertions of various kinds in various ways at all stages in program development. Eventually assertions will be used more widely for their original purpose of establishing important aspects of the correctness of large programs. However, the construction of a fully verifying compiler remains as a long-term challenge for twenty-first century Computing Science.
Access this chapter
Tax calculation will be finalised at checkout
Purchases are for personal use only
Preview
Unable to display preview. Download preview PDF.
References
Bush, W.R., Pincus, J.D., Sielaff, D.J.: A static analyzer for finding dynamic programming errors. Software — Practice and Experience (30), 775–802 (2000)
Dahl, O.-J.: An approach to correctness proofs of semicoroutines. In: Blikle, A. (ed.) MFCS 1974. LNCS, vol. 28, pp. 157–174. Springer, Heidelberg (1975)
Dahl, O.-J.: Can program proving be made practical? In: Les fondements de la programmation, Institut de recherch dinformatique et dautomatique, pp. 57–114 (in English: ISBN 2726101844)
Dahl, O.-J.: Time sequences as a tool for describing program behaviour. In: Bjorner, D. (ed.) Abstract Software Specifications. LNCS, vol. 86, pp. 274–290. Springer, Heidelberg (1980)
Dahl, O.-J.: Object-orientation and formal techniques. In: Langmaack, H., Hoare, C.A.R., Bjorner, D. (eds.) VDM 1990. LNCS, vol. 428, pp. 1–11. Springer, Heidelberg (1990)
Dahl, O.-J.: A note on monitor versions. In: Millennial Perspectives in Computer Science, Palgrave, pp. 91–98 (2000)
Dahl, O.-J.: Verifiable programming, 269 pages. Prentice Hall, Englewood Cliffs (1992)
Dahl, O.-J., Owe, O.: Formal development with ABEL. In: Prehn, S., Toetenel, H. (eds.) VDM 1991. LNCS, vol. 552, pp. 320–362. Springer, Heidelberg (1991)
Dijkstra, E.W.: A Constructive Approach to the problem of Program Correctness. BIT 8, 174–186 (1968)
Evans, D., Larochelle, D.: Improving Security Using Extensible Lightweight Static Analysis. IEEE Software (January/ February 2002)
Floyd, R.W.: Assigning meanings to programs. In: Proc. Amer. Soc. Symp. Appl. Math., vol. 19, pp. 19–31 (1967)
Gamma, E., Helm, R., Johnson, R., Vlissides, J.: Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley, Reading (1995)
Gates, W.H.: internal communication, Microsoft Corporation (2002)
Hoare, C.A.R.: An Axiomatic Basis for Computer Programming. Comm. ACM 12(10), 576–580, 583 (1969)
Hoare, C.A.R.: The Verifying Compiler: a Grand Challenge for Computer Research. JACM 50(1), 63–69 (2003)
Johnson, S.C.: Lint, a C program Checker. In: UNIX Programmers Manual, vol. 2A, pp. 292–303
Leavens, G.T., Baker, A.L., Ruby, C.: Preliminary design of JML: a behavioural interface specification language for Java, Technical Report 98-060, Iowa State University, Department of Computer Science (August 2001)
Leino, K.R.M., Nelson, G., Saxe, J.B.: ESC/Java users manual. Tech note 2002.002, Compaq SRC (October 2000)
McCarthy, J.: Towards a mathematical theory of computation. In: Proc. IFIP Cong. 1962. North Holland, Amsterdam (1963)
Meyer, B.: Object-Oriented Software Constrcution, 2nd edn. Prentice Hall, Englewood Cliffs (1997)
Turing, A.M.: Checking a large routine. In: Report on a Conference on High Speed Automatic Calculating machines, pp. 67–69. Cambridge University Math. Lab., Cambridge (1949)
Author information
Authors and Affiliations
Editor information
Editors and Affiliations
Rights and permissions
Copyright information
© 2004 Springer-Verlag Berlin Heidelberg
About this chapter
Cite this chapter
Hoare, T. (2004). Towards the Verifying Compiler. In: Owe, O., Krogdahl, S., Lyche, T. (eds) From Object-Orientation to Formal Methods. Lecture Notes in Computer Science, vol 2635. Springer, Berlin, Heidelberg. https://doi.org/10.1007/978-3-540-39993-3_8
Download citation
DOI: https://doi.org/10.1007/978-3-540-39993-3_8
Publisher Name: Springer, Berlin, Heidelberg
Print ISBN: 978-3-540-21366-6
Online ISBN: 978-3-540-39993-3
eBook Packages: Springer Book Archive