Keynote: Diagrammatic Execution Models for Functional Languages
“What is my program actually doing?” Sometimes you feel a need to execute a functional program yourself. Ok, here’s a function call. I’ll first look at arguments. Now I’ve got values of arguments, so I’ll go onto the function. Remember, this parameter is now this value, that parameter is now that value… You jump around the program, back and forth between variables and pieces of code, and keep collecting results of these visited pieces.
This talk introduces diagrammatic models of functional-program execution. The underlying idea is to express the above process using diagrams; the “token”, your agent, moves around a diagrammatic representation of a whole program, and visited pieces of the diagram dynamically change to represent their results (so we do not need to remember!).
We will explore these diagrammatic models, which help us not only with visualising program execution but also with designing a language. These models can cover from conventional programming, with various evaluation strategies including call-by-value (used in OCaml) and call-by-need (lazy, used in Haskell), to unconventional (but increasingly significant) programming with “computational graphs”.
Last but not least, the models are for mathematical reasoning; from cost analysis of execution to equational reasoning justifying compiler optimisation.