Здравствуйте, Alekzander, Вы писали:
A>А мне зачем эти абстракции нужны? Чтобы они протекли?
И как именно они протекут?
A> Чтобы поиметь лишний геморрой при сопряжении с каким-нибудь LPARAM, из которых (сопряжений) реальная работа разработчика и состоит чуть менее, чем полностью?
Я работаю вот уже реально 30 лет с C, C++ и многими другими языками уровня "портабельный ассемблер или чуть выше". И у меня было крайне мало работ, на которых "реальная работа разработчика" состояла бы "чуть менее, чем полностью" из "сопряжения с каким-нибудь LPARAM".
Если речь про взаимодействие со средами, где важны точные размеры и расположения каких-нибудь полей — да, такое происходит постоянно. Сетевые протоколы с элементами типа "трёхбитное поле". Форматы данных аудиокодека. Всё это бывает. Но надо понимать, что это — то, что происходит за границей внутреннего хозяйства. Поэтому такие структуры, например, помечаются
attribute((packed)) в GCC и
pragma pack(1) в виндовых компиляторах. Но из этого не следует, что всем структурам и вообще всем типам данных надо следовать этому. Внутренним — точно не нужно.
A> (Ничего себе, "И только для согласования с конкретными тараканами нижнего уровня"!) Или чтобы нельзя было прикинуть размер файла с данными?
Файл с данными это уже случай упаковки — в значительном смысле, тех самых тараканов нижнего уровня.
A>Кстати. Просто мимоходом. Тебе не кажется, что range -50...+80 — это источник ошибок? Мина замедленного действия?
Не кажется. На один потенциальный случай, когда это мина замедленного действия, происходит несколько сотен других, для которых миной замедленного действия является, наоборот, попадание невалидных данных в переменные просто за счёт того, что их определение в виде int дало возможность сохранить такое значение.
A> Когда пляшут от байтиков, проблема диапазона возникает раз в несколько лет, и тогда берут тип экспоненциально большей размерности. И это не вечный процесс. Он прекращается, когда компьютеры становятся достаточно взрослыми. Тип общего назначения i128 уже никому не нужен.
То-то он присутствует в расширениях одновременно GCC и MSVC.
A> Там уже вектора, SIMD и прочее подобное роялит. С паскалевским же подходом вся твоя жизнь превратится в одну большую проблему диапазонов.
Вызываю обосновательную бригаду.
A> Тем и отличается практично мыслящий разраб от архитектурного космонавта. (Любезность за любезность ).
У меня как раз никакой астронавтики, чистая практичность. Да, для технического уровня времён, когда писали C, она была неподъёмна. Но прошло 50 лет, а вы всё мыслите мерками тех времён...
A>К счастью, это тот случай, когда вместе со мной ошибаются и путают все мейнстримные создатели новых языков.
Не все, к счастью. Но, как известно, для каждой проблемы найдётся простое, ясное, неправильное решение. Точнее, неправильным является непредоставление диапазонных и прочих урезанных типов с автовыводом базового типа. Сами по себе i32 не виноваты, виновата чрезмерная опора на них.