Александр К писал(а):
Это понятно, но чем VAR отличается от TYPE?
Есть разный подход "тИповой совместимости" в языках программирования (вернее в их компиляторах).
Совместимость по структуре типа и совместимость по имени типа.
В виртовских языках и языках-"наследниках" паскаля (Модула-2, Оберон, КП, Ада) принята совместимость типов по именам.
Принято перед объявлением переменной, ещё и объявить тип.
Есть случаи послабления этого требования. Но они, чаще всего связаны с низкоуровневыми вещами и, что бы ими воспользоваться, необходимо в программе написать больше слов и приложить усилий.
И ЭТО - ПРАВИЛЬНО.
Для создания надёжных программ пусть лучше программист чётко объяснит компилятору, что он делает, на что решается и от чего отказывается.
Действительно низкоуровневое программирование - удел и привилегия относительно небольшого процента разработчиков. Они составляют категорию людей, труд которых связан с, по-настоящему, критичными и опасными вещами.
Когда опасные и рискованные части и фрагменты программ не требуют высокого порога осведомлённости и "дешевы" в затратности и лёгкости использования, у общей массы кодописателей возникает соблазн и убеждение, что "если так можно (и можно легко), то так и надо (и надо всегда и везде)".
В то же время модель совместимости по именам типов значительно упрощает работу компилятора, делает работу анализирующих и проверочных частей проще и формальней. Ведь компилятор должен сравнить только имена, но не начинает детальное сравнение по набору полей, их типов, порядка их расположения в типе/записи, выравнивание и размер.
К тому же, сравнение на идентичность типов по именам намного правильнее методически. Программист именем типа идентифицирует понятие, с которым оперирует в методах и подпрограммах. И он ожидает, что это понятие будет подразумевать одно и то же в разных местах. И в этих местах не нужно проводить "дополнительные уточнения" ни программисту, ни компилятору.