See this too.
I have found it difficult to describe throw-catch semantics from the perspective of CPS (Continuation Passing Style). It now occurs to me that throw-catch may be explained away along these lines: The following stuff is a very incomplete description of exception semantics but tries to express just the part that may be new.
For languages with “try - catch” the continuation, which is conventionally a label, becomes a pair of labels, the first to be used upon return and the second upon a throw. A call site in a try block passes as the second part of the continuation, a pointer to the catch code, along with the necessary environment. Here is the try-catch pattern synthesized from Scheme’s primitives including the call-with-current-continuation. (The code proper)
There is an implicit unnamable bundle of ports attached to the computation—the continuation. They correspond to the throwables, or better the places to which throwables may be thrown. The bundle has no name in the language just as the return continuation has no name in the normal explanation of call-return semantics from the CPS perspective. Just as a return statement invokes the implicit continuation, so does a throw invoke some element of the bundle. To execute a block (stuff between curly braces) invoke the statements within that block with the same continuation and bundle. To execute a try block invoke the statements within but with a bundle that is obtained by replacing some of the elements of the current bundle with front ends that lead to catch clauses that match those element bundles. The continuation used in the try block is also replaced by one that leads to the finally clause associated with the try block. To execute a call statement pass the current bundle and a new continuation which includes the current continuation.
Invoking either a continuation or element of the bundle causes the computation to lose access to both the continuation and the bundle because the program cannot name either in order to stash it away.
P.S. What would exceptions mean in Scheme where continuations are accessible to the program?