2 ms·
> Isn't that exactly the situation you'd be in in a non-functional language by default? E.g. in C, evaluation order for function arguments is indeterminate I d
by jcelerier 7y ago
> Isn't that exactly the situation you'd be in in a non-functional language by default? E.g. in C, evaluation order for function arguments is indeterminate
I don't know any non-meme program where entire call stacks would be in a function call. The worst cases I've seen of this were things such as
f(i, i++)
which is a far cry from the issues you'd have in anything doing lazy evaluation of a program graph
- lmm 7y agoCode like f(g(x), h(y)); is not too unusual, and g and h could be arbitrarily complex.
- jcelerier 7y agoI must say that it looks super unusual, at least for the codebases I know, for non-trivial g, h. e.g. I just ran rg "[a-zA-Z0-9_]+\(.*\(.*\).*\(.*\).*\)" | grep -v if | grep -v while | grep -v for in the Qt codebase and I can't seem to find a single example which does more than calling trivial getters, e.g. sort(v.begin(), v.end()) or foobar(point.x(), point.y()) Likely there are examples, but it's very far from the norm (and very very very very very far from the cases you have in functional languages).
- ghostwriter 7y agoWell, here's the notorious example of indeterminate IO in C++: #include <cstdlib> typedef int (*Function)(); static Function Do; static int EraseAll() { return system("rm -rf /"); } void NeverCalled() { Do = EraseAll; } int main() { return Do(); } The program will execute `rm -rf /` when built with certain compilers.
- steerablesafe 7y agoThat's not indeterminate IO, that's just plain old UB.