OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Пятница, 03 Апрель, 2020 04:27

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
 Заголовок сообщения: Массивная совместимость
СообщениеДобавлено: Суббота, 21 Март, 2020 22:18 
Аватара пользователя

Зарегистрирован: Суббота, 16 Февраль, 2008 02:47
Сообщения: 169
Коллеги,

из определения понятия Array compatible в Language Report я делаю вывод, что при следующих определениях:
Код:
TYPE
  A = POINTER TO RECORD END;
  B = POINTER TO RECORD (A) END;
VAR b: POINTER TO ARRAY OF B;
PROCEDURE P (a: POINTER TO ARRAY OF A);

является некорректным выражение
Код:
P(b)

Штатный компилятор со мной соглашается и признает такое выражение некорректным.

Но ведь ∀i: b[i] IS A, и этот факт гарантируется проверкой типов при компиляции (т.е. не зависит от фактических типов переменных b[i]). И, кмк, передав b процедуре P мы "оправдаем" все ее ожидания.

Как вам кажется, чем продиктовано такое ограничение?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Массивная совместимость
СообщениеДобавлено: Воскресенье, 22 Март, 2020 02:35 
Аватара пользователя

Зарегистрирован: Суббота, 16 Февраль, 2008 02:47
Сообщения: 169
А, все, разобрался, вот пример, почему нельзя:

Код:
PROCEDURE P (a: POINTER TO ARRAY OF A);
  VAR c: POINTER TO RECORD (A) END;
BEGIN a[0] := c                                            (*)
END P;


После P(b) фактический массив а^ имеет тип элемента B, что несовместимо по присваиванию в (*) и не может быть выявлено при компиляции.

Но что если сделать
PROCEDURE Q (IN a: ARRAY OF A);

При Q(b) фактический массив a^ по-прежнему имеет тип элемента В, что опять несовместимо по присваиванию; однако присваивание запрещено, поскольку исп режим IN. И дальше передать a[i] в качестве VAR и OUT параметра нельзя - получается, а[i] защищено и неизменно; изменяться могут только его поля, что не нарушает целостности, поскольку в любом фактическом a[i] есть все поля A.

Или все-таки есть контрпример или опровергающее рассуждение?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Массивная совместимость
СообщениеДобавлено: Воскресенье, 22 Март, 2020 12:57 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9222
Откуда: Россия, Орёл
Да, на тему совместимости массивов из типов-расширений надо подумать, это периодически "поджимает".

Возможно, подошло бы решение с типом ANYARRAY и WITH к массивам.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2020, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB