On Tue, 24 Jun 2008 18:42:15 -0400, John W Kennedy wrote: > David Combs wrote: >> passing >> *unnamed* functions as args (could Algol 60 also do something like that, >> via something it maybe termed a "thunk") > > No, the "thunks" were necessary at the machine-language level to > /implement/ ALGOL 60, but they could not be expressed /in/ ALGOL. > Are you sure about that?
The first time I ran across the term "thunking" was when Windows 3 introduced the Win32S shim and hence the need to switch addressing between 16 bit and 32 bit modes across call interfaces. That was called "thunking" by Microsoft and even they would surely admit it was a kludge. I used Algol 60 on an Elliott 503 and the ICL 1900 series back when it was a current language. The term "thunking" did not appear in either compiler manual nor in any Algol 60 language definition I've seen. A60 could pass values by name or value and procedures by name. That was it. Call by name is what is now referred to as reference passing. I should also point out that Algol 60 was initially written as a means for communicating algorithms between people. Compiler implementations came later. In consequence the language did not define links to libraries or i/o methods. Both features were compiler specific - for instance the Elliott introduced 'input' and 'print' reserved words and syntax while the 1900 compilers used function calls. The Elliott approach was more readable. Algol 60 did not have 'functions'. It had procedures which could be declared to return values or not. A procedure that returned a value was equivalent to a function but the term 'function' was not used. Similarly it did not have a mechanism for declaring anonymous procedures. That, like the incorporation of machine code inserts, would have been a compiler-specific extension, so it is a terminological mistake to refer to it without specifying the implementing compiler. -- martin@ | Martin Gregorie gregorie. | org | Zappa fan & glider pilot -- http://mail.python.org/mailman/listinfo/python-list