Techno

From Esolang
Jump to navigation Jump to search

Techno is a sort of one-instruction language designed by Keymaker, published in 2020.

The functionality of the sole instruction is defined by the given program in form of two expressions, location and value. To the memory location (memory is unbounded array beginning from index 0, with unbounded non-negative cells, all initially 0 except for a finite portion initialized by the given program) yielded by the first expression is set the value yielded by the second expression. Then the value in memory location 0 is increased by one. A step is completed. This is repeated infinitely unless the program halts (there are three conditions on which the program may halt successfully; if subtraction yields a value less than 0, if attempting to divide or modulo by 0).

Computational class

The language is shown Turing-complete via I/D machine translation (see linked page for more details).

Example program

Here is a translation of the I/D machine program IDIIDD into Techno:

[0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,1]<((
[[0]%6*6+0+2])*([1]+38))+(([[0]%6*6+1+2])*(1))+(([[0]%6*6+2+2])*([1]+38))+(([[0]
%6*6+3+2])*([1]+38))+(([[0]%6*6+4+2])*(1))+(([[0]%6*6+5+2])*(1))><(([[0]%6*6+0+2
])*([[1]+38]+1))+(([[0]%6*6+1+2])*([[1]+38]))+(([[0]%6*6+2+2])*([[1]+38]+1))+(([
[0]%6*6+3+2])*([[1]+38]+1))+(([[0]%6*6+4+2])*([[1]+38]))+(([[0]%6*6+5+2])*([[1]+
38]))>

Ambient Techno

There is a variant of the language that is in every way identical except for the automatic increasing of memory location 0 at the end of a step. This variant is Turing-complete likewise, as is shown with a Minsky machine translation (see linked page). On the Talk:Techno page there is an alternative Turing-completeness proof utilizing Tip.

External resources

  • Techno page (detailed explanations of the language and the I/D machine and Minsky Machine translations, translator programs, interpreter in Python)