4 ms·
1) It's not a constant expression, it's a function call. 2) The compiler does not know if there are collateral effects or not. 3) Ocaml is strict eval - no me
by leovonl 11y ago
1) It's not a constant expression, it's a function call.
2) The compiler does not know if there are collateral effects or not.
3) Ocaml is strict eval - no memoisation
Therefore this would be an unsafe optimisation if the compiler tried to perform it, which could lead to unintended behavioural changes.
The only way to fix this properly would be to add an effects system in some sense, at least a way to mark pure/impure functions.