Thank you, I was hoping to learn something by posting a comment, and was richly rewarded by your reply. Hadn't seen the "computer of rocks", brilliant.
Yes, I'm starting to see the difference between pure and deterministic. It seems like the latter is a description of a particular type of predictable/repeatable "program flow".
I found a related Wikipedia topic [1], "What makes algorithms non-deterministic?" Quote:
- If it uses external state other than the input, such as user input, a global variable, a hardware timer value, a random value, or stored disk data.
- If it operates in a way that is timing-sensitive, for example if it has multiple processors writing to the same data at the same time. In this case, the precise order in which each processor writes its data will affect the result.
- If a hardware error causes its state to change in an unexpected way.
Although real programs are rarely purely deterministic, it is easier for humans as well as other programs to reason about programs that are. For this reason, most programming languages and especially functional programming languages make an effort to prevent the above events from happening except under controlled conditions.
The prevalence of multi-core processors has resulted in a surge of interest in determinism in parallel programming.
---
The above includes a number of topics you raised, about events and timing information, and the possibility of making a language deterministic with some exceptions "under controlled conditions".
This part feels relevant too: "easier for humans as well as other programs to reason about".
[1] https://en.wikipedia.org/wiki/Deterministic_algorithm#What_m...?