
Se pensate davvero che uno dei linguaggi di programmazione, come ad esempio l'Assembly (quindi si sta parlando di linguaggi di basso livello, ossia più vicini al linguaggio macchina), possano risultare per voi frustranti, dovrete ricredervi.
Infatti esistono linguaggi di programmazioni talmente complessi e frustranti da mettervi le mani nei capelli e volendo cercare l'indirizzo di qualcuno per sapere chi è il pazzo che abbia potuto mai fare una cosa del genere, in cui essi vengono creati e progettati senza una chiara utilità nel mondo in cui si trovano, spesso vengono creati per diletto o per sfida (dell'essere umano). Altro che Assembly!
Cominciamo con...
- Brainfuck -
Cominciamo davvero bene, con un linguaggio di programmazione chiamato simpaticamente e in maniera esplicita Brainfuck, che letteralmente significa fottere il cervello (nel vero senso della parola). È stato inventato da Urban Muller nel 1993, con l’intento di creare un linguaggio per una macchina da Turing con a bordo uno tra i più piccoli compilatori mai progettati.
Attualmente è uno dei linguaggi più popolari (e forse più discussi) nel panorama degli esoterici nel campo della programmazione. Esso lavora su un array di byte inizializzato a 0, con un puntatore che punta al primo byte e due stream di byte per I/O.
Alla fine questo linguaggio prevedere solo 8 comandi identificabili come segni d’operazione. Nessun main(), nessuna funzione, niente di tutto ciò. Semplicemente < > + - . , [ ].
Vediamo se riuscirete a programmare con solo 8 comandi, ma questo è il meno peggio, passiamo oltre piuttosto...
Vediamo se riuscirete a programmare con solo 8 comandi, ma questo è il meno peggio, passiamo oltre piuttosto...
- COW -
Se Brainfuck vi sembra già difficile di suo, con questo linguaggio è difficile al doppio.
Anch'esso è basato su Turing, stavolta però ogni istruzione sarà completamente rimpiazzato da dei semplici e banali versi della mucca, moo!
Anch'esso è basato su Turing, stavolta però ogni istruzione sarà completamente rimpiazzato da dei semplici e banali versi della mucca, moo!
Ideato nel 2003 da due geni del male (che già mi verrebbe voglia di prendere a cazzotti), COW è un linguaggio in cui tutte le istruzioni sono della varianti del termine “moo”. Può essere ad esempio “moO” quando si vuole incrementare il puntatore oppure “mOo” quando lo si vuole decrementare.
- INTERCAL -
Uscendo dalla parte di Turing, si passa a INTERCAL, il primo esempio di linguaggio esoterico, scritto da Lyon e Woods nel 1972, come parodia dei più famosi Fortran, COBOL e Assembly.
Il nome originario fu Compiler Language With No Pronounceable Acronym, che ovviamente fu abbreviato in INTERCAL. Dov’è l’ovvietà? Non c’è, ed è per questa ragione che amerete questo linguaggio di programmazione.
Com’è giusto che sia, un linguaggio di programmazione viene appositamente documentato. Ma se il manuale d’istruzioni altro non fosse che una presa in giro per il lettore?
Detta così non sembra poi chissà quanto grave ma per comprendere al meglio il tutto immaginate di sfogliare le prime pagine che recitano: “Attenzione! In nessun caso confondere la mesh con l’operatore interleave, ad eccezione di circostanze confuse”. Ancora oggi la frase sembra non avere alcun senso.
Ma il bello arriva ora: INTERCAL vuole che tu sia educato, altrimenti si rifiuta di interpretare il codice. Il problema è che, per comprendere il bon ton del linguaggio, bisogna fare riferimento alla documentazione.
Per essere educati si usa il modificatore PLEASE: se non viene usato frequentemente, l’interprete di INTERCAL ti considererà un cafone. Al contrario, se viene usato troppo frequentemente, ti considererà un leccapiedi.
Divertente no?
Divertente no?
- Whitespace -
Rilasciato il 1 Aprile 2003 (peccato che questo pesce d'aprile non sia poi alla fine uno scherzo), il Whitespace è il primo linguaggio di programmazione letteralmente inesistente.
Senza gli appositi strumenti infatti, il Whitespace non è visibile ad occhio nudo, in quanto lo si programma con: tabulazioni, spazi e a capo.
Ogni altro carattere viene totalmente ignorato, il che crea una conseguenza davvero bizzarra: il codice sorgente di un linguaggio scritto in Whitespace può essere offuscato all’interno di un qualsiasi altro programma scritto in un qualsiasi altro linguaggio!
- Chef -
E chi l'ha mai detto che uno chef di tutto rispetto non possa essere anche un programmatore?
Beh, allora bisogna sfatare questo mito, perché abbiamo qui un linguaggio di programmazione fatto apposta per chi di cucina se ne intende:
Ed ecco qui infatti la più squisita spiegazione di come preparare una ricetta fatta in casa:
Beh, allora bisogna sfatare questo mito, perché abbiamo qui un linguaggio di programmazione fatto apposta per chi di cucina se ne intende:
Ed ecco qui infatti la più squisita spiegazione di come preparare una ricetta fatta in casa:
* I programmi di ricetta non devono solo essere sintatticamente corretti ma devono essere semplici da preparare e deliziosi
* Le ricette devono essere preparabili con diversi budgeds;
* Sebbene si utilizzino misure del sistema metrico, si può usare anche come unità di misura una tazzina oppure un cucchiaio;
Per chi invece è abituato a variabili, cicli for, istruzioni, funzioni e tutto il resto, può sembrare davvero una follia. Cioè, avete mai inserito un valore in uno stack allo stesso modo in cui preparate la torta per un 18°esimo compleanno? Roba da mettersi la propria faccia sulla torta!
- Monicelli -
Non poteva non mancare un linguaggio di programmazione completamente italiana.
E giusto per farvi capire di quanto sia italianianamente assurda, questo linguaggio passa attraverso una supercazzola, una frase priva di alcun senso logico della nota trilogia “Amici Miei“ (se non l'avete visto, consiglio subito la visione!).
Questo linguaggio di programmazione è fatto proprio apposta per chi è fanatico estremo di "Amici Miei" e delle sue supercazzole, di sicuramente diventerà anche un programmatore alla supercazzola!
E giusto per farvi capire di quanto sia italianianamente assurda, questo linguaggio passa attraverso una supercazzola, una frase priva di alcun senso logico della nota trilogia “Amici Miei“ (se non l'avete visto, consiglio subito la visione!).
Questo linguaggio di programmazione è fatto proprio apposta per chi è fanatico estremo di "Amici Miei" e delle sue supercazzole, di sicuramente diventerà anche un programmatore alla supercazzola!
- Shakespeare -
Uscendo dalle supercazzole, ora si passerà anche ad un'altra parte assurda di cui chi abbia ideato questo linguaggio di programmazione debba aver fatto uso di droghe pesanti mentre si faceva una letta no-stop di tutti i racconti e drammi shakespeariani.
Pensate che io stia dicendo balle? Allora sentite come funziona...
Si parte con una lista di attori, solitamente con nomi tipo “Romeo” o “Giulietta”. Questi personaggi, che dichiarano una serie di stack, entrano in dialogo l’uno con l’altro, manipolandosi reciprocamente, inserendoli o estraendoli o compiendo operazioni di I/O, mentre le istruzioni condizionali sono le domande che i personaggi si pongono.
A meno che non abbiate finita la scuola classica, potete avere la possibilità di usare questa linguaggio di programmazione creato da un pazzo shakespeariano.
A meno che non abbiate finita la scuola classica, potete avere la possibilità di usare questa linguaggio di programmazione creato da un pazzo shakespeariano.
E per finire arriviamo alla vetta più alta come il linguaggio di programmazione più frustrante di sempre. Non ci credete? Sentite qua allora...
Malbolge deriva dal nome dell’ottavo cerchio dell’Inferno della Divina Commedia di Dante (quindi si parla di Malebolge), motivo per cui è stato scelto da Cooke nel 1998 per battezzare il linguaggio più difficile mai concepito.
Malbolge deriva dal nome dell’ottavo cerchio dell’Inferno della Divina Commedia di Dante (quindi si parla di Malebolge), motivo per cui è stato scelto da Cooke nel 1998 per battezzare il linguaggio più difficile mai concepito.
E' talmente complesso da capire che non potrei riuscire a riassumere in parole, quindi devo per forza ricorrere all'aiuto di Wikipedia:
Malbolge è stato costruito per eseguire i programmi su una macchina virtuale basata su cifre ternarie (anche dette trit). Ogni dato (word) è formato da 10 trit, con un intervallo di valori da 0 a 2222222222 in base 3, cioè 59048 in formato decimale. Anche ciascun indirizzo di memoria occupa una word. I dati e il codice del programma sono inseriti nella stessa memoria. Il programma è posto nella memoria all’avvio a partire dalla locazione 0; ogni spazio bianco è ignorato, così come ogni eventuale ritorno a capo. Le locazioni di memoria restanti vengono inizializzate applicando il risultato dell’istruzione “pazza”, come spiegato sotto, all’ultima e alla penultima word prima della cella da inizializzare. Ci sono tre registri, ognuno dei quali di dimensione 1 word: il registro C, detto code register (registro del codice), punta all’istruzione che deve essere eseguita; il registro D, data register, è utilizzato per manipolare i dati; il registro A è il registro accumulatore e viene usato da molte istruzioni come supporto per la manipolazione dei dati.
Questo linguaggio di programmazione è talmente complesso che il primo Hello World funzionante è arrivato due anni dopo il suo rilascio dal suo stesso creatore. Cooke si dovette servire di un programma scritto appositamente in LISP per raggiungere tale scopo.
Spero che questo articolo non vi abbia fatto avere giramenti di testa (come mi è successo mentre stavo scrivendo) di tutti questi linguaggi strani e davvero anormali e che spero che a nessuno venga in mente di abituarsi a questo genere di linguaggi, altrimenti ci sarà una via facile per il manicomio (forse sto esagerando)! xD
Comunque l'articolo finisce qui e spero che vi sia piaciuto, lasciate magari qualche un commento e ci rivediamo al prossimo post e un inchino dal vostro Stegon! :)