I'm curious if the problem with val _ = List.tabulate (1000000, fn i => i) segfaulting might not `just' be that they run out of stack space. I.e., if they wrote this function non-tail-recursively (as opposed to 2 passes, with one reversing the list) then it is 10^6 non-tail calls. Not that this is much of an excuse.