OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 22 Август, 2019 18:28

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




Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
СообщениеДобавлено: Воскресенье, 12 Июль, 2015 19:56 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8169
Откуда: Троицк, Москва
В одном модуле экспортированы процедурные переменные, но их (общий, объявленный отдельно) тип -- скрыт.

Тем не менее при компиляции внешнего модуля, который что-то присваивает этим переменным, проверка выполняется.

То есть я бы ожидал, что любое присваивание будет компилятором обламываться, -- ан нет:
если сигнатура присваиваемой процедуры соответствует невидимому типу, то компилятор присваивание пропускает.

Не могу придумать ситуацию, где такое поведение приводило бы к ошибке.

Но чисто эстетически -- как-то неэстетично.

Или чего-то не понимаю?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 12 Июль, 2015 20:10 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2599
Откуда: Россия, Ярославль
Процедурным типам для совместимости достаточно совпадения набора параметров, насколько я понимаю, это общее место для многих языков. То есть неважно, какой именно тип у процедурной переменной, пусть даже и скрытый, для присвоения значения такой переменной должно быть достаточно совпадающего набора параметров. А иначе никак, ведь типизировать саму процедуру, которая будет реально выполняться мы не можем.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 13 Июль, 2015 12:47 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8169
Откуда: Троицк, Москва
Это-то понятно.

Непонятно, почему компилятор пропускает то, что -- в соответствии с принципом не/видимости -- пропускаться не должно.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 13 Июль, 2015 17:46 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2599
Откуда: Россия, Ярославль
Ну тут скорее наоборот, нельзя позволять экспортировать переменные со скрытым типом. Это и записей касается, и для записей похожая ситуация тоже прокатывает. Доступ к неизвестным интерфейсу объектам.

Код:
MODULE PrivTest;

   TYPE
      R = RECORD
         x*: INTEGER;
      END;
   
   VAR
      r*: R;
END PrivTest.

MODULE PrivTest2;
   IMPORT PrivTest;
BEGIN
   PrivTest.r.x := 10;
END PrivTest2.

Код:
DEFINITION PrivTest;

   VAR
      r: R;

END PrivTest.

Тонкий момент.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 14 Июль, 2015 19:27 

Зарегистрирован: Вторник, 26 Январь, 2010 09:31
Сообщения: 714
Откуда: Барнаул
Идентификация типа процедурной переменной основано на соответствии сигнатуры, а не на соответствии имён, как для структурных записей, поэтому сигнатура типа экспортированных процедурных переменных всегда сохраняется, не нарушая общий принцип, так как по определению не структурна


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

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


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

Сейчас этот форум просматривают: Google [Bot] и гости: 0


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

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