Language Requirements For Turing Completeness

In the page on MalbolgeLanguage, it is discussed whether or not MalbolgeLanguage is TuringComplete. In an attempted ReFactoring, it is intended to move much of that debate here; as it quickly went beyond Malbolge (an EsotericProgrammingLanguage).

But first, some practical requirements for TuringCompleteness?:

Two uncontroversial ones.

And the source of controversy:


Of course, all buildable computers are FiniteStateMachines, as it is impossible to build a machine with infinite memory. There are 10^80 atoms in the known universe; so there's one trivial upper bound. However, many programming languages attempt to preserve the illusion of infinite memory, to varying degrees of success. The set of programming languages can be categorized as follows:

And the important question is: Does any of this matter?

No, but it's fun.

It's also interesting, and not entirely unrelated, that java programs will magically (without a recompile) be able to take advantage of 64 bit address spaces, while C programs will not. Essentially, Java tries to preserve the illusion of emulating a virtual machine which is undeniably TuringComplete, while C allows you to interact with a real machine, which is (as mentioned) necessarily an FSM. As a result, when our FSM's become quantitatively better approximations of a TuringMachine, Java programs just hork with strange errors less often, while C is confused. --AdamBerger

I don´t think there is any reason why the bound in C should be finite. "sizeof" tells you how many "units" of storage a pointer needs, it doesn´t tell you what the unit is. There have been c->lisp compilers on which the size of all the fundamental C types (pointers, all numerical types) is 1, exactly 1 lisp cell. However if the underlying lisp used a 18 bit or 32 bit or 64 bit wide lisp cell is completely invisible.


EditText of this page (last edited June 5, 2005) or FindPage with title or text search