Acabo de leer un post escrito hace dos días (gracias David), comparando los lenguajes de programación con las religiones existentes.
La verdad es que lo he encontrado bastante ingenioso y he querido realizar mi contribución a la lista comparando Brainf*ck con la religion del Monstruo del Spaghetti Volador (FSM)
“Entonces brainf*ck sería como la religión del Monstruo del Spaguetti Volador: Brainf*ck es una parodia de lenguaje en forma de una protesta satírica a la complejidad del lenguaje en pro de la simplicidad del compilador.”
Hace unos meses escribí un post que resultó ser bastante concurrido acerca de como compilar el kernel en Ubuntu. Se me olvidó entonces añadir un paso que, aunque no es obligatorio, es bastante recomendable antes de proceder a la compilación (por motivos religiosos y tal): Justo despues de:
sudo apt-get install linux-source
cd /usr/src
tar xjf linux-source-2.6.xx.tar.bz2
#sustituir xx por la version de tu kernel (que hay que decirlo todo (dios mio))
Hay que escribir:
grep -r fuck linux-source-2.6.xx
Y deleitarse un rato con la lectura. Se recomienda al lector probar también con otras palabras malsonantes. Aquí tenéis un ejemplo del resultado:
linux-source-2.6.24/net/ipv4/netfilter/nf_nat_snmp_basic.c: * (And this is the fucking ‘basic’ method).
linux-source-2.6.24/net/netfilter/nf_queue.c: /* James M doesn’t say fuck enough. */
linux-source-2.6.24/Documentation/DocBook/kernel-locking.tmpl: If you don’t see why, please stay the fuck away from my code.
linux-source-2.6.24/arch/mips/sgi-ip22/ip22-setup.c: * fucking with the memory controller because it needs to know the
linux-source-2.6.24/arch/mips/pci/ops-bridge.c: * IOC3 is fucked fucked beyond believe … Don’t even give the
linux-source-2.6.24/arch/mips/pci/ops-bridge.c: * IOC3 is fucked fucked beyond believe … Don’t even give the
linux-source-2.6.24/arch/mips/pci/ops-bridge.c: * IOC3 is fucked fucked beyond believe … Don’t try to access
linux-source-2.6.24/arch/mips/pci/ops-bridge.c: * IOC3 is fucked fucked beyond believe … Don’t even give the
linux-source-2.6.24/arch/mips/pci/ops-bridge.c: * IOC3 is fucked fucked beyond believe … Don’t even give the
linux-source-2.6.24/arch/mips/pci/ops-bridge.c: * IOC3 is fucked fucked beyond believe … Don’t try to access
linux-source-2.6.24/arch/mips/pci/ops-bridge.c: * IOC3 is fucked fucked beyond believe … Don’t even give the
linux-source-2.6.24/arch/mips/pci/ops-bridge.c: * IOC3 is fucked fucked beyond believe … Don’t even give the
linux-source-2.6.24/arch/mips/pci/ops-bridge.c: * IOC3 is fucked fucked beyond believe … Don’t try to access
linux-source-2.6.24/arch/mips/pci/ops-bridge.c: * IOC3 is fucked fucked beyond believe … Don’t even give the
linux-source-2.6.24/arch/mips/pci/ops-bridge.c: * IOC3 is fucked fucked beyond believe … Don’t even give the
linux-source-2.6.24/arch/mips/pci/ops-bridge.c: * IOC3 is fucked fucked beyond believe … Don’t try to access
linux-source-2.6.24/arch/mips/kernel/irixioctl.c: * irixioctl.c: A fucking mess…
linux-source-2.6.24/arch/mips/kernel/irixelf.c:#if 0 /* XXX No fucking way dude… */
linux-source-2.6.24/arch/x86/kernel/cpu/cpufreq/powernow-k7.c: * Some Athlon laptops have really fucked PST tables.
linux-source-2.6.24/arch/x86/kernel/cpu/mtrr/generic.c:/* Some BIOS’s are fucked and don’t set all MTRRs the same! */
linux-source-2.6.24/arch/sparc/kernel/process.c: /* fuck me plenty */
linux-source-2.6.24/arch/sparc/kernel/sunos_ioctl.c: /* Binary compatibility is good American knowhow fuckin’ up. */
linux-source-2.6.24/arch/ppc/syslib/ppc405_pci.c: * the kernel try to remap our BAR #1 and fuck up bus
linux-source-2.6.24/lib/vsprintf.c: * Wirzenius wrote this portably, Torvalds fucked it up
linux-source-2.6.24/sound/oss/opl3.c: * What the fuck is going on here? We leave junk in the beginning
linux-source-2.6.24/include/asm-m68k/sun3ints.h:/* master list of VME vectors — don’t fuck with this */
linux-source-2.6.24/include/linux/netfilter/xt_limit.h: /* Ugly, ugly fucker. */
linux-source-2.6.24/include/asm-cris/arch-v32/spinlock.h: * writers) in interrupt handlers someone fucked up and we’d dead-lock
linux-source-2.6.24/include/asm-sparc64/system.h: /* If you fuck with this, update ret_from_syscall code too. */ \
linux-source-2.6.24/drivers/ide/pci/cmd640.c: * These chips are basically fucked by design, and getting this driver
linux-source-2.6.24/drivers/net/sunhme.c:/* Only Sun can take such nice parts and fuck up the programming interface
linux-source-2.6.24/drivers/net/sunhme.c: /* This card is _fucking_ hot… */
linux-source-2.6.24/drivers/media/video/bt819.c: BUG? Why does turning the chroma comb on fuck up color?
linux-source-2.6.24/drivers/mtd/mtd_blkdevs.c: registered, to prevent the link/init ordering from fucking
linux-source-2.6.24/drivers/scsi/NCR53C9x.c: * how bad the target and/or ESP fucks things up.
linux-source-2.6.24/drivers/scsi/NCR53C9x.c: /* Be careful, we could really get fucked during synchronous
linux-source-2.6.24/drivers/scsi/qlogicpti.h:/* Am I fucking pedantic or what? */
linux-source-2.6.24/drivers/watchdog/shwdt.c: * brain-damage, it’s managed to fuck things up one step further..
Es un lenguaje de programación extremadamente “simple”.
Su gramática sería algo como:
S:=[ + | - | > | < | [ | ] | . | , ]*
es decir, una cadena de caracteres compuesta por los símbolos
+
-
<
>
[
]
Supuestamente cualquier otro carácter en el código se debe ignorar, lo cual quiere decir que todo lo demás son comentarios.
El objetivo fundamental de este lenguaje no fue otro que el de permitir crear el compilador mas pequeño del mundo (originariamente 240 bytes).
BF está basado en la máquina de Turing mejorada (en realidad la máquina de Turing original solo podía escribir 0 ó 1 en la cinta) sin embargo BF tiene una limitación importantísima con respecto a las máquinas de Turing: tiene un tamaño de cinta finito (el límite, aunque no es un estandar, suele estar fijado en 30000 bytes). Dicha máquina de Turing sirve sobre todo para estudiar conceptos matemáticos relacionados con la teoría de la Computabilidad y la teoría de la Complejidad.
Según la tesis de Church-Turing no existe ninguna máquina conceptual capaz de resolver un algoritmo que no resuelva una máquina de Turing.
Normalmente los defensores de la IA fuerte mantienen que el cerebro humano (y según parece ser, el Universo) es reducible a una máquina de Turing.
¿Para que sirve BF?
Programar en este lenguaje en lugar de utilizar uno de más alto nivel (como puede ser por ejemplo el lenguaje ensamblador) sólo puede tener un motivo: llevar al extremo la práctica del onanismo mental y probar el nivel de frikismo.
A continuación: un interprete de Brainfuck que yo programé hace tiempo en forma de applet de java (me apetece un café)