Sunday, April 25, 2010

Pippo e le metavariabili

Qualsiasi programmatore si scontra, neanche troppo tardi, con la necessità di spiegare qualche algoritmo a qualche amico.
Se eccettuiamo casi di alto livello (come algoritmi sui grafi, o sui flussi, o di programmazione dinamica), il metodo migliore è quasi sempre partire dal codice.

Ed immediatamente, ecco che ci si imbatte in qualche variabile d'appoggio, di cui capiamo perfettamente il senso, ma a cui non sappiamo che nome dare...
Ed ecco quindi che, qualsiasi programmatore, ricorre agli stra abusati pippo, pluto, ciao, mamma, o che dir si voglia...



Queste variabili sono chiamate variabili metasintattiche. Una variabile metasintattica è un nome usato per indicare un generico elemento all'interno di una determinata categoria; l'uso è analogo a quello che in matematica si fa del nome x o y e z per indicare tre valori o tre variabili qualsiasi; oppure, in numerosi contesti, all'uso di Tizio, Caio e Sempronio per indicare tre generiche persone.


Ogni lingua ha sviluppato le sue variabili metasintattiche. I francesi utilizzano toto, titi, tata, tutu; gli olandesi aap, noot, mies (che sono parole utilizzate dai bambini per apprendere l'alfabeto); i neozelandesi blarg e wibble; e così via.

Ma se la provenienza di nomi come pippo o ciao è ben chiara ed evidente, lo è un po' meno quella degli equivalenti inglesi dei termini. Tra i più conosciuti si annoverano sicuramente foo, bar e foobar (o fubar), ma compaiono anche spesso baz, qux, quux, corge, grault, garply, waldo, fred, plugh, xyzzy e thud, a seconda principalmente delle università di provenienza.

Il problema di questi nomi è piuttosto annoso: un programmatore alle prime armi, che si imbatte in un codice (C) del tipo:


#include <stdio.h>
    int main() {
    char foo[] = "Hello,";
    char bar[] = "World!";
    printf("%s %s\n", foo, bar);
      return 0;
 }

inevitabilmente resterà un po' interdetto da questi nomi, chiedendosi cosa vogliano significare. Il problema (apparentemente banale) è talmente sentito dalla comunità che, nel 2001 (probabilmente come pesce d'aprile), la Internet Engineering Task Force (IETF) ha pubblicato una Request For Comments (RFC, ossia un documento che generalmente viene utilizzato per descrivere protocolli, metodi, comportamenti, ricerche o innovazioni circa Internet o sistemi connessi tramite Internet) per chiarire il senso di questi nomi.
È da notare come, nella storia, questi documenti sono stati utilizzati per definire standard come quelli del formato email...

Ciò si spiega facilmente se notiamo che il 7% circa delle RFC stesse, a partire dalla RFC269, contengono la parola foo.
L'origine di questa metavariabile risale agli anni della seconda guerra mondiale. Questo termine era utilizzato in congiunzione con bar, nella dicitura FUBAR, che nello slang dei militari era l'abbreviazione per Fucked Up Beyond All Repair, ossia fottuto senza possibilità di riparazione.
Inizialmente si crede che il passaggio da FU a FOO sia stato dovuto ad un processo di bowdlerizzazione, ossia di censura, per nascondere il senso osceno dell'acronimo.
In realtà, è più probabile che la scrittura foo derivi dal tedesco furchtbar (terribile) e foobar fosse in realtà la scrittura originale.
In effetti sembra che la parola foo avesse già un utilizzo nell'immediato anteguerra, in strisce di fumetti o in cartoni animati. Nel 1938 Robert Clampett diresse per la Warner Bros il cartone di circa 7 minuti "The Daffy Doc", dove una primissima versione di Daffy Duck tiene in mano un cartello con scritto SILENCE IS FOO!.
I termini FOO e BAR compaiono anche nelle strisce Pogo di Walt Kelly, ma le documentazioni più antiche sono presenti nelle strisce surrealiste Smokey Stover di Bill Holman, che raccontano la storia di un pompiere. Queste strisce comparvero negli Stati Uniti tra il 1930 ed il 1952 ed in esse comparivano spesso frasi senza senso dette da personaggi sullo sfondo delle vignette, come ad esempio "He who foos last foos best" (chi foo per ultimo, foo meglio) oppure "Many smoke but foo men chew" (molti fumano, ma foo uomini masticano).
Holman affermò di aver letto la parola foo sul fondo di una statuetta cinese, il che è plausibile: le statuette cinesi avevano spesso iscrizioni apotropaiche, e quella che aveva visto Holman poteva avere la scritta fu (), spesso traslitterata foo, che può avere il significato di felicità.
Nelle strisce di Holman era presente un camion dei pompieri che aveva il nome di Foomobile, che si muoveva su due sole ruote.
Questi fumetti ebbero una tale diffusione verso la fine degli anni '30 che nacquero all'incirca 500 Foo Clubs. Da qui il nome si diffuse moltissimo nella cultura americana, ma le sue origini si persero con estrema velocità.
È da qui che il termine si diffuse negli ambienti militari. Il termine "Foo Fighters" veniva utilizzato durante la seconda guerra mondiale dagli operatori radar per descrivere degli strani ed impercettibili avvistamenti aerei, che oggi chiameremmo UFO.
Il termine più antico degli UFO tornò alla luce nel 1995 attraverso il nome di un gruppo musicale di grunge-rock, i Foo Fighters, appunto.
I militari americani, durante la seconda guerra mondiale poi, abusavano di termini di slang. Ovunque i loro eserciti passassero, compariva una gran quantità di graffiti con scritto Foo Was Here. In seguito si tentò di spiegare il termine foo sostenendo che fosse un acronimo per Forward Observation Officer, il coordinatore delle truppe di una squadriglia dell'esercito americano.
40 anni dopo, Paul Dickson, nel suo eccellente libro Words, ricollegò foo ad un non meglio specificato numero di una rivista della marina militare britannica del 1946, citando quanto segue:
"Il Sig. Foo è un prodotto misterioso della Seconda Guerra Mondiale, che ha ricevuto in dono del sarcasmo ed un'amara onniscenza"
Le primissime versioni del Jargon File suggeriscono la possibilità che l'utilizzo degli hacker di questo termine nacque dal titolo di un fumetto di Charles e Robert Crumb intitolato FOO, Lampoon's and Parody che uscì per la prima volta nel settembre del 1958. In realtà questo fumetto (che utilizzava il nome foo come omaggio alle strisce di Holman) non fu affatto un successo e ne circolarono pochissime copie, il che fa escludere che sia questa la fonte dell'enorme diffusione di questa parola.
Nel 1959 compare per la prima volta la parola foo all'interno di un dizionario, il Dizionario del linguaggio TRMC, edito dal Tech Model Railroad Club dell'MIT. La definizione riporta quanto segue:
"FOO: la sillaba sacra (FOO MANI PADME HUM); deve essere pronunciata quando si è obbligati ad entrare in comunione con una divinità. Il nostro primo obbligo è di mantenere in movimento i Contatori del Foo"
È evidente, vista la provenienza della definizione e il tipo di persone che scrivevano su quel dizionario, si possa sicuramente trattare di uno scherzo.
Una volta conosciuta l'origine un po' fumosa di questa espressione, fa sorridere sapere che una gran quantità di significati sono stati attribuiti ad essa e derivati:
  • .bar: estensione generica di file, che non implica nulla sul tipo o sul contenuto del file stesso;
  • BAR: Base Address Register, o Buffer Address Register;
  • FOO: Forward Observation Observer, o FOO of Oberlin (un'organizzazione di un'università con un nome ricorsivo il cui motto è The FOO, the Proud, the FOO), o File Open for Output;
  • FOOBAR: FTP Operation Over Big Address Records;
  • FUBAR: Failed UniBus Address Register, un errore nel DEC VAX;
e l'uso si è diffuso talmente tanto che in alcuni casi è comparso anche foobard o foobar'd come passato di un ipotetico verbo to foobar.
Per concludere, quando guardando del codice ci imbatteremo in una di queste variabili, potremo tranquillamente dimenticarci di qual è il senso dell'algoritmo che si presenta davanti a noi, incominciando a far vagare la mente su vecchi fumetti e su eserciti americani che scrivevano sui muri.

3 comments:

  1. In pratica sembra che la parola FOO sia alla base di qualsiasi dizionario: da FOO puoi costruire qualsiasi altra parola!!! :D
    Come ti ho già detto, la spiegazione più completa che si trova sulla rete!!! Grande!!!

    ReplyDelete
  2. L'ha usato anche il Manzoni con discreto successo... Ei foo. Siccome immobile, dato il mortal sospiro... ecc ecc =)

    ReplyDelete
  3. Per non parlare del pezzo di stra successo di Carl Douglas, "Everybody was kung-foo fighting"... :)

    ReplyDelete