OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Суббота, 08 Август, 2020 15:01

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




Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
СообщениеДобавлено: Суббота, 25 Январь, 2020 14:23 
Аватара пользователя

Зарегистрирован: Суббота, 16 Февраль, 2008 02:47
Сообщения: 273
Коллеги, есть ли где-то описание сборщика мусора в ББ? Мож какая статья, или диссертация на худой конец )).

В частности, меня интересует сборка массивов. Мне нужно "припрятывать" указатели, так чтобы их видел сборщик мусора. С указателями на записи все понятно: я могу объявить переменную ANYPTR и поместить туда "припрятываемый" указатель. А как быть с указателями на массивы - неясно. Поскольку нет типа ANYARRAY, я, кмк, не смогу припрятать произвольный указатель на массив (неизвестного мне во время компиляции типа) языковыми средствами. Т.е. придется пользоваться заязыковыми - структурами ядра и сборщика. Посоветуйте, пож, у кого есть опыт в этом.


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

Зарегистрирован: Суббота, 16 Февраль, 2008 02:47
Сообщения: 273
Похоже, мне поможет SYSTEM.PTR, нигде не документированный, и документация к ядру Ильи Ермакова. https://oberoncore.ru/library/ermakov_v ... ejs_kernel


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 26 Январь, 2020 04:02 
Аватара пользователя

Зарегистрирован: Воскресенье, 09 Декабрь, 2018 15:14
Сообщения: 62
Откуда: Equestria
Да, SYSTEM.PTR - это ещё более обобщённый ANYPTR, позвляющий присваивать вообще любые POINTER TO, включая массивы. Только untagged типы туда лучше не пихать, а то будет плохо.
Работать с этим типом надо осторожно, потому что такая программа валидна и никаких проверок не производится:
Код:
MODULE Test;

   IMPORT SYSTEM;

   VAR
      rec: POINTER TO RECORD END;
      arr: POINTER TO ARRAY OF BYTE;
      ptr: SYSTEM.PTR;

BEGIN
   ptr := rec;
   ptr := arr;
   rec := ptr;
   arr := ptr;
END Test.

Вроде как использование IS/WITH/typeguard должно быть быть безопасно, но это не точно, лучше перепроверить.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 16 Февраль, 2020 20:09 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1294
adimetrius писал(а):
Мне нужно "припрятывать" указатели, так чтобы их видел сборщик мусора.

Так и не понял, что бы это значило?


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

Зарегистрирован: Суббота, 16 Февраль, 2008 02:47
Сообщения: 273
Я решал задачу: найти все указатели в процедурных кадрах в цепочке активации и продублировать их в массиве. Решил с оговоркой. Для решения использовал ARRAY OF SYSTEM.PTR, т.к. этот тип совместим с указателями на записи и указателями на массивы, при этом он участвует в сборке мусора, как все - т.е. сборщик "видит" указатели SYSTEM.PTR.
Оговорка в следующем: невозможно отличить в процедурном кадре
p: SYSTEM.PTR
от
u: POINTER [untagged] TO...
поскольку и то, и другое кодируется form = 0DX (в процедуре Kernel.GetRefVar).
Поэтому из моей задачи такие указатели в процедурных кадрах пришлось исключить. (Однако, полагаю, можно решить и эту задачу: штатный сборщик, анализируя кадры, вообще не замудряется, где какие типы локальных переменных: каждые 4 байта объявляются кандидатом, и потом какая-то проверка идет - типа, "указывает" ли это четырехбайтное значение в кучу. До конца не вник, поскольку задача не требует).

Надеюсь, что прояснил "припрятывание".


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 17 Февраль, 2020 08:48 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1294
Мне казалось, что припрятывать можно от сборщика мусора.
А так, можно было просто массив целых завести.


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

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


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

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


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

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