Jesteśmy często mówią , że sprzęt nie obchodzi, co język program jest napisany w jak to widzi tylko skompilowany kod binarny, jednak nie jest to cała prawda. Weźmy na przykład pokornego Z80; jego rozszerzenia do zestawu instrukcji 8080 obejmują instrukcje takie jak CPIR, które są przydatne do skanowania ciągów typu C (zakończonych NULL), np. do wykonania strlen()
. Projektanci musieli zidentyfikować, że uruchamianie programów C (w przeciwieństwie do Pascala, gdzie długość łańcucha znajduje się w nagłówku) było czymś, do czego prawdopodobnie ich projekt mógłby zostać użyty. Innym klasycznym przykładem jest maszyna Lisp .
Jakie są inne przykłady? Np. Instrukcje, liczba i rodzaj rejestrów , tryby adresowania, które sprawiają, że dany procesor sprzyja konwencjom określonego języka? Szczególnie interesują mnie wersje tej samej rodziny.
sizeof(int)
równa się 1, musi wymagać char
podpisania tego typu (ponieważ int
musi być w stanie pomieścić wszystkie wartości typu char
). Pisałem kod na komputerze, na którym char
i int
są zarówno 16-bitowe liczby całkowite podpisane; największe trudności polegają na tym, że nie można używać związków do konwersji typów, a wydajne przechowywanie dużej liczby bajtów wymaga ręcznego pakowania i rozpakowywania. Te problemy są niewielkie w porównaniu z możliwością w C, że sizeof (int) == sizeof (long), ponieważ ...
unsigned int
wartościami. C99 poprawił tę sytuację, ale przed C99 nie było gwarantowanego bezpiecznego jednoetapowego sposobu porównania potencjalnie ujemnej wartości z wartością typu unsigned int
(trzeba by sprawdzić, czy liczba była ujemna przed wykonaniem porównania).