OberonCore
https://forum.oberoncore.ru/

Непрозрачные типы
https://forum.oberoncore.ru/viewtopic.php?f=116&t=468
Страница 1 из 1

Автор:  Сергей Губанов [ Пятница, 18 Май, 2007 13:26 ]
Заголовок сообщения:  Непрозрачные типы

Тип Integers.Integer непрозрачный:

Integer = POINTER TO IntegerDesc;

и тип IntegerDesc не экспортируется.

Однако, зная что IntegerDesc представлен массивом, я могу написать:

n[0] := 1; (* здесь n: Integers.Integer *)

и компилятор со мной соглашается. По моему, это не правильно.

Автор:  Info21 [ Пятница, 18 Май, 2007 14:09 ]
Заголовок сообщения: 

По-моему тоже.

Есть, конечно, выход:
Integer* = RECORD
p: POINTER TO ARRAY ...
END;
Но тогда от функций придется отказаться. Впрочем, невелика потеря.

Автор:  Илья Ермаков [ Пятница, 18 Май, 2007 14:59 ]
Заголовок сообщения: 

На самом деле уровни экспорта - дело тонкое. На уровне компилятора/рантайма есть четвертый уровень экспорта (кроме трех - скрытый, только чтение, полный) - private.
С этим уровнем вроде бы экспортируются описатели любых RECORD (и неявных Desc от POINTER TO RECORD), объявленных в модуле - видимо, с той точки зрения, что поскольку объект этого типа может гулять по системе, то и его дескриптор является как бы не совсем скрытым...

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/