Skip to main content

Part of the book series: Lecture Notes in Computer Science ((LNCS,volume 2635))

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.

This is a preview of subscription content, log in via an institution to check access.

Access this chapter

Chapter
USD 29.95
Price excludes VAT (USA)
  • Available as PDF
  • Read on any device
  • Instant download
  • Own it forever
eBook
USD 39.99
Price excludes VAT (USA)
  • Available as PDF
  • Read on any device
  • Instant download
  • Own it forever
Softcover Book
USD 54.99
Price excludes VAT (USA)
  • Compact, lightweight edition
  • Dispatched in 3 to 5 business days
  • Free shipping worldwide - see info

Tax calculation will be finalised at checkout

Purchases are for personal use only

Institutional subscriptions

Preview

Unable to display preview. Download preview PDF.

Unable to display preview. Download preview PDF.

References

  1. 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)

    Google Scholar 

  2. 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)

    Google Scholar 

  3. 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)

    Google Scholar 

  4. 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)

    Google Scholar 

  5. 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)

    Google Scholar 

  6. Dahl, O.-J.: A note on monitor versions. In: Millennial Perspectives in Computer Science, Palgrave, pp. 91–98 (2000)

    Google Scholar 

  7. Dahl, O.-J.: Verifiable programming, 269 pages. Prentice Hall, Englewood Cliffs (1992)

    Google Scholar 

  8. 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)

    Chapter  Google Scholar 

  9. Dijkstra, E.W.: A Constructive Approach to the problem of Program Correctness. BIT 8, 174–186 (1968)

    Article  MATH  Google Scholar 

  10. Evans, D., Larochelle, D.: Improving Security Using Extensible Lightweight Static Analysis. IEEE Software (January/ February 2002)

    Google Scholar 

  11. Floyd, R.W.: Assigning meanings to programs. In: Proc. Amer. Soc. Symp. Appl. Math., vol. 19, pp. 19–31 (1967)

    Google Scholar 

  12. Gamma, E., Helm, R., Johnson, R., Vlissides, J.: Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley, Reading (1995)

    Google Scholar 

  13. Gates, W.H.: internal communication, Microsoft Corporation (2002)

    Google Scholar 

  14. Hoare, C.A.R.: An Axiomatic Basis for Computer Programming. Comm. ACM 12(10), 576–580, 583 (1969)

    Article  MATH  Google Scholar 

  15. Hoare, C.A.R.: The Verifying Compiler: a Grand Challenge for Computer Research. JACM 50(1), 63–69 (2003)

    Article  Google Scholar 

  16. Johnson, S.C.: Lint, a C program Checker. In: UNIX Programmers Manual, vol. 2A, pp. 292–303

    Google Scholar 

  17. 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)

    Google Scholar 

  18. Leino, K.R.M., Nelson, G., Saxe, J.B.: ESC/Java users manual. Tech note 2002.002, Compaq SRC (October 2000)

    Google Scholar 

  19. McCarthy, J.: Towards a mathematical theory of computation. In: Proc. IFIP Cong. 1962. North Holland, Amsterdam (1963)

    Google Scholar 

  20. Meyer, B.: Object-Oriented Software Constrcution, 2nd edn. Prentice Hall, Englewood Cliffs (1997)

    Google Scholar 

  21. 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)

    Google Scholar 

Download references

Author information

Authors and Affiliations

Authors

Editor information

Editors and Affiliations

Rights and permissions

Reprints 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

Publish with us

Policies and ethics