Brainfuck: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Senpai (discussione | contributi)
+Categorizzare +Wikificare
Ilaria (discussione | contributi)
wikificato
Riga 1:
'''Brainfuck''' è un [[w:linguaggio di programmazione|linguaggio di programmazione]] per [[w:computer|computer]], di tipo minimalista, creato da [[w:Urban Müller|Urban Müller]] intorno al [[w:1993|1993]]. Il linguaggio viene in taluni casi denominato '''Brainf*ck''', '''Brainf***''' o anche soltanto '''BF''' per evitare di offendere la sensibilità altrui.
{{W|Informatica|luglio 2008|firma=[[Utente:Senpai|<span style="color:black;">'''Ş€ņpãİ - せんぱい'''</span>]] [[Discussioni_utente:Senpai|<span style="color:black;">'''scrivimi'''</span>]] 20:10, 18 lug 2008 (CEST)}}
'''Brainfuck''' è un [[linguaggio di programmazione]] per [[computer]], di tipo minimalista, creato da [[Urban Müller]] intorno al [[1993]]. Il linguaggio viene in taluni casi denominato '''Brainf*ck''', '''Brainf***''' o anche soltanto '''BF''' per evitare di offendere la sensibilità altrui.
 
==Struttura del linguaggio==
L'obiettivo di Müller era di creare un semplice linguaggio di programmazione completo per una [[w:macchina di Turing|macchina di Turing]] che potesse essere implementato con il [[w:compilatore|compilatore]] più piccolo possibile. Il linguaggio consiste di otto istruzioni. La versione 2 del compilatore originale, scritta per l'[[w:Amiga|Amiga]], occupa soltanto 240 [[w:byte|byte]]. È stato ispirato dal linguaggio [[w:FALSE|FALSE]], un altro [[w:linguaggio di programmazione esoterico|linguaggio di programmazione esoterico]], il cui compilatore occupava 1024 byte.
 
Come il nome suggerisce, i programmi scritti in Brainfuck tendono ad essere difficili da comprendere. Tuttavia Brainfuck è un linguaggio Turing-completo, e si può utilizzare per implementare qualunque algoritmo eseguibile con una [[w:macchina di Turing|macchina di Turing]]. Trascurando l'enorme difficoltà nella programmazione di certi algoritmi con Brainfuck, è certamente possibile scrivere il relativo codice.
 
Il linguaggio è basato su un modello molto semplice consistente in un array di byte inizializzato a zero, un [[w:puntatore (programmazione)|puntatore]] all'array (inizializzato per puntare al primo byte dell'array) e due [[w:Stream (informatica)|stream]] di byte per l'input e l'output.
 
===Istruzioni===
Line 39 ⟶ 38:
(Una terza versione equivalente, scarsamente considerata, è: <code>[</code> significa "salta in avanti al corrispondente <code>]</code>", e <code>]</code> significa "salta indietro all'istruzione che segue il corrispondente <code>[</code> se il byte al puntatore non è zero".)
 
I sorgenti per Brainfuck possono essere trascodificati innel [[C (linguaggio)| C]] utilizzando la seguente tabella di sostituzione, assumendo che <code>ptr</code> sia di tipo <code>unsigned char*</code>:
 
{| style="float: center; text-align: left" |
Line 67 ⟶ 66:
== Esempi ==
 
=== [[w:Hello world|Hello world]]! ===
 
Il seguente codice mostra "Hello World!" sullo schermo e manda a capo il cursore
Line 89 ⟶ 88:
>.
 
Per mantenere leggibile il listato, viene iniziata una nuova linea dopo ciascun punto, che rappresenta il comando di output. Le lettere ''H'', ''e'', ''l'', ''l'' e ''o'' sono state inserite nel codice esclusivamente come [[w:commento|commenti]]. Il Brainfuck considera tutti i caratteri ad eccezione di +-<>[],. come dei commenti, cosicché non è necessaria una sintassi particolare per indicare un commento.
 
Il loop sulla prima linea imposta il valore iniziale dell'array: <tt>a[1] = 70</tt> (vicino al valore [[ASCII]] per il carattere 'H', 72), <tt>a[2] = 100</tt> (vicino alla 'e', 101), <tt>a[3] = 30</tt> (vicino a ' ', 32) e <tt>a[4] = 10</tt> (''new line'', a capo). Il loop funziona moltiplicando il valore di <tt>a[0]</tt>, <tt>10</tt>, salvando il risultato nelle altre celle. Al termine del loop, il puntatore all'array è zero. <tt>>++</tt> incrementa di uno il puntatore, indicando <tt>a[1]</tt> che è <tt>70</tt>, poi aggiunge due a tale valore, con il risultato di 72 che è il valore per il carattere ASCII della lettera H maiuscola. Il punto al termine della linea indica l'output, causandone la visualizzazione.
Line 184 ⟶ 183:
== Vedere anche ==
Una lista di linguaggi simili:
*[[w:Doublefuck|Doublefuck]], una variante di Brainfuck con due buffer di memoria invece che uno.
*[[w:Brainfork programming language|Brainfork]]
*[[w:PATH programming language|PATH]], un misto di Brainfuck e [[w:Befunge|Befunge]]
*[[w:SNUSP programming language|SNUSP]], simile ma con una chiamata allo stack.
*[[w:L33t programming language|l33t]]
*[[w:L00P programming language|L00P]]
*[[w:Ook!|Ook!]]
*[[w:QUOTE programming language|QUOTE]]
*[[w:Aura programming language|Aura]]
 
==Collegamenti esterni==
*{{en}} [http://4mhz.de/ '''Brainfuck Developer''' - Interprete Brainfuck con debugger integrato (IDE) per Windows]
*{{en}} [http://www.muppetlabs.com/~breadbox/bf/ Brian Raiter, Muppetlabs. '''Brainfuck: An Eight-Instruction Turing-Complete Programming Language (Brainfuck: un linguaggio di programmazione Turing-conforme formato da 8 istruzioni)''']. Questo sito contine un [[w:quine|quine]] per Brainfuck
*{{en}} [http://esoteric.sange.fi/Brainfuck/ Panu Kalliokoski. '''The Brainfuck Archive (Archivio Brainfuck)'''] contiene molti programmi scritti in Brainfuck, [[quine]], e implementazioni
*{{en}} [http://home.arcor.de/partusch/html_en/bfd.html '''Brainfucked''' - Brainfuck Compiler] Compilatore per windows
*{{en}} [http://wuarchive.wustl.edu/pub/aminet/dev/lang/brainfuck-2.lha Version 2 of the original compiler (Versione 2 del compilatore originale)]