[gclist] Re: gclist-digest V3 #36

Robert A Duff bobduff@world.std.com
Tue, 27 Jul 1999 09:33:18 -0400


> Standard Pascal used a similar technique for procedure parameters.
> Procedure parameters could be passed down to subroutines, but
> subroutines could not return procedure results, and you couldn't
> have variables or fields which were procedure references.
> The only thing you could do with a procedure parameter was to
> call it, or to pass it down as an argument to another procedure.
> This ensured that Pascal compilers could allocate closures
> (references to nested procedures) on the stack rather than on the heap.
> 
> I think Modula-2 also used the same technique.

No, Modula-2 is different from Pascal here.  In Modula-2, you can assign
pointers-to-procedures into global variables, and return them from
functions.  But you are not allowed to take the address of a nested
procedure, so the compiler can still do the usual stack allocation.  Ie
Modula-2 has the same power as C in this respect; C doesn't even *have*
nested functions.

- Bob