OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Понедельник, 14 Июнь, 2021 20:21

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




Начать новую тему Ответить на тему  [ Сообщений: 12 ] 
Автор Сообщение
СообщениеДобавлено: Пятница, 07 Май, 2021 11:17 

Зарегистрирован: Пятница, 07 Май, 2021 11:06
Сообщения: 7
В исходных текстах классического Оберона, в модуле OBC, есть константа MaxExts = 7. Если я правильно понимаю она задаёт допустимое число расширения типа. В книге "проект Оберон", об этом косвенно тоже упоминается (стр. 257) "base таблица указателей на дескрипторы основных (базовых) типов (7 элементов)".

Кто нибудь может пояснить почему так сделано? т.е. почему не 20-ть, например? А так же интересует зачем это ограничение? С чем это связано?

Расширение типа это одно из новшеств Оберона, подразумевается, что программа может "не ограничено" расти. Как же ей расти тогда. Кроме точной информации приветсвуються любые теории, т.к. нужно разобраться в вопросе.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 07 Май, 2021 11:23 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9418
Откуда: Россия, Орёл
Важная особенность реализации Оберона - быстрая проверка типа (IS/WITH).
Это достигается тем, что каждый дескриптор типа хранит таблицу всех своих базовых типов.

Тогда вы, имея только два дескриптора типа, можете за примерно 3 машинных операции выяснить, является ли один из них базовым для второго или нет. Т.е. не нужно ходить по списку от типа к типу.

Но это приводит к тому, что в дескрипторе типа должен быть массив ARRAY maxExt OF Type.
Дальше идёт соображение банально экономии памяти.

В КП/ББ сделана глубина до 16.

Реально на практике редко бывает глубже 2-4. 5-6 - исключения в сложных приложениях.

Особенно учитывая принципы современной архитектуры, где используется расширение только от ABSTRACT (тогда у вас 1-3 уровня ABSTRACT и скрытая реализация, от которой уже расширений нет).

Странно, что вам показалось мало.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 07 Май, 2021 11:28 

Зарегистрирован: Пятница, 07 Май, 2021 11:06
Сообщения: 7
Спасибо за ответ. Если в реальных задачах число расширений не превышает 3,4 тогда понятно. Я такой статистики не знал. Ещё раз спасибо.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 07 Май, 2021 12:27 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9418
Откуда: Россия, Орёл
JackKatch писал(а):
Спасибо за ответ. Если в реальных задачах число расширений не превышает 3,4 тогда понятно. Я такой статистики не знал. Ещё раз спасибо.


Так не количество расширений, а глубина! Это же разные вещи.
Хранится список "вверх" - к базовым типам. А не список расширений.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 07 Май, 2021 12:54 

Зарегистрирован: Пятница, 07 Май, 2021 11:06
Сообщения: 7
Если не сложно поясните пожалуйста.
Вот есть некий тип T, который я расширяю. Он для моего типа базовый, а мой тип это первое расширение в глубину.
Если я или кто то расширит тип T снова, то это будет "количество" расширений. А если я буду расширять свой тип ещё раз, то увеличу глубину до двух.
Все расширения типа T будут иметь в дескрипторе одну (из семи) ссылок на базовый тип, а расширение моего типа будет иметь две записи базовые, тип T и моё расширение (первое) типа T.

Вроде правильно понял?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 07 Май, 2021 13:30 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9418
Откуда: Россия, Орёл
JackKatch писал(а):
Вроде правильно понял?


Всё правильно!


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 11 Май, 2021 17:33 

Зарегистрирован: Пятница, 07 Май, 2021 11:06
Сообщения: 7
Есть ещё вопрос, проясните пожалуйста.
В русском варианте книги написано (стр. 352)
"Дескриптор типа содержит - в дополнение к информации, сохраняемой для использования сборщиком мусора, - таблицу тэгов всех основных типов. На пример, если тип R2 - это расширение R1, которое является расширением R0, то дескриптор R2 содержит тэги R1 и R0, как показано на рис. 12.4. Таблица имеет 7 фиксированных входов."
В английском варианте написано 3 фиксированных входа, что сохранилось на рисунке. Вероятно есть ещё какой то вариант текста или переводчик сверялся с текстом программы.
Тогда почему не поменяли рисунок? Наверное проглядели.
Дальше, на рисунке дескриптор типа R0 не имеет базовых типов (что правильно т.к. он сам по себе тип, свой собственный). Дескриптор R1 имеет одну ссылку на базовый тип (подразумевается R0), которая указывает, почему то, на него самого. Дескриптор R2 имеет две записи. Первая, ссылка на R1, вторая снова на самого себя (хотя должна быть на R0).
Вопрос, это просто опечатки, или я чего то не понял?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 11 Май, 2021 18:38 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9418
Откуда: Россия, Орёл
Большую часть текста без картинки сложно ответить.

Последний же вопрос - да, так и должно быть, чтобы тип стоял в списке своих же базовых. Это позволяет нужные сравнения для IS проделывать и т.п.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 11 Май, 2021 19:01 

Зарегистрирован: Пятница, 07 Май, 2021 11:06
Сообщения: 7
Картинки русского и английского вариантов с рисунком.


Вложения:
Комментарий к файлу: На английском
US.jpg
US.jpg [ 60.01 КБ | Просмотров: 1318 ]
Комментарий к файлу: На русском
RU.jpg
RU.jpg [ 77 КБ | Просмотров: 1318 ]
Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 12 Май, 2021 00:18 
Аватара пользователя

Зарегистрирован: Суббота, 16 Февраль, 2008 02:47
Сообщения: 479
Входы в таблицу... пока не перевел мысленно на английский (entries), не понял, что речь о строках, элементах. И правда, на картинке Entries.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 12 Май, 2021 09:52 

Зарегистрирован: Пятница, 07 Май, 2021 11:06
Сообщения: 7
Вопрос в стрелках на рисунке. Если я правильно понял, то от R2 должно быть три стрелки. Одна на себя, вторая на R1, третья на R0. От R1 две стрелки, одна на себя, вторая на R0. От R0 одна на себя.
То что в дескрипторе не семь позиций для базовых типов а три, более менее понятно. В английском тексте было три, в русский текст перекочевал рисунок с тремя.


Вложения:
Виділення_053.png
Виділення_053.png [ 11.1 КБ | Просмотров: 1271 ]
Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 12 Июнь, 2021 17:38 

Зарегистрирован: Пятница, 07 Май, 2021 11:06
Сообщения: 7
Илья Ермаков писал(а):

Последний же вопрос - да, так и должно быть, чтобы тип стоял в списке своих же базовых. Это позволяет нужные сравнения для IS проделывать и т.п.


Проверка типа сравнивает адреса описателей (дескрипторов) типа. У переменной есть скрытый префикс (он же адрес описателя), про тип компилятор всё знает. По моему как раз для p IS T смотреть содержимое описателя (дескриптора) типа не нужно. Наверное для WITH это надо. Что бы одинаково обрабатывать весь список расширений, без исключений.


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

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


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

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


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

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