debi12345 писал(а): Все-таки почему Мартин упирается против наличия универсального базового типа как основы, от которой плясать и создавать производные типы
Правильно он делает, что упирается. Лишние сущности не нужны.
Модератор: Модераторы
debi12345 писал(а): Все-таки почему Мартин упирается против наличия универсального базового типа как основы, от которой плясать и создавать производные типы
Лишние сущности не нужны
debi12345 писал(а):Наоборот ! Вместо множества целых разной длинны, всего один (!) INTEGER-тип (сущность?) - базовый. С опциональной детализацией по диапазону (компилятор внутри переведет в нужный размер под архитектуру).
Как Вы будете отражать эту сущность на реальное железо
integer -10..10; // sint8
integer 0..127; // uint8
integer 0..255; // uint8
integer from 0; // uint(MAX_HW_REG_LEN)
integer; // sint(MAX_HW_REG_LEN/2)
debi12345 писал(а):Компилятор имеет всю инфу для такого отображения :
Объявляем [-10..10] а меняться будет от -127..128, -
debi12345 писал(а):На этапе компиляции нарушение диапазона можно выловить сразу. В рантайме - проверять софтварно (специальным кодом с генерацией исключений) перед присвоениями там, где задан диапазоны отличные от 2pwrN (неотлавливаемые аппаратными исключениями-прерываниями - работающими АФАЙК только для MAX_HW_REG_LEN, то есть выход за байт на совремнных процах аппаратно не выловишь). Ран-тайм проверку можно отключить - например в том же GCC есть для этого опция компилятора.
Лекс Айрин писал(а):все-таки широкий тип и диапазоны выглядят интереснее. А уже дело компилятора выбрать базовый аппаратный тип.
число было от -10 до 10, но хранилось в int32?
var
i1: integer; // неявный диапазон -MAX_HW_REG_SZ/2 .. +MAX_HW_REG_SZ/2
begin
if ((i < -10) and (i >10)) then ..
debi12345 писал(а):А вот это реально излишнее усложнение
-128 .. +128
как долго я буду искать ошибку?
Mikhail писал(а):Теряется управляемость.
debi12345 писал(а):проблемы.
Навскидку - да.
i1: integer of 8 bits;
i1: integer:8;
i2: integer of MAX bits; // 32 bits
i2: integer:MAX; // 32 bits
i3: integer of HUGE bits; // 64 bits
i3: integer:HUGE; // 64 bits
Имел в виду, что если значения целых типов, меняющих разрядность от платформе к платформе, нельзя просто так присвоить переменным фиксированной разрядности, при каждом таком присвоении придется явно прописывать приведение типов, что дает дополнительный контроль при многоплатформенной разработке.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2