Spesso ci viene detto che all'hardware non importa in quale lingua è scritto un programma poiché vede solo il codice binario compilato, tuttavia questa non è tutta la verità. Ad esempio, considera l'umile Z80; le sue estensioni al set di istruzioni 8080 includono istruzioni come CPIR che è utile per scansionare stringhe di tipo C (terminate con NULL), ad es. per eseguire strlen()
. I progettisti devono aver identificato che l'esecuzione di programmi C (al contrario di Pascal, in cui la lunghezza di una stringa è nell'intestazione) era qualcosa per cui il loro progetto sarebbe stato probabilmente utilizzato. Un altro esempio classico è la macchina Lisp .
Quali altri esempi ci sono? Ad esempio istruzioni, numero e tipo di registri , modalità di indirizzamento, che rendono un processore particolare favorevole alle convenzioni di una lingua particolare? Sono particolarmente interessato alle revisioni della stessa famiglia.
sizeof(int)
uguale a 1 deve richiedere che il tipo char
sia firmato (poiché int
deve essere in grado di contenere tutti i valori di tipo char
). Ho scritto il codice per una macchina dove char
e int
sono interi sia a 16-bit con segno; le maggiori difficoltà sono che non è possibile utilizzare i sindacati per la conversione del tipo e l'archiviazione efficiente di un gran numero di byte richiede l'imballaggio e il disimballaggio manuali. Questi problemi sono minori rispetto alla possibilità in C che sizeof (int) == sizeof (long), dal ...
unsigned int
valori. C99 ha migliorato questa situazione, ma prima di C99 non esisteva un modo sicuro in un solo passaggio per confrontare un valore potenzialmente negativo con un valore di tipo unsigned int
(si dovrebbe verificare se il numero era negativo prima di fare il confronto).