3 ms·
It is impossible to implement a system without a de-facto recursion depth limit.
by krenoten 14y ago
It is impossible to implement a system without a de-facto recursion depth limit.
- asynchrony 14y agoRecursion depth limit is really a memory limit, so you just need someone to come and install more RAM when you run out in order to obtain de facto infinite memory, hence infinite recursion depth.
- mistercow 14y agoEven that is not infinite because there is a limit to how much memory you can address. You don't have to bring physical realities into it.
- asynchrony 14y agoThe system will just spontaneously update to the next power-of-two bits when address space gets short. Problem solved.
- mistercow 14y agoThat would break binary compatibility with all existing programs, though. So I guess the claim should be that it's impossible to implement a practically useful system without a de-facto recursion depth limit.
- tjgq 14y agoHow is a "limit to how much memory [one] can address" not a physical, rather than logical, constraint? Really, the crux of the matter is that you can have a function call itself an unbounded number of times in C (i.e. unbounded recursion). That you eventually run into a stack overflow is a limitation of the machine, not of the language; the definition of C does not prescribe a maximum number of recursive calls. This, together with conditionals, makes the C language Turing-complete.
- scott_s 14y agoYes, but as I point out elsewhere, Turing Completeness separates the expression from the machine. Machines will always have limits. But the expression of computation does not have to have limits.
- vidarh 14y agoBut this is not a de facto recursion limit of the system - the limit is encoded in the program itself, in the macros used to implement the limited recursion. void f() { f(); } is only limited by the system, and if compiled on a system that automatically expands the stack to fill all available memory, you could in theory keep adding memory, and the system could handle more recursions. The recursion limit is external to the program. But the linked c-preprocessor programs would have to be explicitly modified by adding more lines of code to achieve the same thing.
- finitocom 14y agoHow does tail-recursion fit into this discussion of infinite recursion?