Abstract
The second lecture looked at control structures on a larger scale than the commands(statements) of the first lecture : the scale of mechanisms for breaking programs down into subroutines, procedures, functions and methods. These linguistic mechanisms first appeared in Fortran II (1958) and Algol (1960). We presented the main choices of semantics (passing arguments by value, by name or by reference) and implementation (with or without a stack of activation blocks) for these subroutines. Next, we describe several extensions that complicate the flow of control generated by subroutine calls and returns : the multiple returns of Fortran 77, the non-local " goto " of Algol and Pascal, and exceptions and exception handlers in contemporary languages. Finally, we have described several advanced control structures that invert or symmetrize control around subroutine calls : iterators, generators, symmetrical coroutines, and cooperative threads .