domenica 18 marzo 2018

I Linguaggi Di Programmazione Più Criptici e Complessi? Quelli Esoterici

Quali sono i linguaggi di programmazione più complessi? Java? C? C++? Visual Basic? Perl?
Qualcun'altro ovviamente citerà quelli Old School tipo Fortran, Pascal e Cobol.
In realtà il linguaggio di programmazione più complesso è ovviamente quello "macchina".
Esso è l'unico che non fa nessuna concessione all'essere umano che scrive il codice.
E infatti, i pochi che devono produrre codice di quel tipo lo codificano nel linguaggio assembly, che è biunivocamente corrispondente al linguaggio macchina, ma che è ben più maneggevole (potendo assegnare alle istruzioni determinati identificativi).
Discorso a parte invece, meritano i "linguaggi di programmazione esoterici" ideati per testare i limiti dei linguaggi di programmazione, per capire come funzionano i calcolatori e le macchine virtuali ed anche per essere criptici (per scelta) o divertenti.
Si tratta di linguaggi particolarmente complessi e volutamente il meno chiari possibile.
Noi vedremo i principali, in realtà ce ne sono molti altri: LolCat, Befunge, Chief, Shakespeare e se vogliamo HQ9+ e HQ9++.


MALBOLGE
Questo linguaggio di programmazione venne ideato nel 1998, ironia della sorte, per essere il più complesso possibile.
L'ideatore riuscì a creare un programma funzionante (in realtà un semplice "hello world") 2 anni dopo il suo rilascio.

Hello World:
('&%:9]!~}|z2Vxwv-,POqponl$Hjig%eB@@>}=<M:9wv6WsU2T|nm-,jcL(I&%$#"
`CB]V?Tx<uVtT`Rpo3NlF.Jh++FdbCBA@?]!~|4XzyTT43Qsqq(Lnmkj"Fhg${z@>

Tra tante stranezze, la cosa più usuale è che oltre ad essere "case sensitive" ignora anche gli spazi bianchi.
Venne ideato per eseguire programmi su macchine virtuali.



FALSE
Inventato nel 1993 deve il suo nome al carattere booleano.
Basato sugli stack è dotato di comandi a singolo carattere, come si può facilmente capire la sintassi è stata creata per rendere il codice difficile da interpretare, anzi direi illeggibile.

Scrive i numeri primi sino a 100:
99 9[1-$][\\$@$@$@$@$@\\/*=[1-$$[%\\1-$@]?0=[\\\$.\' ,\\\']?]?]#



BRAINFUCK
Inventato da Urban Muller nel 1993, con l’obbiettivo di creare un linguaggio per una macchina di Turing che potesse essere implementato con il compilatore più piccolo possibile.
Brainfuck lavora su un array di byte inizializzato a 0 con un puntatore che inizialmente punta al primo byte, e due stream di byte per I/O.
Esistono soltanto 8 comandi in questo linguaggio.

Hello World:
++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.



COW
Tutte le istruzioni di questo linguaggio di programmazione sono delle varianti di “moo” (del resto "cow" vuol dire mucca).
Basato anch’esso sulla macchina di Turing, possiede un set di 11 istruzioni, ovviamente case-sensitive, e mette a disposizione un registro temporaneo che può contenere un intero.
Come condizione iniziale vi è un puntatore che punta alla prima cella ed in ogni cella vi è 0.
Qualsiasi altro simbolo che non è un’istruzione viene ignorato. Quindi possono essere utilizzati o meno spazi, a capo o tabulazioni, il che rende il codice facilmente commentabile a patto che il commento non contenga un’istruzione.

Le istruzioni sono:
moo: comando connesso al comando MOO. Quando viene incontrata questa istruzione durante la normale esecuzione, l’interprete ricerca il comando MOO senza eseguire le istruzioni che incontra, ed esegue l’istruzione successiva al MOO trovato
moO: incrementa il puntatore
mOo: decrementa il puntatore
mOO: Esegue l’istruzione con codice dell’istruzione uguale al contenuto della cella corrente. Se la cella contiene il valore 3 è non valido, perché si incorrerebbe in un ciclo infinito
Moo: Se il valore della cella corrente è 0, allora legge un singolo carattere ASCII dalla tastiera (più precisamente standard input) e lo salva nella cella corrente. Se invece la cella non contiene 0, allora stampa a video (standard output) il carattere ASCII corrispondente
MoO: incrementa il valore della cella di 1
MOo: decrementa il valore della cella di 1
MOO: Se il contenuto della cella è 0, allora torna alla chiamata effettuata con il comando moo. Se invece il valore della cella non è 0, allora continua con l’istruzione successiva
OOO: imposta il valore della cella a 0
MMM: Se non c’è nessun valore nel registro, allora copia al suo interno il valore corrente della cella. Se invece c’è un valore, incolla tale valore nella cella corrente e svuota il registro
OOM: Stampa a video (più precisamente nello standard output) il valore della cella come numero intero
oom: Legge un numero intero da tastiera (più precisamente dallo standard input) e lo salva nella cella corrente
Linguaggi di programmazione esoterici: i più difficili da imparare

Sequenza di Fibonacci:
MoO moO MoO mOo MOO OOM MMM moO moO MMM mOo mOo moO MMM mOo MMM moO moO MOO MOo mOo MoO moO moo mOo mOo moo



INTERCAL
The Compiler Language With No Pronounceable Acronym, inventato nel 1972.
INTERCAL ha caratteristiche che lo rendono davvero fastidioso da usare: usa statement come “READ OUT”, “IGNORE”, “FORGET” e modificatori come “PLEASE”.
PLEASE è integrato in due modi: se il programmatore non lo utilizza frequentemente, il programma è considerato non sufficientemente educato ed un alert viene mostrato, in alternativa viene mostrato un alert anche quando questo viene usato troppo frequentemente perché il programmatore risulta troppo educato.

Hello World:
DO ,1 <- #13 PLEASE DO ,1 SUB #1 <- #238 DO ,1 SUB #2 <- #108 DO ,1 SUB #3 <- #112 DO ,1 SUB #4 <- #0 DO ,1 SUB #5 <- #64 DO ,1 SUB #6 <- #194 DO ,1 SUB #7 <- #48 PLEASE DO ,1 SUB #8 <- #22 DO ,1 SUB #9 <- #248 DO ,1 SUB #10 <- #168 DO ,1 SUB #11 <- #24 DO ,1 SUB #12 <- #16 DO ,1 SUB #13 <- #162 PLEASE READ OUT ,1 PLEASE GIVE UP



WHITESPACE
Rilasciato l’1 Aprile 2003 in questo linguaggio hanno senso solo tabulazioni, spazi ed a capo.
Cioè ogni istruzione ha determinati spazi da lasciare, tab o andate a capo.
L’interprete ignora totalmente gli altri caratteri.
Una conseguenza interessante è che un programma Whitespace può essere facilmente contenuto in un qualsiasi altro programma scritto in un altro linguaggio.

Hello World (i caratteri spazio sono stati colorati, altrimenti sarebbero risultati invisibili):

Nessun commento:

Posta un commento