Brainfuck

Brainfuck
Información general
Paradigma Esotérico
Apareció en 1993
Diseñado por Urban Müller
Implementaciones Múltiples
Influido por Máquina de Turing, P′′
Ha influido a Ook!, Tink
[ editar datos en Wikidata]

Brainfuck (jodecerebros), es un lenguaje de programación esotérico, diseñado por Urban Müller en 1993, con el objetivo de hacer un lenguaje que fuera a la vez muy simple, Turing completo y que requiriese un compilador pequeño. Müller basó Brainfuck en la máquina de Turing y le sirvió de inspiración el compilador de 1024 bytes de tamaño del lenguaje FALSE.

La distribución clásica es la versión 2 escrita por el propio Müller, conteniendo un compilador para el ordenador Amiga, un intérprete, programas de ejemplo y un documento " readme".

Diseño del lenguaje

El lenguaje se basa en un modelo de ejecución simple que consiste, además del programa, de un vector de (al menos) 30.000 bytes inicializados a cero, un puntero sobre ese vector (que al comienzo de la ejecución apunta al primer elemento del vector) y dos "corrientes" de bytes para la entrada y la salida.

Las Instrucciones

Hay solo ocho instrucciones, y todas son de un carácter.

Carácter Significado
> Incrementa el puntero.
< Decrementa el puntero.
+ Incrementa el byte apuntado.
- Decrementa el byte apuntado.
. Escribe el byte apuntado en el flujo de salida.
, Lee un byte del flujo de entrada y lo almacena en el byte apuntado.
[ Avanza a la instrucción inmediatamente posterior al ] correspondiente si el byte actualmente apuntado es nulo (si es 0).
] Retrocede a la instrucción inmediatamente posterior al [ correspondiente si el byte actualmente apuntado no es nulo (si es distinto de 0).
Traducción a otros lenguajes

Los programas de Brainfuck se pueden traducir a C y Perl con estas substituciones, suponiendo que ptr sea del tipo unsigned char*. Sin embargo, poseen sus propios traductores.

brainfuck C Perl
> ++ptr; $pointer++;
< --ptr; $pointer--;
+ ++*ptr; $tape[$pointer]++;
- --*ptr; $tape[$pointer]--;
. putchar(*ptr); print chr$tape[$pointer];
, *ptr=getchar(); $tape[$pointer]=ord(<>);
[ while (*ptr) { while($tape[$pointer]){
] } }
Other Languages
català: Brainfuck
čeština: Brainfuck
dansk: Brainfuck
Deutsch: Brainfuck
English: Brainfuck
eesti: Brainfuck
euskara: Brainfuck
فارسی: برین‌فاک
suomi: Brainfuck
français: Brainfuck
עברית: Brainfuck
magyar: Brainfuck
íslenska: Brainfuck
italiano: Brainfuck
日本語: Brainfuck
한국어: 브레인퍽
Bahasa Melayu: Brainfuck
Nederlands: Brainfuck
norsk bokmål: Brainfuck
ਪੰਜਾਬੀ: ਬ੍ਰੇਨਫ਼ੱਕ
polski: Brainfuck
português: Brainfuck
română: Brainfuck
русский: Brainfuck
slovenčina: Brainfuck
slovenščina: Brainfuck
svenska: Brainfuck
тоҷикӣ: Brainfuck
Türkçe: Brainfuck
українська: Brainfuck
Tiếng Việt: Brainfuck
中文: Brainfuck