vaxocentrism: /vak`soh·sen´trizm/, n.

[analogia con ‘etnocentrismo’] Una malattia virtuale che si dice affligga i programmatori in C che persistono nel codificare secondo presupposti validi (specie sotto Unix) in VAXen ma falsi altrove. Fra questi:

  1. Il presupposto che de-referenziare un indicatore nullo sia cosa sicura perché ha tutti i bits a 0 (zero), la allocazione a 0, e si legge 0. Problema: ciò può invece produrre un blocco da indirizzo non permesso su un non-VAXen, e perfino su un VAXen con OSes diverso da BSD Unix. Di norma, questo è un presupposto implicito nel codice sloppy (che si dimentica di controllare l'indicatore prima di usarlo), piuttosto che uno sfruttamento intenzionale di un mal-funzionamento.

  2. Il presupposto che i caratteri siano accettati.

  3. Il presupposto che un puntatore a qualunque carattere possa essere assegnato liberamente al puntamento di un qualunque altro carattere. Una forma più grave di questa è il presupposto che tutti gli indicatori siano dello stesso formato e allocazione, che vuol dire non doversi preoccupare nel fare lanci o nello scrivere correttamente le chiamate. Problema: ciò non è vero nelle macchine orientate alle parole, o su altre, con diversi formati di indicatore.

  4. Il presupposto che i parametri di una procedura siano immagazzinati nella memoria, in una pila, contigui ed in ordine rigorosamente ascendente o discendente. Problema: ciò non vero in molte architetture RISC.

  5. Il presupposto che puntatore ed interi siano del medesimo formato, e che gli indicatori possano essere ficcati nelle variabili a numero intero (e viceversa) ed essere estratti senza rischio di troncature o comunque modifiche. Problema: ciò non avviene nelle architetture segmentate o nelle macchine orientate a parole, con diversi formati degli indicatori.

  6. Il presupposto che un tipo di dati di un formato possa iniziare a qualunque indirizzo della memoria (ad esempio, che si possa liberamente costruire e dereferenziare un indicatore ad una parola- o ad un oggetto di grande formato, ad un indirizzo di carattere dispari). Problema: ciò non avviene su molte architetture (specie RISC), ottimizzate meglio per velocità di esecuzione di HLL, e può causare un errore di indirizzo illegale o un errore di bus.

  7. Il presupposto (relativo) che non ci sia riempimento all'estremità dei caratteri, e che in un array [= allineamento] si possa fare al pari un passo a destra dall'ultimo byte di un componente precedente, fino al primo byte di quello seguente. Questo dipende non solo dalla macchina, ma anche dal compilatore.

  8. Il presupposto che lo spazio per l'indirizzo di memoria sia globalmente piano, e che il foo[-1] di riferimento dell'array sia necessarimente valido. Problema: questo non risulta vero per 0(zero), o altre allocazioni, nelle macchine indirizzate a clusters, come i pezzettini di Intel (sì, la segmentazione è universalmente considerata un modo brain-damaged di progettare le macchine (vedi moby), ma questo è un altro discorso).

  9. Il presupposto che gli oggetti possano essere arbitrariamente grandi senza particolari considerazioni. Problema: ciò non avviene nelle architetture segmentate, ed in ambienti indirizzati in modo non-virtuale.

  10. Il presupposto che la pila possa essere grande quanto la memoria. Problema: ciò non avviene nelle architetture segmentate, o su quasi niente altro che operi senza gli indirizzi virtuali ed una pila paginata.

  11. Il presupposto che bits ed unità indirizzabili all'interno di un oggetto siano ordinate nello stesso modo, e che questo ordine sia una costante naturale. Problema: ciò non avviene nelle macchine big-endian.

  12. Il presupposto che abbia significato paragonare gli indicatori ad oggetti diversi, non situati all'interno dello stesso array, o ad oggetti di tipi differenti. Problema: la prima cosa non avviene nelle architetture segmentate, l'altra non si verifica nelle macchine orientate a parole o in altre con molti differenti formati di indicatori.

  13. Il presupposto che un intero sia necessariamente a 32-bit, o (quasi equivalente) il presupposto che sizeof(int) == sizeof(long). Problema: ciò non si verifica in PDP-11, nei sistemi basati su 286 bit, e perfino 386-bit e sistemi 68000 con taluni compilatori (e nei sistemi 64 bit come Alfa, natralmente).

  14. Il presupposto che il argv[] sia scrivibile. Problema: ciò non è ammesso in molti ambienti in cui è implementato C, e perfino in alcune (poche) distribuzioni Unix.

Si noti che un programmatore può essere giustamente accusato di vaxocentrismo anche se lui/lei non ha mai visto un VAX. Alcuni di questi presupposti (in particolare 2-5) erano validi già nel PDP-11, la macchina originale in C, e sono divenuti endemici anni prima del VAX. Il termine vaxocentricità e la sindrome tutto il mondo è VAX sono stati usati come sinonimi.