OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Пятница, 29 Март, 2024 01:37

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




Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
СообщениеДобавлено: Вторник, 05 Май, 2020 12:31 
Аватара пользователя

Зарегистрирован: Суббота, 16 Февраль, 2008 02:47
Сообщения: 660
Коллеги,
Сообщение о языке позволяет ссылаться на (еще) не определенный тип. В разделе 4:

3. A declaration of a type T containing references to another type T1 may occur at a point where T1 is still unknown. The declaration of T1 must follow in the same block to which T is local;

Это единственное исключение из правила, что идентификатор должен быть объявлен прежде, чем использован. Оно сделано, очевидно, для определения взаимно ссылающихся типов. Однако, строго следуя формулировке Сообщения, получается возможным сделать так:

TYPE B = RECORD(A) END;
A = EXTENSIBLE RECORD END;

Пользы в этом нет: расширение всегда можно определить после базы, даже если они взаимно ссылаются.

Оказывается, компилятор Dev реализует эту возможность. Но для этого предпринимаются специальные усилия.

Как полагаете, можно ли ограничить использование неопределенных идентификаторов типами полей (и запретить их в указании базового типа) и элементов массивов? Это позволило бы несколько упростить компилятор(ы).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 05 Май, 2020 18:02 

Зарегистрирован: Пятница, 13 Март, 2009 16:36
Сообщения: 987
Откуда: Казань
В Oberon-07 сказано:
Цитата:
If a type P is defined as POINTER TO T, the identifier T can be declared textually following the declaration of P, but [if so] it must lie within the same scope.

То есть обязательно должен быть указатель на неопределенный тип.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 05 Май, 2020 19:48 
Аватара пользователя

Зарегистрирован: Суббота, 16 Февраль, 2008 02:47
Сообщения: 660
adimetrius писал(а):
Как полагаете, можно ли ограничить использование неопределенных идентификаторов типами полей (и запретить их в указании базового типа) и элементов массивов? Это позволило бы несколько упростить компилятор(ы).


Рифат, спасибо за поправку, я упустил:
Как полагаете, можно ли ограничить использование неопределенных идентификаторов типами полей (и запретить их в указании базового типа), базовыми типами указателей и типами элементов массива? Это позволило бы несколько упростить компилятор(ы).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 05 Май, 2020 20:21 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
В вашем примере надо A от B тоже унаследовать.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 05 Май, 2020 21:56 
Аватара пользователя

Зарегистрирован: Суббота, 16 Февраль, 2008 02:47
Сообщения: 660
Александр Ильин писал(а):
В вашем примере надо A от B тоже унаследовать.

Вы шутите, конечно.

Однако доля правды в этой шутке есть - действительно, в Сообщении о языке нигде прямо или косвенно не запрещается "взаимное расширение". И хотя, конечно, практического смысла во взаимном расширении нет, и даже умозрительного смысла нет - однако в Сообщении небольшая брешь.

Единственное ограничение структурного включения - A structured type cannot contain itself. Однако расширенный тип и базовый тип - это не Itself. Можно дополнить вот так: A structured type cannot contain itself or it's extensions.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 06 Май, 2020 15:49 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Надо посмотреть ещё на всякие тонкие случаи, типа как с процедурными переменными.

Когда сначала процедурный тип, у которого параметр - RECORD, а потом RECORD, у которого полем тот процедурный тип.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 06 Май, 2020 19:16 
Аватара пользователя

Зарегистрирован: Суббота, 16 Февраль, 2008 02:47
Сообщения: 660
Илья Ермаков писал(а):
Надо посмотреть ещё на всякие тонкие случаи, типа как с процедурными переменными.

Когда сначала процедурный тип, у которого параметр - RECORD, а потом RECORD, у которого полем тот процедурный тип.


Согласен, в формальных параметрах (процедурного типа) тоже нужно допускать (еще) не определенные типы.

Но в указании базового типа стоило бы запретить. Напр так (раздел 4):
3. A declaration of a type T containing references to another type T1 may occur at a point where T1 is still unknown, unless T is a record type and T1 is a base type of T. The declaration of T1 must follow in the same block to which T is local;


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

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


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6


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

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