# Turing Tarpit

Beware of the Turing tar-pit in which everything is possible but nothing of interest is easy. -- AlanPerlis

Refers to any language or system that is TuringComplete but minimalistic, supporting a bare minimum of operations or a very terse notation. Such a language may be interesting from a theoretical standpoint, but is impractical for use by human programmers. (Although some such languages are good candidates for IntermediateRepresentation? like ByteCode.)

The first such things were combinatorial logic, lambda calculus, and Turing machines, each of which can compute any computable function, and each of which is equivalent to the others by virtue of being able to simulate each of the others.

As a small example of the "tarpit" problem with such things, typically arithmetic is expressed in unary (base 1), which requires exponentially more space, time, and programming effort to deal with than do systems that use more conventional number bases such as base two.

Of course, since anything computable can be expressed in them, you can certainly set up a system for doing arithmetic in e.g. binary, but it is a nontrivial exercise to do so.

Similarly it can be possible but difficult and WriteOnly? to do certain things in certain programming languages. For instance, recursive algorithms in classic dialects of Basic might be simulated "by hand" using arrays to hold temporary values, but the result tends to be bug-ridden and highly opaque compared with the same algorithm expressed in a language with natural native support for functional recursion. Thus recursion is a TuringTarpit in classic Basic.

On the other hand, Basic always had reasonable string handling, whereas standard Pascal did not (it allowed only fixed length character arrays, for one thing), so Pascal was TuringTarpit in that particular area.

One (semi-) popular kind of TuringTarpit are the EsotericProgrammingLanguages, which are often designed as a kind of twisted exercise in humor.

Such languages demonstrate that, while many programming languages are TuringEquivalent, they are not equivalent for the purpose of expressing the intent of the programmer. Skilled programming language designers intentionally add SyntacticSugar and some extra verbosity to make their languages useful.

They also have their educational value; many of them show just how unusual or minimal a language can be while still remaining TuringComplete.

See http://www.wikipedia.com/wiki/Turing_tarpit

Examples: BefungeLanguage, BrainfuckLanguage, SnuspLanguage, InterCal, UnLambdaLanguage, MalbolgeLanguage, URISC (Sidenote: Malbolge is almost certainly not TuringComplete. InterCal is not minimalistic. BefungeLanguage is not a "bare minimum" approach either.) Also, it should be noted that the EsotericProgrammingLanguages? have not been peddled, FTMP, as SilverBullets. There are many other TuringTarpits OTOH, that have.