Задача стояла следующим образом - сделать так, чтобы запись нельзя было создать никак иначе, кроме как через конструктор.
Для Оберона был сделан следующий простой пример.
Код:
MODULE Export;
TYPE
a=RECORD
b-:INTEGER;
END;
VAR
p-:POINTER TO a;
PROCEDURE Init*();
BEGIN
NEW(p);
p^.b:=100;
END Init;
BEGIN
END Export.
Код:
<*+MAIN*>
MODULE Import;
IMPORT STextIO,SWholeIO,Export;
VAR
c:CHAR;
BEGIN
Export.Init;
SWholeIO.WriteInt(Export.p^.b,4);
STextIO.WriteLn;
STextIO.ReadChar(c);
END Import.
Иван Денисов сделал аналогичный пример на Компонентном Паскале
Код:
MODULE TestExport;
TYPE
Item*=POINTER TO LIMITED RECORD
b-:INTEGER;
END;
PROCEDURE Init*():Item;
VAR
temp:Item;
BEGIN
NEW(temp);
temp^.b:=100;
RETURN temp;
END Init;
BEGIN
END TestExport.
Код:
MODULE TestImport;
IMPORT Log,TestExport;
VAR
Item:TestExport.Item;
PROCEDURE Do*;
BEGIN
Item:=TestExport.Init();
Log.Int(Item^.b);
Log.Ln;
END Do;
END TestImport.
TestImport.Do
P.S. Прошу извинить, если данная тема уже поднималась на форуме - не нашёл.