OberonCore https://forum.oberoncore.ru/ |
|
неэкспортированные процедурные типы -- проверяются https://forum.oberoncore.ru/viewtopic.php?f=29&t=5448 |
Страница 1 из 1 |
Автор: | Info21 [ Воскресенье, 12 Июль, 2015 19:56 ] |
Заголовок сообщения: | неэкспортированные процедурные типы -- проверяются |
В одном модуле экспортированы процедурные переменные, но их (общий, объявленный отдельно) тип -- скрыт. Тем не менее при компиляции внешнего модуля, который что-то присваивает этим переменным, проверка выполняется. То есть я бы ожидал, что любое присваивание будет компилятором обламываться, -- ан нет: если сигнатура присваиваемой процедуры соответствует невидимому типу, то компилятор присваивание пропускает. Не могу придумать ситуацию, где такое поведение приводило бы к ошибке. Но чисто эстетически -- как-то неэстетично. Или чего-то не понимаю? |
Автор: | Пётр Кушнир [ Воскресенье, 12 Июль, 2015 20:10 ] |
Заголовок сообщения: | Re: неэкспортированные процедурные типы -- проверяются |
Процедурным типам для совместимости достаточно совпадения набора параметров, насколько я понимаю, это общее место для многих языков. То есть неважно, какой именно тип у процедурной переменной, пусть даже и скрытый, для присвоения значения такой переменной должно быть достаточно совпадающего набора параметров. А иначе никак, ведь типизировать саму процедуру, которая будет реально выполняться мы не можем. |
Автор: | Info21 [ Понедельник, 13 Июль, 2015 12:47 ] |
Заголовок сообщения: | Re: неэкспортированные процедурные типы -- проверяются |
Это-то понятно. Непонятно, почему компилятор пропускает то, что -- в соответствии с принципом не/видимости -- пропускаться не должно. |
Автор: | Пётр Кушнир [ Понедельник, 13 Июль, 2015 17:46 ] |
Заголовок сообщения: | Re: неэкспортированные процедурные типы -- проверяются |
Ну тут скорее наоборот, нельзя позволять экспортировать переменные со скрытым типом. Это и записей касается, и для записей похожая ситуация тоже прокатывает. Доступ к неизвестным интерфейсу объектам. Код: 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. Тонкий момент. |
Автор: | Kemet [ Вторник, 14 Июль, 2015 19:27 ] |
Заголовок сообщения: | Re: неэкспортированные процедурные типы -- проверяются |
Идентификация типа процедурной переменной основано на соответствии сигнатуры, а не на соответствии имён, как для структурных записей, поэтому сигнатура типа экспортированных процедурных переменных всегда сохраняется, не нарушая общий принцип, так как по определению не структурна |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |