OberonCore
https://forum.oberoncore.ru/

Расширение записи в классическом Обероне
https://forum.oberoncore.ru/viewtopic.php?f=158&t=6762
Страница 2 из 2

Автор:  JackKatch [ Воскресенье, 20 Июнь, 2021 11:21 ]
Заголовок сообщения:  Re: Расширение записи в классическом Обероне

Есть гипотеза!
Если для книжного примера перечень описателей в таблице базовых типов идет следующим образом 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 КБ | Просмотров: 1016 ]

Автор:  Илья Ермаков [ Воскресенье, 20 Июнь, 2021 16:28 ]
Заголовок сообщения:  Re: Расширение записи в классическом Обероне

JackKatch писал(а):
(был уверен что (a IS E1) = все что угодно, но не TRUE.


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

Автор:  adimetrius [ Понедельник, 21 Июнь, 2021 15:40 ]
Заголовок сообщения:  Re: Расширение записи в классическом Обероне

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))

Автор:  Trurl [ Понедельник, 21 Июнь, 2021 21:44 ]
Заголовок сообщения:  Re: Расширение записи в классическом Обероне

Для истории

Вложения:
typetests-a.pdf [52.73 КБ]
Скачиваний: 54
typetests.pdf [220.4 КБ]
Скачиваний: 59

Автор:  adimetrius [ Вторник, 22 Июнь, 2021 09:28 ]
Заголовок сообщения:  Re: Расширение записи в классическом Обероне

Признателен за PDF, оч интересно в ретроспективе.

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

Автор:  JackKatch [ Вторник, 22 Июнь, 2021 14:28 ]
Заголовок сообщения:  Re: Расширение записи в классическом Обероне

В документе typetests.pdf , страница 628, на рисунке под надписью Descriptor for T001, опечатка. Последний в списке Tag for T000, а должно быть Tag for T001.

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