3 ms·
The C preprocessor is a pushdown automaton, which if you add fixpoints (unbounded recursion) becomes a bounded storage machine. Our actual computers are such ma
by evincarofautumn 14y ago
The C preprocessor is a pushdown automaton, which if you add fixpoints (unbounded recursion) becomes a bounded storage machine. Our actual computers are such machines, which if you give them an infinite amount of memory are Turing machines. A language can be Turing-complete even if the implementation of that language is not.
- mistercow 14y agoCan C be implemented such that pointers do not have a fixed size? That is to say, suppose you have a hypothetical machine that uses bignum memory addresses. Can C be implemented to run on that machine without cheating and using a fixed pointer size?
- scott_s 14y agoYou don't need to reason about C's pointers to consider its Turing Complete. That it allows arbitrary storage, it has conditionals and allows full looping (either unbounded loops or full recursion) is enough. That is, a language that had C's semantics sans pointers would still be Turing Complete.
- mistercow 14y agoAre you saying that C with neither pointers nor arrays would still be Turing complete? I am skeptical.
- knz42 14y agoIt's not, and it's not obvious. https://tdotc.wordpress.com/2012/11/18/on-the-turing-completeness-of-c/ https://tdotc.wordpress.com/2012/11/18/on-the-turing-complet...
- scott_s 14y agoI actually pondered on this for a long time, and I haven't come to a conclusion. I cannot, however, counter any of your arguments, as I thought some of the same things myself. This is a surprising train of thought.
- tjgq 14y agoInterestingly, any physical, finite machine can be modelled as a finite state automaton (which is even more limited than a pushdown automaton) with a large enough state space. The distinction only comes up when you consider idealized infinite machines. Theory of computation is weird.