Zusammenfassung
Weil die realen Probleme um das Implementieren ALGOL-artiger Programmiersprachen mit geschachtelten und formalen Prozeduren durch Korrektheitsbeweise hätten vermieden werden können, bietet Teil 3 des vorliegenden Artikels solche musterhaft, auf passend abstraktem Niveau, an: im Falle der vom ALGOL60-Bericht intendierten Sprachsemantik mit statischer Namensbindung und im Falle der von Dijkstras Laufzeitsystem vorgeschriebenen MR-Semantik mit dynamischer Namensbindung (MR gleich ,,most recent“). Im Grunde arbeitet ein Laufzeitsystem gemäß einer Großschrittkopierregel, während sich der Anwendungsprogrammierer für eigenes Programmverstehen besser an eine Kleinschrittkopierregel hält, die keine Kenntnisse vom Laufzeitsystem verlangt. Die funktionale Programmiersprache Lisp erlebte ein ganz ähnliches Ausspielen dynamischer gegen statische Namensbindung.
Die praktische Weiterentwicklung von Programmiersprachen und -techniken suchte den Problemen der Semantikunterschiede zu entgehen, indem man in wenig organischer Weise formale Prozeduren oder Schachtelung prozedurverwandter Konstrukte ausschloß. Überdies versprachen theoretische Resultate zur Programmspezifikation und -verifikation auf den ersten Blick, generelles dynamisches Binden sei dem statischen wegen des besseren Mechanisierungspotentials überlegen. Solche Maßnahmen und Sichten erschweren dennoch das Softwareverfeinern unter Informationsverbergen und das Softwareverifizieren; statische Namensbindung pflegt zu allgemeineren Gesetzen und Regeln mit klareren Bezügen zur mathematischen Logik zu führen.
Beachtenswerterweise kann nicht einmal objektorientiertes Programmieren mit ungeschachtelten Klassen die inhärente Komplexität der Verweisstrukturen zwischen Prozedurinkarnationen herunterschrauben, Strukturen, wie sie ALGOL-artige Programme mit formalen Prozeduren zur Laufzeit hervorbringen können. Das Verstehen von objektorientierten Programmen ist nicht leichter als das von Programmen mit formalen Prozeduren.
References
Aho AV (1968) Indexed grammars – an extension of context-free grammars. JACM 15(4):647–671
Aho AV (1969) Nested stack automata. JACM 16(3):383–406
Aho AV, Sethi R, Ullman JD (1989) Compiler-Bau, Teil 1. Addison-Wesley-Verlag GmbH, Bonn. 2. Aufl., Oldenbourg-Verlag, München Wien (1999)
Bauer FL (2008) Persönliche Mitteilung zu Treffen mit E.W. Dijkstra und K. Samelson im ALGOL60-Komitee 1959/60
Büchi JR (1960) Weak second order arithmetic and finite automata. Z Math Logik Grundl Math 6:66–92
Clarke EM, German SM, Halpern JY (1983) Effektive Axiomatizations of Hoare-Logics. JACM 30:612–636
Clarke EM (1979) Programming language constructs for which it is impossible to obtain good Hoare-like axioms. JACM 26:129–147
Curry HB, Feys R (1968) Combinatory Logic, Vol I. North–Holland, Amsterdam
Dahl O-J, Nygaard K (1968) Class and Subclass Declarations. In: Buxton JN (ed) Simulation Programming Languages. Proc IFIP Work Conf, Oslo 1967, North Holland, Amsterdam, pp 158–174
Damm W, Josko B (1983) A sound and relativlely* complete Hoare-logic for a language with higher type procedures. Acta Informatica 20:59–101
Damm W (1982) The IO- and OI-hierarchies. Theor Comput Sci 20:95–207
Dijkstra EW (1960) Recursive programming. Num Math 2:312–318
Floyd RW (1967) Assigning meaning to programs. In Schwartz JT (ed) Mathematical Aspects of Computer Science. Proc Symp Applied Math 19, American Math Soc, Providence RI, pp 19–32
Grau AA, Hill U, Langmaack H (1967) Translation of ALGOL60. In: Samelson K (chief ed) Handbook for Automatic Computation Ib. Springer, Berlin Heidelberg New York
Goerigk W (2005) On Simulating Nested Procedures by Nested Classes. In: Czaja L (ed) Proc Worksh Concurrency, Specification & Programming 2005, Ruciane-Nida 2005, Vol 1, Warsaw University, pp 125–135
Goerigk W, Langmaack H (2006) Formal Procedures versus Classes and Objects – On K. Nygaards Thesis concerning Program Structuring. In: Festschrift zur Emeritierung von G. Goos, Univ. Karlsruhe
Goldberg A, Robson D (1989) Smalltalk-80, the Language. Addison-Wesley, Boston, MA
Gosling J, Joy B, Steele G (1996) The Java Language Specification, 1st edn. Addison-Wesley, Boston, MA
Gosling J, Joy B, Steele G, Bracha G (2000) The Java Language Specification, 2nd edn. Addison-Wesley, Boston, MA
Harel D (1979) First-Order-Dynamic Logic. LNCS 68, Springer, Berlin Heidelberg New York
Hoare CAR (1969) An axiomatic basis for computer programming. Commun ACM 12:576–580
Hoare CAR (2001) Personal communications. EU-ESPRIT-BRA-Projekt ,,Provably Correct Systems – ProCoS“, Oxford 1990, Cambridge
van den Hove G (2009) Edsger Wybe Dijkstra – First Years in the Computing Science (1951–1968). Master Thesis, Univ Namur, Fac Comp Science
Ichbiah JD (1980) Ada Reference Manual. LNCS 106, Springer, Berlin Heidelberg New York
Igarashi A, Pierce B (2002) On inner classes. Informa Comput 177:56–89
Jensen K, Wirth N (1975) PASCAL User Manual and Report. Springer, Berlin Heidelberg New York
Kandzia P (1974) On the ,,most recent“-property of ALGOL-like programs. In: Loeckx J (ed) Proc 2nd Coll Automata, Languages and Programming, LNCS 14. Springer, Berlin Heidelberg New York, pp 97–111
Kernighan BW, Ritchie DM (1978) The C programming language. Prentice Hall, Englewood Cliffs
Klein H-J (1980) Zur Modularitätseigenschaft von Programmen ALGOL-ähnlicher Programmiersprachen. Ber. 8001, Inst Inform Prakt Math, Univ Kiel
Klein H-J (1980) Zur Charakterisierung von Programmen mit endlichen Arten. Dissertation Math-Nat Fak, Univ Kiel
Kreczmar A, Salwicki A, Warpechowski M (1990) Loglan’88 – Report on the Programming Language, LNCS 414. Springer, Berlin
Langmaack H (1973) On correct procedure parameter transmission in higher programming languages. Acta Inform 2(2):110–142
Langmaack H (1974) On procedures as open subroutines I, II. Acta Inform 2:311–333 (1973) and Acta Informat 3:227–241 (1974)
Langmaack H (1974) Zum Begriff der Modularität von Programmiersprachen. In: Schlender B, Frielinghaus W (Hrsg) 3. GI-Fachtag ü Programmiersprachen, Kiel. LNCS 7:1–12, Springer
Langmaack H (1982) On termination problems for finitely interpreted ALGOL-like programs. Acta Inform 18:79–108; auch Inst Informatik Prakt Math, Univ Kiel, Ber 7904 (1979)
Langmaack H (1985) A new transformational approach to partial correctness proof calculi for ALGOL68-like programs with finite modes and simple sideeffects. Ann Discr Math 24:73–102
Langmaack H (2007) On revival of ALGOL-concepts in modern programming and specification languages. In: Jones CB, Lin Z, Woodcock J (eds) Bjørner/Zhou Festschrift. LNCS 4700, Springer, Berlin Heidelberg, pp 414–434
Langmaack H, Kröger H, Kölsch R-T (1976) Scriptum zum Compilerbau-Praktikum SS 1975 u. WS 1975/76. Inst f Informatik u Prakt Math, CAU zu Kiel
Langmaack H, Lippe WM, Wagner F (1979) The formal termination problem for programs with finite ALGOL68-modes. Inform Process Lett 9:155–159
Langmaack H, Olderog E-R (1980) Present-day Hoare-like systems for programming languages with procedures: power, limits and most likely extensions. In: de Bakker JW, van Leeuwen J (eds) Proceed Autom Lang Progr, 7th Coll, Noordwijkerhout, July 1980. Springer LNCS 85:363–373
Langmaack H, Salwicki A, Warpechowski M (2009) On an algorithm determining direct superclasses in Java-like languages with inner classes – its correctness, completeness and uniqueness of solutions. Inform Comput 207:389–410
Lippe WM, Simon F (1978) A formal notion for equivalence of ALGOL-like programs. In: Robinet B (ed) Program transformations. Proc 3-rd Internat Symp on Programming, Paris, March 1978. Dunod, Paris, pp 140–197
Lipton RJ (1977) A necessary and sufficient condition for the existence of Hoare Logics. In: Proc 18th IEEE Symp on Foundations of Computer Science, Providence RI, Oct 1977. IEEE, New York, pp 1–6
Loeckx J, Sieber K (1984) The Foundations of Program Verification. Wiley-Teubner, Chichester Stuttgart
Madsen OL, Møller-Pedersen B, Nygaard K (1993) Object Oriented Programming in the BETA Programming Language. Addison Wesley/ACM Press, New York
Maslov AN (1974) The hierarchy of indexed languages of an arbitrary level. Doklady Akademii Nauk SSSR 217(5):1013–1016
Maslov AN (1976) Multilevel stack automata. Problemy Peredachi Informatsii 12(1):55–62
McCarthy J et al (1965) Lisp 1.5 Programmer’s Manual. MIT Press, Cambridge, MA
McGowan CL (1972) The ,,most recent“ error: its causes and correction. In: Proc ACM Conf on Proving Assertions About Programs. SIGPLAN Notices 7(1), SIGACT News 14:191–202
Milner R, Tofte M, Harper R (1990) The Definition of ML. MIT Press, Cambridge
Naur P (ed) et al (1960) Report on the algorithmic language ALGOL60. Num Math 2:106–136
Olderog E-R (1981) Sound and complete Hoare-like calculi based on copy rules. Acta Inform 16:161–197
Olderog E-R (1981) Charakterisierung Hoarescher Systeme für ALGOL-ähnliche Programmiersprachen. Dissertation. Bericht 5/81, Inst Informatik Prakt Math, Univ Kiel
Olderog E-R (1984) Correctness of programs with Pascal-like procedures without global variables. Theor Comput Sci 30:49–90
Salwicki A (1970) Formalized algorithmic languagees. Bull Acad Pol Sci Ser Sci Math Astr Phys 18(5):227–232
Stärk R, Schmid J, Börger E (2001) Java and the Java Virtual Machine – Definition, Verification, Validation. Springer, Berlin Heidelberg New York
Steele Jr GL (1984) Common Lisp: the Language. Digital Press, Bedford, MA
Stroustrup B (1991) The C++ Programming Language, 2nd ed. Addison-Wesley, Reading MA
Wilhelm R, Maurer D (1992) Übersetzerbau. Theorie, Konstruktion, Generierung. Springer, Berlin Heidelberg New York
Wilhelm R, Maurer D (1997) Übersetzerbau. Theorie, Konstruktion, Generierung, 2. Aufl. Springer, Berlin Heidelberg New York
Winklmann KA (1977) A theoretical study of some aspects of parameter passing in ALGOL60 and in similar programming languages. PhD Thesis, Purdue Univ, Lafayette, IN
Author information
Authors and Affiliations
Corresponding author
Rights and permissions
About this article
Cite this article
Langmaack, H. Dijkstras fruchtbarer, folgenreicher Irrtum. Informatik Spektrum 33, 634–646 (2010). https://doi.org/10.1007/s00287-010-0466-y
Published:
Issue Date:
DOI: https://doi.org/10.1007/s00287-010-0466-y