Linguaggio di programmazione esotericoUn linguaggio di programmazione esoterico è una tipologia di linguaggi di programmazione particolarmente complessi e volutamente meno chiari possibile. Questi linguaggi, popolari fra gli hacker e gli utenti più che abili, non hanno una vera utilità nel mondo reale, ma sono generalmente concepiti per mettere alla prova i limiti della programmazione su computer, come proof of concept per dimostrare una teoria o per semplice divertimento. Alcuni, invece, sono concepiti come esercizio per comprendere meglio il funzionamento di un calcolatore. StoriaIl primo esempio di linguaggio esoterico è stato INTERCAL, scritto nel 1972 da James M. Lyon e Don Woods, col tentativo di creare un linguaggio totalmente differente da quelli esistenti all'epoca, parodiando elementi di Fortran, COBOL, e assembly.[1] Venti anni più tardi Wouter van Oortmerssen ha creato FALSE, un linguaggio basato sul concetto di macchina a stack dotato di una sintassi confusa, illeggibile ed estremamente concisa: il compilatore occupa solamente 1024 byte. Questo ha in seguito ispirato Urban Müller a creare un linguaggio ancora più conciso, il Brainfuck, composto da soli otto caratteri riconosciuti.[2] Insieme al Befunge creato da Chris Pressey, sono i due linguaggi esoterici più noti. Termini del linguaggio di programmazione esotericoTuring TarpitÈ un linguaggio di programmazione Turing-completo il cui numero di comandi, operatori o oggetti è molto piccolo. Stateful encodingIn questo metodo di programmazione, le istruzioni che il linguaggio di programmazione mette a disposizione sono in un elenco predefinito, e per eseguire un comando sono necessari due passaggi:
L'elenco delle operazioni può essere sia statico - come in reMorse[3] e THRAT[4] o dinamico, come in reMorse4ever. Ecco un esempio sulla base di reMorse o THRAT: Select Next Operation in list Perform Operation FungeUna funge è un programma le cui istruzioni sono disposte a formare una figura che si sviluppa bidimensionalmente, e la sequenza delle istruzioni è stabilita dalla direzione di movimento di un "puntatore" su tale figura. Il programmatore ha a disposizione, oltre che istruzioni sui dati, anche comandi per modificare posizione e direzione di movimento del puntatore. Non determinismoIn un linguaggio non deterministico, l'esecuzione delle istruzioni non è garantita con certezza, ma solo con una certa probabilità. In linguaggi come questi, anche tentare di ottenere un risultato è un compito arduo, dato che non si ha la certezza che un'istruzione sia eseguita o meno, e quindi non è possibile prevederne il funzionamento. EsempiDi seguito alcuni esempi del classico programma hello world o di singole istruzioni scritte con linguaggi esoterici: HAI CAN HAS STDIO? VISIBLE "HAI WORLD!" KTHXBYE
"dlroW olleH">:v ^,_@
++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.
Put cinnamon into 2nd mixing bowl
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
99 9[1-$][\$@$@$@$@\/*=[1-$$[%\1-$@]?0=[\$.' ,\]?]?]#
Act I: Hamlet's insults and flattery.
(=<`:9876Z4321UT.-Q+*)M'&%$H"!~}|Bzy?=|{z]KwZY44Eq0/{mlk** hKs_dG5[m_BA{?-Y;;Vb'rR5431M}/.zHGwEDCBA@98\6543W10/.R,+O< Note
Voci correlateAltri progetti
Collegamenti esterni
|
Portal di Ensiklopedia Dunia