Zėŋōfōbìå

23 marzo 2009

Lingue esoteriche

Filed under: informatica, Linguaggi — Zeno @ 14:45

Mi affascinano i linguaggi di programmazione che si discostano dal mainstream. In particolare trovo interessanti e divertenti i linguaggi (Turing completi) che nascono per scopi poco seri. Questi linguaggi prendono il nome di linguaggi esoterici.

Tra i più noti c’è Brainfuck che dispone di soli 8 simboli:

brainfuck command C equivalent
> ++ptr;
< --ptr;
+ ++*ptr;
- --*ptr;
. putchar(*ptr);
, *ptr=getchar();
[ while (*ptr) {
] }

Spostamento dei puntatori, variazione del dato, IO e cicli. Questo è tutto ciò che è necessario per avere un linguaggio espressivo quanto basta. Formalmente tutti i linguaggi Turing completi hanno lo stesso grado di espressività, nel senso che risolvono esattamente la stessa classe di problemi.

Uno dei linguaggi più interessanti che ho visto, in questa categoria, è Befunge. Un programma Befunge consiste di uno stache e di un piano bidimensionle a caselle (in realtà è una superficie toroidale) ognuna delle quali può contenere un simbolo. I simboli permettono di operare sullo stack edi modificare il flusso di lettura del codice, per cui è possibile cominciare da sinistra verso destra (>) , applicare un segno di cambio direzione e indirizzare la lettura verso il basso (v) e poi verso sinistra.
Un ciclo viene quindi rappresentato graficamente.

Esempio di ciclo infinito:

>v
^<

Ecco un “Hello World”

                 v
>v"Hello world!"0<
,:
^_25*,@

Comincia con un a serie di spazi e un ‘v’, che fa un cambio di direzione verso il basso, e un’altro da destra a sinistra ‘<‘.
Il comando ‘0’ mette nello stack i caratteri che seguono, che sono quelli che compongono la stringa da stampare. Si incontra un ‘v’ che muove verso il ‘:’ che duplica il valore dello stack, che verrà digerito dal comando sottostante: il ‘_’.
Questo rappresenta il “if direzionale”: vale come ” se uguale a 0.

In pratica, in questo caso, ci dice se la stringa è terminata. Se non è terminata si muove a sinistra e poi in alto, verso il carattere ‘,’ che stampa il carattere. Stampata tutta la stringa, come detto qui sopra, il carattere _ muove verso destra: 2*5 è il carattere di ritorno a capo, e @ è il carattere di fine programma.

Semplice, no?

Annunci

1 commento »

  1. Troppo assurdi! Il primo lo conoscevo il secondo no (e il mio cervello stava meglio prima LOL). :D

    E io che mi bullavo di conoscere lo “The Shakespeare Programming Language

    Ciau! ^^

    Commento di jp — 23 marzo 2009 @ 15:58


RSS feed for comments on this post. TrackBack URI

Rispondi

Effettua il login con uno di questi metodi per inviare il tuo commento:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

Crea un sito o un blog gratuitamente presso WordPress.com.

%d blogger hanno fatto clic su Mi Piace per questo: