Timeline
Chat
Prospettiva

Malbolge

linguaggio di programmazione Da Wikipedia, l'enciclopedia libera

Remove ads

Malbolge è un linguaggio di programmazione esoterico, creato da Ben Olmstead nel 1998, con lo scopo che fosse il codice più difficile possibile da utilizzare. Andrew Cooke riuscì a scrivere il primo "Hello, world!" solo con l'aiuto di un programma in Lisp.

Etimologia

Il nome Malbolge deriva dal nome dato all'ottavo cerchio dell'Inferno nella Divina Commedia di Dante Alighieri, dove si trovano i fraudolenti. Il nome modificato Malbolge fu poi anche utilizzato dai creatori del gioco di ruolo Dungeons and Dragons per il sesto inferno.

Caratteristiche del linguaggio

Riepilogo
Prospettiva

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.

Istruzioni

L'indirizzo dell'istruzione da eseguire è contenuto nel registro C; se l'istruzione non è nell'intervallo 33-126, il programma termina. Altrimenti, per determinare la vera istruzione da eseguire, il valore puntato da C viene aggiunto allo stesso C, e il risultato è diviso per 94; il resto di questa divisione viene utilizzato per decidere l'operazione da eseguire:

Ulteriori informazioni (C+[C])%94, Descrizione ...

Se il risultato non è nessuno di quelli elencati sopra, viene eseguita un'operazione nulla (NOP). In ogni caso nessuna NOP diversa da 68 viene accettata dal compilatore quando presente nel codice sorgente.

La crazy operation (operazione "pazza") opera su coppie di trits corrispondenti, considerando ciascun trit contenuto nelle due word sulle quali deve essere eseguita, secondo la seguente tabella:

A
012
B 0100
1102
2221

Dopo l'esecuzione di ogni istruzione, se il valore puntato da C è compreso tra 33 e 126 inclusi, è modificato secondo la seguente tabella:

!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNO
5z]&gqtyfr$(we4{WP)H-Zn,[%\3dL+Q;>U!pJS72FhOA1C

PQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
B6v^=I_0/8|jsb9m<.TVac`uY*MK'X~xDl}REokN:#?G"i@

(per esempio, ! diventa 5, " diventa z e così via)

Dopo di ciò, sia C che D sono incrementati con modulo 310 (59049) e il ciclo viene ripetuto.

Remove ads

Programmi di esempio

Riepilogo
Prospettiva

Vi sono pochissimi programmi scritti fino ad ora in Malbolge, data la difficoltà di creare risultati accettabili.

Hello, World!

Questo fu il primo programma "Hello, World!" scritto in Malbolge. In realtà il suo output non è perfetto, in quanto non tiene conto delle maiuscole né della punteggiatura (stampa "HEllO WORld"); un programma in grado di scrivere "Hello, World!" correttamente è molto più difficile da creare.

(=<`$9]7<5YXz7wT.3,+O/o'K%$H"'~D|#z@b=`{^Lx8%$Xmrkpohm-kNi;gsedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543s+O<oLm

Hello, World! corretto

Questo programma riesce a stampare "Hello, world!" con i caratteri e la punteggiatura corretti.

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

Programma ECHO

Questo programma legge una stringa in ingresso dallo standard input e la manda allo standard output:

(aBA@?>=<;:9876543210/.-,JH)('&%$#"!~}|{zy\J6utsrq
ponmlkjihgJ%dcba`_^]\[ZYXWVUTSRQPONMLKJIHGF('C%$$^
K~<;4987654321a/.-,\*)
j
!~%|{zya}|{zyxwvutsrqSonmlO
jLhg`edcba`_^]\[ZYXWV8TSRQ4
ONM/KJIBGFE>CBA@?>=<;{9876w
43210/.-m+*)('&%$#"!~}|{zy\
wvunslqponmlkjihgfedcEa`_^A
\>ZYXWPUTSRQPONMLKJIH*FEDC&
A@?>=<;:9876543210/.-m+*)(i
&%$#"!~}|{zyxwvutsrqpRnmlkN
ihgfedcba`_^]\[ZYXWVU7SRQP3
NMLKJIHGFEDCBA@?>=<;:z8765v
3210/.-,+*)('&%$#"!~}_{zyx[
vutsrqjonmlejihgfedcba`_^]@
[ZYXWVUTSRo

Note

Altri progetti

Collegamenti esterni

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads