Нам часто кажуть, що апаратне забезпечення не хвилює, на якій мові написана програма, оскільки вона бачить лише скомпільований двійковий код, однак це не вся правда. Наприклад, розгляньте скромну Z80; його розширення до набору інструкцій 8080 включають такі інструкції, як CPIR, які корисні для сканування рядків у стилі C (з NULL), наприклад для виконання strlen()
. Дизайнери, мабуть, визначили, що запуск програм C (на відміну від Pascal, де довжина рядка знаходиться в заголовку) - це те, для чого, ймовірно, використовувався їх дизайн. Ще один класичний приклад - машина Lisp .
Які ще приклади є? Наприклад, інструкції, кількість та тип регістрів , режими адресації, завдяки яким певний процесор надає перевагу умовам певної мови? Мене особливо цікавлять ревізії тієї ж родини.
sizeof(int)
дорівнює 1, вимагає char
підписати цей тип (оскільки атрибут int
повинен вміщувати всі значення типу char
). Я написав код для машини, де char
і int
обидва є 16-бітовими цілими числами; Найбільші труднощі полягають у тому, що не можна використовувати об'єднання для перетворення типів, а ефективне зберігання великої кількості байтів вимагає упаковки та розпакування вручну. Ці питання незначні порівняно з можливістю в C, що sizeof (int) == sizeof (long), оскільки ...
unsigned int
значеннями. C99 покращив цю ситуацію, але до початку C99 не існувало гарантовано-безпечного однокрокового способу порівняння потенційно-негативного значення зі значенням типу unsigned int
(треба було б перевірити, чи було число негативним, перш ніж проводити порівняння).