SIZE (с_з_индекс), знаковый аналог адреса и индекс в массивах

Переводим термины и придумываем новые, в т.ч. для ЯОС
Ответить
БудДен
Сообщения: 2839
Зарегистрирован: 07.10.18 14:01

SIZE (с_з_индекс), знаковый аналог адреса и индекс в массивах

Сообщение БудДен » 04.01.21 00:18

В Активном Обероне есть чудовищный тип SIZE. Он имеет размер машинного слова, но знаковый. Мало того, что это само по себе ужасно, но этого мало. У него есть ещё и два отдельных применения. Он может применяться как:
  • разница между двумя адресами памяти, в т.ч. размер объекта
  • счётчик, например, разность между двумя индексами в массиве
В чьём больном мозгу родилась мысль мерять расстояния и штуки одной единицей измерения, я не знаю, но в школе Вирта такие дивной красоты решения встречаются гораздо чаще, чем хотелось бы. Естественно, это даже дыра в надёжности, можно элементарно перепутать и сложить апельсины с километрами. Но так уже есть.

Никак не мог понять, как же его перевести. Придумал. зАДРЕС - т.к. это АДРЕС, но знаковый. Обычно у меня для беззнаковых приставка, например, цел32 и бцел32. Но тут АДРЕС уже занят, значит будет приставка "з". Достаточно ужасно, чтобы было ясно, что такой тип нужно как можно быстрее заменить на что-то нормальное. А дальше нужно, очевидно, в применениях щепить его на два отдельных типа и несовместимых по присваиванию типа "системно_зависимый_индекс" для применения в массивах и какую-нибудь "разн_адресов" для работы с памятью. При том, кстати говоря, знаковое число размером с адрес недостаточно для выражения всевозможных разностей адресов на данной системе. Дело обстоит ещё страшнее, чем я думал.

Может тогда сначала сделать ЗАДРЕС, чтобы было ясно, где мы сейчас находимся, а уже после расщепления превращать его в зАДРЕС, который чуть менее ужасен?
Последний раз редактировалось БудДен 08.01.21 14:17, всего редактировалось 2 раза.

MihalNik
Сообщения: 244
Зарегистрирован: 05.11.18 11:02

Re: SIZE

Сообщение MihalNik » 04.01.21 06:32

Адрес в памяти - это такой же индекс, как и у массива. Разная единица измерения сути не меняет.
Более того, типизация 8-разрядными единицами может потребовать костыли для выравнивания краев там, где требуется большая.
Смещение может оказаться отрицательным, а дополнительные преобразования типов по сути будут мнимыми.
Косяк тут в том, что теряется половина предельного размера памяти для 32-разрядных.
Это из-за того, что изначально тип жестко машинно-примитивный, а не развитый абстрактный с необходимыми оптимизациями компилятором.

БудДен
Сообщения: 2839
Зарегистрирован: 07.10.18 14:01

Re: SIZE

Сообщение БудДен » 04.01.21 12:14

Типы данных придуманы для того, чтобы разные по смыслу вещи не смешивались. Особенно плохо смешивать обычные сущности и низкоуровневые, к каковым относятся адреса в памяти. Касаемо абстракции типов от их хранения - я всецело за, но в рамках ЯОС я на данном этапе занимаюсь переводом, а не развитием. Конечно, декларированный курс на расщепление SIZE этому противоречит, но можно пока заложить только название.

БудДен
Сообщения: 2839
Зарегистрирован: 07.10.18 14:01

Re: SIZE

Сообщение БудДен » 04.01.21 12:34

Тогда название должно быть не столь ужасным. Например сзИНДЕКС - системно_зависимый_индекс. Или сз_индекс. INTEGER я назвал системно_зависимое_целое, но он довольно мало встречается. Если расписать SIZE как системно_зависимый_индекс, весь код станет ужасно выглядеть. Похоже, что надо системно_зависимое_целое превратить в с_з_целое, а SIZE - в с_з_индекс.

Павиа
Сообщения: 136
Зарегистрирован: 23.05.19 21:28

Re: SIZE

Сообщение Павиа » 06.01.21 14:28

Это классическая проблема типов.
1) Нужен тип для указателей.
2) Над указателями надо проводить арифметические действия.
3) И циклы для которых нужен знаковый тип.
Что нельзя выполнить одним типом.
Поэтому в Си выбрали два типа. Один целый беззнаковый размером с указатель. И один знаковый большего размера.

БудДен
Сообщения: 2839
Зарегистрирован: 07.10.18 14:01

Re: SIZE

Сообщение БудДен » 06.01.21 16:04

Оберон - не Си, там адресная арифметика используется только в исключительных случаях. В этом и проблема, что SIZE ломает забор загончика, в который её загнали. Соответственно, нет смысла в том, что номер элемента в массиве имеет тот же тип, что и адрес. Они должны отличаться. Просто об этом плохо подумали в какой-то момент (тип SIZE появился далеко не сразу). Т.е. тогда получается, что в Обероне нужен адрес, знаковый адрес большего размера, и отдельно тип "индекс в массиве", так, чтобы адреса не могли быть неявно приведены к индексу или числу и обратно. Впрочем, я не уверен, что тип "индекс в массиве" отдельно от типа "целое число" нужен.

БудДен
Сообщения: 2839
Зарегистрирован: 07.10.18 14:01

Re: SIZE (с_з_индекс), знаковый аналог адреса и индекс в массивах

Сообщение БудДен » 06.05.21 23:38

Ещё вариант - знаковоеСлово - достаточно бессмысленно, и намекает на машинность, притом не огромное. Если нужно огромное, то пойдёт

СистемноЗависимыйИндексИлиАдресСоЗнаком

системно_зависимый_знаковый_индекс_или_адрес

В общем-то, в большинстве случаев к адресу можно добавлять/вычитать просто целое, неважно какое. Но результатом снова должен быть адрес. Возможно, так удастся выкрутиться из ситуации, когда нарушается защита от присвоения адреса целому числу. Т.е. можно прибавить SIZE к адресу и получится адрес. Но нельзя присвоить ни SIZE адресу, ни наоборот. Мне кажется, что если принять такое правило, то большая часть кода должна без проблем скомпилироваться.

Ответить