OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Вторник, 27 Сентябрь, 2022 05:15

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




Начать новую тему Ответить на тему  [ Сообщений: 29 ]  На страницу Пред.  1, 2
Автор Сообщение
СообщениеДобавлено: Воскресенье, 20 Июнь, 2021 11:21 

Зарегистрирован: Пятница, 07 Май, 2021 11:06
Сообщения: 18
Есть гипотеза!
Если для книжного примера перечень описателей в таблице базовых типов идет следующим образом P0, P1, P2, (для P2) ;
P0, P1 (для P1) (предполагаю что свой тэг дублируется в таблице базовых типов)
тогда p1 IS P2 преобразуется так
Глубина расширения P2 равна 2, следовательно 2 * 4 (размер указателя) получаем 8,
Следовательно, если типы равны, либо P2 расширяет тип P1, то в позиции по смещению восемь таблицы базовых типов p1 будет тип P1.
Теперь фокус ясен, всё ещё не понятно зачем дублировать свой адрес в описателе (дескрипторе) типа. Формально на рисунке у типа R0 должна быть запись указывающая на себя, но её нет. И на словах (т.е. в тексте) сказано, для типа R2 "то дескриптор R2 содержит тэги R1 и R0, как показано на рис."
Один ребус разгадали, спасибо всем кто помог.


Вложения:
TypeTest.png
TypeTest.png [ 26.26 КБ | Просмотров: 1856 ]
Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 20 Июнь, 2021 16:28 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9457
Откуда: Россия, Орёл
JackKatch писал(а):
(был уверен что (a IS E1) = все что угодно, но не TRUE.


Ну так если селёдка IS рыба даёт FALSE, то это всё, что угодно, только не объектно-ориентированная / полиморфная семантика.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 21 Июнь, 2021 15:40 
Аватара пользователя

Зарегистрирован: Суббота, 16 Февраль, 2008 02:47
Сообщения: 532
JackKatch писал(а):
Есть гипотеза!
Если для книжного примера перечень описателей в таблице базовых типов идет следующим образом P0, P1, P2, (для P2) ;
P0, P1 (для P1) (предполагаю что свой тэг дублируется в таблице базовых типов)
тогда p1 IS P2 преобразуется так
Глубина расширения P2 равна 2, следовательно 2 * 4 (размер указателя) получаем 8,
Следовательно, если типы равны, либо P2 расширяет тип P1, то в позиции по смещению восемь таблицы базовых типов p1 будет тип P1.

Я именно это и пытался выразить:
Type(a).base[Type(E1).depth] = Type(E1)

JackKatch писал(а):
Теперь фокус ясен, всё ещё не понятно зачем дублировать свой адрес в описателе (дескрипторе) типа.

Чтобы не было особого случая Type(a) = Type(T). С этим особым случаем общее выражение для вычисления IS было бы
(Type(a) = Type(E1)) OR (Type(a).base[Type(E1).depth] = Type(E1))


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 21 Июнь, 2021 21:44 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1420
Для истории


Вложения:
typetests-a.pdf [52.73 КБ]
Скачиваний: 145
typetests.pdf [220.4 КБ]
Скачиваний: 150
Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 22 Июнь, 2021 09:28 
Аватара пользователя

Зарегистрирован: Суббота, 16 Февраль, 2008 02:47
Сообщения: 532
Признателен за PDF, оч интересно в ретроспективе.

Бегло глянул, как в JVM сделан instanceof - похоже, там используется разреженная булева матрица и, вдобавок к этому, перебор по дереву типов.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 22 Июнь, 2021 14:28 

Зарегистрирован: Пятница, 07 Май, 2021 11:06
Сообщения: 18
В документе typetests.pdf , страница 628, на рисунке под надписью Descriptor for T001, опечатка. Последний в списке Tag for T000, а должно быть Tag for T001.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 14 Сентябрь, 2022 10:02 

Зарегистрирован: Суббота, 30 Июль, 2022 12:02
Сообщения: 17
В продолжение темы хочу задать знатокам языка теоретический вопрос для более глубокого понимания Оберона.
Есть такие варианты записей:
Код:
TYPE
   base=RECORD
      a:INTEGER;
      END;
   var1=RECORD(base)
      b:REAL;
      END;
   var2=RECORD
      c:base;
      b:REAL;
      END;


Почему запись var2 не считается расширением базовой записи в том смысле, как это считается для var1, то есть с проверкой типа операторами IS и WITH?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 15 Сентябрь, 2022 01:23 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 1354
Откуда: Киев
Тут нет иного ответа, кроме того, что так задано правилами языка. Ещё со времён Паскаля, если не с Алгола в этом семействе выбрана номинальная, а не структурная типизация за некоторыми необходимыми исключениями. Иными словами связность, а следовательно и совместимость типов задаётся через явную связь в объявлении, а не по совпадению структуры записи, поэтому и проверка не связанных записей не имеет смысла, так как они не могут пересечься без использования низкоуровневых средств.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 15 Сентябрь, 2022 07:12 

Зарегистрирован: Суббота, 30 Июль, 2022 12:02
Сообщения: 17
Comdiv писал(а):
Тут нет иного ответа, кроме того, что так задано правилами языка. Ещё со времён Паскаля, если не с Алгола в этом семействе выбрана номинальная, а не структурная типизация за некоторыми необходимыми исключениями. Иными словами связность, а следовательно и совместимость типов задаётся через явную связь в объявлении, а не по совпадению структуры записи, поэтому и проверка не связанных записей не имеет смысла, так как они не могут пересечься без использования низкоуровневых средств.

Благодарю вас за подробный и исчерпывающий ответ.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 29 ]  На страницу Пред.  1, 2

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


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

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


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

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