OberonCore https://forum.oberoncore.ru/ |
|
Видимость структур структур через границы модулей https://forum.oberoncore.ru/viewtopic.php?f=29&t=6638 |
Страница 1 из 1 |
Автор: | adimetrius [ Четверг, 16 Июль, 2020 16:13 ] |
Заголовок сообщения: | Видимость структур структур через границы модулей |
Коллеги, я вчитывался в Сообщение о языке СЯ, и пришел к такому выводу: СЯ определяет, что экспортированный идентификатор может использоваться в импортирующих модулях. LR писал(а): An identifier x exported by a module M may be used in other modules, if they import M. Больше других ограничений нет (я не обнаружил). Получается, что если Т - не экспортированное имя типа-записи, в котором экспортировано поле f - то последнее будет доступно в клиентских модулях: Код: MODULE M; TYPE T = ARRAY 16 OF CHAR; S = RECORD f*: CHAR END; VAR v*: T; u*: S; END M. MODULE B; IMPORT M; CONST L = LEN(M.v); BEGIN M.u.f := "Z" END B. И вообще свойства структуры, обозначенной T, будут доступны в клиентах - напр длина массива. Оказалось, компилятор CP2 Того же мнения: приведенный пример скомпилирован без ошибок. Это, с одной стороны, подчеркивает, что тип и имя типа - разные субстанции. С другой стороны - какова практическая ценность такой особенности? Кто-нибудь пользовался этим осознанно? Как полагаете, почему так сделано: так вышло? так легче сделать компилятор? или есть какая-то иная целесообразность? |
Автор: | Александр Ильин [ Суббота, 18 Июль, 2020 12:02 ] |
Заголовок сообщения: | Re: Видимость структур структур через границы модулей |
Вы можете иметь доступ к опубликованным полям записи, но не можете объявлять свои экземпляры типа записи или процедуры с их использованием. Это даёт модулю, где этот тип S объявлен, гарантии того, что все экземпляры данного типа созданы только им, и, соответственно, соблюдены все необходимые инварианты, в том числе касательно неопубликованных полей. Если объявить тип-запись публичной, а затем другой модуль объявит где-то в процедуре локальную переменную этого типа и передаст её в ваш модуль, то в неопубликованных полях (неуказательного типа) может быть мусор со стека. Я этим пользовался, но уже не помню, где и как. |
Автор: | adimetrius [ Суббота, 18 Июль, 2020 13:16 ] |
Заголовок сообщения: | Re: Видимость структур структур через границы модулей |
Александр Ильин писал(а): Это даёт модулю, где этот тип S объявлен, гарантии того, что все экземпляры данного типа созданы только им, и, соответственно, соблюдены все необходимые инварианты, в том числе касательно неопубликованных полей. Спасибо, мне ваше пояснение добавило ясности! Теперь понятнее, в чем может быть практическая польза от этой особенности. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |