I Linguaggi esoterici e L'offuscamento in Nad Nuova Accademia del Design Verona

I LINGUAGGI ESOTERICI E L’OFFUSCAMENTO

In questa rubrica d’innovazione parleremo di un argomento molto particolare, ovvero i linguaggi esoterici.

Faremo una panoramica di questi particolari linguaggi, andando poi nel dettaglio di come vengono utilizzati e perché sono importanti, nonostante non siano molto famosi (ma sicuramente affascinanti).

Una lingua oscura

L’uomo è sempre stato affascinato da tutto ciò che non è in grado di spiegarsi, oltre al fatto che ha un’ottima predisposizione a darsi delle risposte occulte a strani fenomeni.

Sono nate quindi nel corso della nostra credenza leggende, miti, fantasie che hanno affascinato i popoli di ogni era, fino anche a creare una sorta di paura e fascino per l’occulto.

Questi misteri, nati per fini non molto chiari, avevano spesso uno scopo ben preciso: nascondere qualcosa.

Qualcosa di incomprensibile a molti, a volte pauroso o misterioso, risulta essere uno strumento molto potente per nascondere informazioni e condividerle solo con chi è in grado di comprenderle.

Oppure semplicemente per fare uno scherzo in grande stile.

Nel mondo dell’informatica ovviamente si è tramandata questa tradizione, creando quelli che si chiamano Linguaggi Esoterici (o esolang), ovvero linguaggi di programmazione volutamente “difficili”, incomprensibili. Team di ingegneri e designer di linguaggi si sono organizzati per creare dei linguaggi volutamente “mistici”, a volte incomprensibili, per vari motivi che poi vedremo.

La storia

Il primo linguaggio esoterico è stato INTERCAL, progettato nel 1972 da Don Woods e James M. Lyon, con l’intenzione di creare un linguaggio completamente diverso dai linguaggi di programmazione allora noti.

Questo linguaggio prendeva in giro anche elementi di linguaggi di programmazione affermati dell’epoca, come Fortran, COBOL e linguaggio assembly. Ovviamente il manuale del linguaggio era tramandato su copie cartacee per pochi adepti.

Nel 1993, subito dopo la rinascita dei linguaggi di programmazione come il C, Wouter van Oortmerssen creò FALSE, un piccolo linguaggio di programmazione orientato allo stack, con una sintassi progettata per rendere il codice intrinsecamente offuscato, confuso e illeggibile. Ha anche un compilatore di soli 1024 byte.

Questo ha ispirato Urban Müller a creare un linguaggio ancora più piccolo, l’ormai “famoso” e temuto Brainfuck, che consiste di soli otto caratteri riconosciuti.

Insieme al Befunge di Chris Pressey (come FALSE, ma con un puntatore di istruzioni bidimensionale), brainfuck è ora uno dei linguaggi di programmazione esoterici meglio supportati.

Un po’ di esempi

Facciamo un po’ di esempi per comprendere, da non addetti ai lavori, come mai questi linguaggi risultano incomprensibili.

Prendiamo come esempio di linguaggio “consuetudinario” il Python.

Scriviamo in Python un programma che scrive “Hello World!”:

testo in linguaggio Python

 

 

Con 1 riga di codice si fa il programma, ed è abbastanza comprensibile.

Scriviamo la stessa cosa in Brainfuck:

testo in linguaggio Brainfuck

 

 

 

Siamo d’accordo che, se non fosse noto, sarebbero una serie di caratteri a caso, senza senso.

Scriviamo la stessa cosa in LOLCODE:

testo in linguaggio esoterico Lolcode

 

 

 

 

 

Questo risulta quasi comprensibile, un po’ slang, un po’ TikToker diciamo, però non assomiglia ad un linguaggio di programmazione. Notare che “HAI” indica “Hi”, per indicare l’inizio del programma (l’educazione prima di tutto) e “KTHXBYE” indica “OK Thanks bye”, per indicare la fine del programma (anche qui, quando si va via, è buona educazione salutare).

Esistono anche linguaggi “visuali” esoterici, come ad esempio Piet, che consiste nel disegnare arte astratta per rappresentare del codice (le linee e i colori indicano istruzioni macchina).

Questo programma scrive Hello World:

I Linguaggi esoterici e L'offuscamento Piet, linguaggi visuali esoterici in Nad Nuova Accademia del Design

 

Per i più estremi, esiste anche il linguaggio Whitespace, che consiste nell’utilizzare combinazioni di spazi, tab e “a capo” per scrivere programmi. Purtroppo in questo caso, non sarebbe visibile un esempio su un blog online…

Infine, noi italiani non siamo da meno: siamo padri del linguaggio Monicelli, in onore del noto regista del film “Amici Miei”, un caposaldo della commedia italiana.

Il linguaggio consiste nel comporre un programma come se fosse una nota “supercazzola” del film, complicandola a piacere con istruzioni ben definite.

Di seguito un programma che scrive “Hello World”:

testo in linguaggio esoterico Monicelli

So che può sembrare uno scherzo, ma è tutto vero. Il progetto per intero lo si può trovare qui:

https://github.com/esseks/monicelli

Perché i linguaggi esoterici

I linguaggi esoterici hanno un significato ben più profondo, nella maggior parte dei casi, al semplice scherzo o studio fine a se stesso.

Innanzitutto sono dei Turing-tarpit, ovvero dei linguaggi Turing-completi (cioè che possono descrivere qualsiasi problema computabile) ma sono praticamente inutilizzabili (a livello industriale).

Anche se quindi intrinsecamente sono inutilizzabili ma potenti allo stesso modo rispetto agli altri linguaggi di programmazione, danno degli ottimi spunti di riflessione su quello che si identifica come “zucchero sintattico” degli altri linguaggi, ovvero tutte le sovrastrutture che semplificano inutilmente la programmazione.

Di fatto, i programmi derivanti dai linguaggi esoterici sono altamente performanti e piccoli.

Questi linguaggi poi non producono programmi Quine, ovvero programmi che producono una copia in linguaggio macchina delle istruzioni del codice sorgente. Quindi è molto difficile (o impossibile) fare reverse-engineering del codice partendo dal programma compilato.

Per la protezione della proprietà del codice e per evitare attacchi hacker, questo è un ottimo parametro da considerare, tanto che alcuni tool che fanno offuscamento di codice fanno uso di meta-costrutti passando da linguaggi esoterici.

Il concetto di offuscamento, cioè di nascondere il vero significato di un messaggio, ovviamente non è esclusivo dei linguaggi di programmazione esoterici o addirittura della programmazione in generale, ma ha una grande rilevanza in molti linguaggi di programmazione esoterici.

Soprattutto se si intende nel senso generale più ampio di fuorviare o confondere il destinatario. Non stai nascondendo il messaggio perché il messaggio stesso è importante, ma perché la forma nascosta è, di per sé, l’obiettivo.

Un modo tipico per ottenere ciò è ridurre al minimo il numero di simboli del linguaggio, ma si può anche camuffare un linguaggio di programmazione in quello che sembra un normale testo o un’immagine.

I Linguaggi esoterici e L'offuscamento, il team e i linguaggi mistici in Nad Nuova Accademia del Design

Nel significato più ampio di fuorviare o confondere il pubblico, anche il non-determinismo può essere utilizzato per raggiungere lo stesso obiettivo.

Un linguaggio non deterministico è quello per il quale, dato lo stato corrente di un programma, non è sempre possibile prevedere lo stato successivo.

Il concetto ha un certo uso nei normali linguaggi di programmazione, essenzialmente a causa di condizioni imprevedibili in fase di esecuzione. Ma è portato all’estremo da alcuni linguaggi di programmazione esoterici, randomizzando le variabili o addirittura randomizzando le istruzioni stesse.

Quindi, i linguaggi esoterici hanno un significato molto profondo, ovvero nascondere e proteggere. E tu, sei pronto per comprendere il potere di questi linguaggi nella Innovation Design School?

Grazie a Enrico Giordano, coordinatore della Innovation e della Visual Design School, ingegnere informatico.

Ing. Enrico Giordano coordinatore della Innovation Design School

Zeen is a next generation WordPress theme. It’s powerful, beautifully designed and comes with everything you need to engage your visitors and increase conversions.

Altre storie
Come diventare Garden designer