Viene il momento nella vita di ogni ingegnere di confrontarsi con un’ardua sfida informatica: imparare a programmare. C’è chi ha imparato Matlab, chi Python, Java, C++ o C per i più coraggiosi. Ci sono però alcuni linguaggi che si discostano dai più classici utilizzati oggi e hanno al loro interno diverse stranezze.
Esiste in internet Esolang: l’enciclopedia dei linguaggi di programmazione esoterici. Per rientrare in questa categoria un linguaggio deve essere minimale, alternativo, strano, più corto possibile, a tema, possibilmente creato per scherzo, difficile da leggere. Oggi vedremo 5 linguaggi che rispecchiano perfettamente questa definizione
1. Velato: un linguaggio per soli musicisti.
Velato utilizza un compilatore in grado di leggere e interpretare i file MIDI trasformandoli in un programma eseguibile. Funzioni e variabili sono definite dall’ordine e dall’intonazione delle note. Il linguaggio e` progettato per garantire flessibilità di composizione: un programma Velato non suonerà come note messe a caso ma avrà una sua armonia. I programmi tendono ad avere i suoni tipici del Jazz. Queste sono le note che descrivono un programma che stampa “Hello world” sul terminal:
2. LOLCODE: un lignuaggio ispirato da un meme
Creato nel 2007 da Adam Lindsay, ricercatore presso la Lancaster University. Il linguaggio e` ispirato al celebre LOLCAT. Tutte le parole sono scritte in maiuscolo ed è un linguaggio altamente leggibile a differenza dei precedenti, non utilizza infatti simboli o operatori se non parentesi e segni di punteggiatura per le frasi. La sua peculiarità sta nei tipi di dato utilizzati che sono ben distanti dai classici Integer, Float, Char. NOOB e` il tipo delle variabili senza alcun valore assegnato. BUKKIT e` l’equivalente di un array. TROOF e` l’equivalente di una variabile booleana e puo avere due valori WIN o FAIL. NUMBR rappresenta un intero mentre NUMBAR viene usato per i numeri decimali. YARN è un tipo che potrebbe essere definito come carattere speciale: le variabili YARN sono delimitate da doppi apici, alcune delle più celebri sono “:)” che permette di andare a capo o “:O” che fa emettere un beep al computer.
3. Brainf***: lavorare con il piu piccolo compilatore possibile
Brainf*** nasce come linguaggio per una macchina di turing che possa essere implementato con il più piccolo compilatore possibile. Lavora su un array di bytes inizialmente posti a 0, un puntatore che punta alla prima cella dell’array e due stream di bytes per l’input e l’output. I comandi disponibili sono unicamente 8:
- >: incrementa il puntatore
- <: decrementa il puntatore
- +: incrementa il byte indirizzato dal puntatore
- –: decrementa il byte indirizzato dal puntatore
- .: stampa il carattere indirizzato dal puntatore
- ,: inizializza la cella puntata al carattere letto
- ]: salta in avanti all’istruzione dopo il corrispondente ] se il byte indirizzato dal puntatore è 0
- [: salta indietro all’istruzione dopo il corrispondente [ se il byte indirizzato dal puntatore non è 0
Il linguaggio e` stato ispirato da FALSE: altro linguaggio esoterico con un compilatore di soli 1024 bytes. Un programma che stampa “hello world” e` una stringa di questo tipo:
4. Intercal: il linguaggio educato
Abbreviazione di “Compiler Language With No Pronounceable Acronym” e` stato creato nel 1972 da Donald R. Woods e James M. Lion. Consiste in una serie di dichiarazioni precedute da un’etichetta e da una frase opzionale che può essere DO, PLEASE e PLEASE DO. In particolare PLEASE e` integrato in due modi: se non viene usato abbastanza spesso viene mostrato un alert che avvisa che il programma non e` abbastanza educato; se viene usato troppo spesso invece l’alert annuncia che il programma e` troppo educato.
5. Whitespace: un linguaggio di soli spazi
Whitespace e` stato creato nel 2003 da Edwin Brady e Chris Morris. Utilizza solamente spazi e tab ogni altro carattere e` ignorato. Proprio per questa caratteristica un programma in whitespace può essere contenuto in un programma scritto in qualsiasi altro linguaggio. Le diverse combinazioni di spazi, tab e frecce sinistre definiscono comandi e tipi di dato. Per esempio per stampare il primo carattere contenuto nello stack si usa un doppio spazio, per la moltiplicazione un tab e uno spazio ecc…